Распределенный чат-сервер на основе торнадо
У меня есть требование построить распределенный сервер на основе Comet для большого количества клиентов (более 500K одновременно) с высокой пропускной способностью. В настоящее время я изучаю возможность использования Tornado для его высокой эффективности при обработке большого количества длинных запросов.
Меня беспокоит вопрос, сможет ли один сервер Tornado обработать такое большое количество длинных клиентов опроса. В качестве эксперимента я хотел бы расширить демонстрационную версию Tornado Chat (https://github.com/facebook/tornado/tree/master/demos/chat) в распределенную среду. Т.е. есть несколько серверов чата Tornado, работающих параллельно, каждый из которых отвечает за меняющийся набор клиентов.
Буду признателен за любые ваши идеи / мысли относительно реализации такой схемы или любые ссылки на соответствующие ресурсы.
Спасибо!
2 ответа
В общем, чтобы сделать базовый чат распределенным по нескольким экземплярам Tornado, вам нужно создать механизм распределенной передачи сообщений, наиболее простой реализацией будет просто использование какой-либо очереди сообщений, такой как RabbitMQ (или ее конкурент), и отправка сообщений разветвления при вводе пользователем что-то, пока все соединения слушают.
Сначала я подумал об этом, чтобы во внешнем интерфейсе был сервер / обратный прокси-сервер Nginx, а сзади было несколько экземпляров Tornado, это может быть экземпляр Tornado для каждого процесса, попробуйте выполнить некоторое тестирование производительности на своей машине, чтобы Посмотрите, сколько запущенных экземпляров Tornado в разных процессах может обрабатывать машина, когда вы заметите снижение производительности, начните делать то же самое на другой машине.
Nginx будет округлять все серверы, которые вам нужны, чтобы распределить нагрузку по серверам / экземплярам с длительным опросом /Tornado.
Не совсем уверен, насколько rabbitmq будет полезен в этом случае.