Найти - Пользователи
Полная версия: Максимальное количество открытых сокетов на Tornado
Начало » Network » Максимальное количество открытых сокетов на Tornado
1
Radist_101
Здравствуйте, любители Python'а! Пишется сервер на торнадо, к которому могут подключится множество клиентов и через каждую минуту подключенный клиент должен отправить строку данных. И вот вопрос, сколько открытых сокетов одновременно может держать сервер на Tornado ?
Lexander
Это зависит от мощности сервера(-ов) и настроек ОС.
Тысячи и десятки тысяч вас устроят?

Например, в ОС есть ограничение на количество открытых дескрипторов.
От системы к системе эта настройка по-умолчанию может быть и 1024, и 8192, и 65535.
Конечно, ее можно менять в зависимости от мощности сервера.

Делайте обработку запросов в Торнадо асинхронной и настраивайте количество обработчиков по количеству ядер процессора.
На не самом мощном 4-ядерном AMD Opteron можно обрабатывать 8k постоянных соединений.

Не забывайте, что каждый входящий запрос требует выделение памяти, которое зависит уже от алгоритма.
Radist_101
Спасибо за ответ!

Lexander
Тысячи и десятки тысяч вас устроят?
А на счет этого, то меня это не устроит, нужно намного больше, придется разрывать соединение, потом снова коннектится.


Lexander
Делайте обработку запросов в Торнадо асинхронной и настраивайте количество обработчиков по количеству ядер процессора.
А здесь можно чуть по подробней, пожалуйста, я только не давно начал осваивать Tornado. Как сделать работу с сокетами асинхронной, и как можно использовать преимущества нескольких ядер, не теряя при этом в быстродействии.
o7412369815963
Radist_101
А на счет этого, то меня это не устроит, нужно намного больше, придется разрывать соединение, потом снова коннектится.
Если у вас нет по долгу висящих соединений, то можно воспользоваться многопоточным фреймфорком (зависит от задачи опять же)
Lexander
Radist_101
А на счет этого, то меня это не устроит, нужно намного больше, придется разрывать соединение, потом снова коннектится.
Странно, я думал, что донес мысль о масштабируемости.
Что вам мешает добавить серверов?
Только, в этом случае, разобраться с Торнадо - это самое простое, что вам предстоит.

Я вам даже больше скажу.
Вот выберите вы сервера себе под расчетную нагрузку, настроите их в единую систему, а потом вам обязательно нужно будет сделать тестовый прогон и вы получите реальную производительность, которая гарантированно будет отличаться от расчетной.
А еще позже, под реальной нагрузкой вы увидите, что фактическая производительность снова отличается - как от расчетной, так и от тестовой.

Radist_101
Как сделать работу с сокетами асинхронной, и как можно использовать преимущества нескольких ядер, не теряя при этом в быстродействии.
Это есть в документации с примерами.
Лучше это смотреть в первоисточнике.
Вот для примера: http://www.tornadoweb.org/en/stable/gen.html - здесь можно посмотреть 2 способа, как организовать асинхронную работы.
cpu
Еще такой ньюанс.
Если вы будете вешать торнадо прямо на сокет, минуя балансировщик, не возникнет ли такой ситуации, когда, я, скажем, как злодей, открываю к вашему серверу 1000 коннектов, каждый из которых тянет ответ от сервера ну ооооочень медлено, как обкуренный эстонец, скажем, по килобайту в секунду. Как скоро у торнады закончатся подпроцессы?
Lexander в этом плане совершенно прав.
А так, насколько я понимаю, торнадо может держать сокетов столько, сколько позволит ОС.
o7412369815963
cpu
не возникнет ли такой ситуации, когда, я, скажем, как злодей, открываю к вашему серверу 1000 коннектов, каждый из которых тянет ответ от сервера ну ооооочень медлено, как обкуренный эстонец, скажем, по килобайту в секунду. Как скоро у торнады закончатся подпроцессы?
Не возникнет.
Подпроцессы тут ни причем, торнадо может обработать их все в одном потоке.
cpu
Если я правильно понимаю торнаду, то когда я тяну порцию данных через сокет, то конечный python обработчик занят только отдачей мне потока данных, верно или нет?
o7412369815963
cpu
Если я правильно понимаю торнаду, то когда я тяну порцию данных через сокет, то конечный python обработчик занят только отдачей мне потока данных, верно или нет?
Типа того, но лучше сказать, не тянет порцию, а считывает уже скаченную порцию (через epool или т.п.) это занимает милисекунды, а может и меньше. Обработка асинхронная, торнадо не ждет порцию, без разницы когда она появится.

cpu
скажем, по килобайту в секунду
“на пальцах” будет так: этот килобайт потихоньку копится в стеке (ОС), потом торнадо за 0,1 мс считывает эту порцию, в итоге получается, что в секунду торнадо может обработать 10000 таких клиентов, а суммарный трафик составит 10Мб/сек.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB