Форум сайта python.su
Здравствуйте, любители Python'а! Пишется сервер на торнадо, к которому могут подключится множество клиентов и через каждую минуту подключенный клиент должен отправить строку данных. И вот вопрос, сколько открытых сокетов одновременно может держать сервер на Tornado ?
Офлайн
Это зависит от мощности сервера(-ов) и настроек ОС.
Тысячи и десятки тысяч вас устроят?
Например, в ОС есть ограничение на количество открытых дескрипторов.
От системы к системе эта настройка по-умолчанию может быть и 1024, и 8192, и 65535.
Конечно, ее можно менять в зависимости от мощности сервера.
Делайте обработку запросов в Торнадо асинхронной и настраивайте количество обработчиков по количеству ядер процессора.
На не самом мощном 4-ядерном AMD Opteron можно обрабатывать 8k постоянных соединений.
Не забывайте, что каждый входящий запрос требует выделение памяти, которое зависит уже от алгоритма.
Офлайн
Спасибо за ответ!
LexanderА на счет этого, то меня это не устроит
Тысячи и десятки тысяч вас устроят?
LexanderА здесь можно чуть по подробней, пожалуйста, я только не давно начал осваивать Tornado. Как сделать работу с сокетами асинхронной, и как можно использовать преимущества нескольких ядер, не теряя при этом в быстродействии.
Делайте обработку запросов в Торнадо асинхронной и настраивайте количество обработчиков по количеству ядер процессора.
Офлайн
Radist_101Если у вас нет по долгу висящих соединений, то можно воспользоваться многопоточным фреймфорком (зависит от задачи опять же)
А на счет этого, то меня это не устроит, нужно намного больше, придется разрывать соединение, потом снова коннектится.
Офлайн
Radist_101Странно, я думал, что донес мысль о масштабируемости.
А на счет этого, то меня это не устроит, нужно намного больше, придется разрывать соединение, потом снова коннектится.
Radist_101Это есть в документации с примерами.
Как сделать работу с сокетами асинхронной, и как можно использовать преимущества нескольких ядер, не теряя при этом в быстродействии.
Офлайн
Еще такой ньюанс.
Если вы будете вешать торнадо прямо на сокет, минуя балансировщик, не возникнет ли такой ситуации, когда, я, скажем, как злодей, открываю к вашему серверу 1000 коннектов, каждый из которых тянет ответ от сервера ну ооооочень медлено, как обкуренный эстонец, скажем, по килобайту в секунду. Как скоро у торнады закончатся подпроцессы?
Lexander в этом плане совершенно прав.
А так, насколько я понимаю, торнадо может держать сокетов столько, сколько позволит ОС.
Офлайн
cpuНе возникнет.
не возникнет ли такой ситуации, когда, я, скажем, как злодей, открываю к вашему серверу 1000 коннектов, каждый из которых тянет ответ от сервера ну ооооочень медлено, как обкуренный эстонец, скажем, по килобайту в секунду. Как скоро у торнады закончатся подпроцессы?
Офлайн
Если я правильно понимаю торнаду, то когда я тяну порцию данных через сокет, то конечный python обработчик занят только отдачей мне потока данных, верно или нет?
Офлайн
cpuТипа того, но лучше сказать, не тянет порцию, а считывает уже скаченную порцию (через epool или т.п.) это занимает милисекунды, а может и меньше. Обработка асинхронная, торнадо не ждет порцию, без разницы когда она появится.
Если я правильно понимаю торнаду, то когда я тяну порцию данных через сокет, то конечный python обработчик занят только отдачей мне потока данных, верно или нет?
cpu“на пальцах” будет так: этот килобайт потихоньку копится в стеке (ОС), потом торнадо за 0,1 мс считывает эту порцию, в итоге получается, что в секунду торнадо может обработать 10000 таких клиентов, а суммарный трафик составит 10Мб/сек.
скажем, по килобайту в секунду
Офлайн