Как обрабатывать 20k одновременных постоянных соединений

Я пытаюсь разработать архитектуру для обработки массивных соединений через сокеты TCP, и я сомневаюсь в ее ограниченности.

Мне придется обрабатывать ~20 тыс. Одновременных TCP-соединений, и это соединения с длительным опросом, они будут оставаться подключенными в течение длительного времени и будут отправлять данные каждую минуту.

Использование потоков не подлежит сомнению, так как потоки 20 Кб будут истощать системные ресурсы. Я планирую использовать gevent для обработки такого количества одновременных соединений или даже использовать haproxy и 2 сервера (w/ gevent) для обработки, например, 10 тыс. Соединений каждое. Имеет ли это смысл? У кого-нибудь есть советы или опыт использования gevent с соединениями 10K+? Кто-нибудь имеет представление о требованиях к оборудованию для обработки этих соединений? Я видел несколько тестов, которые показывают много тайм-аутов соединения для gevent на 5k одновременных соединениях, что не очень многообещающе для моей проблемы.

Примечание: я уже читал о проблеме C10k и советах в "приложении Comet для миллионов пользователей".

2 ответа

Решение

Используйте оба сразу в комбинации. Назначьте что-то порядка 1000 подключений к процессу. Используйте менеджера для распределения соединений и запуска новых процессов, если вы достигнете точки, где каждый текущий процесс обработки насыщен.

Ну, так как вы можете использовать 2 сервера для обработки 10 КБ каждый, почему бы не использовать 5 серверов и обрабатывать 4 КБ на каждом?

Другие вопросы по тегам