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