#performance #scalability #tornado
#Производительность #масштабируемость #tornado
Вопрос:
Я работаю над простым приложением (серверной частью для интерфейса в Flex), которое в большинстве сценариев выполняет следующее:
- вызовите внешнюю веб-службу REST-ful
- извлеките некоторые данные из локальной базы данных
- обработать и вернуть оба результата
Выиграет ли мое приложение от того, что веб-сервер Tornado неблокирующий? Я имею в виду, с точки зрения масштабируемости и производительности. В чем здесь будет загвоздка?
Ответ №1:
О да. Это определенно принесет пользу.
Пока сервер занят выборкой внешних ресурсов, он может продолжать обслуживать другие вызовы, поскольку интерпретатор не заблокирован.
На обычных веб-серверах для достижения этой цели используется что-то вроде Gevent.
Кроме того, в Tornado 2.1 и выше шаг 1 и шаг 2 могут быть объединены, поскольку:
def get (self):
http_client = AsyncHTTPClient() response1, response2 = yield [gen.Task(http_client.fetch, url1), gen.Task(http_client.fetch, url2)]