Большое количество постоянных соединений - PullRequest
2 голосов
/ 20 февраля 2009

Я настраиваю проект, и один из главных вопросов - как реализовать простую систему очередей сообщений (что-то вроде системы чата в мессенджере) Я хотел бы избежать опроса, но, скорее всего, будет много одновременных соединений (десятки тысяч). Это будут соединения HTTP + SSL, запускаемые из приложения, а не из браузера.

Одним из решений, которое я нашел, было бы распределение нагрузки DNS: распределите эти постоянные соединения по нескольким веб-серверам nginx.

Что ты думаешь? Любые другие возможные решения?

Ответы [ 5 ]

2 голосов
/ 20 февраля 2009

Для балансировки нагрузки сохранение сервера приложений без сохранения состояния значительно расширит поле. Получив это, вы можете использовать практически любой общий балансировщик нагрузки. От чего-то определенного протокола, такого как HTTP-балансировщики нагрузки, до общих балансировщиков нагрузки на уровне TCP.

Держите это без сохранения состояния, в сравнении с остальным будет тривиально.

1 голос
/ 20 февраля 2009

Если вы планируете использовать веб-службы (передача сообщений XML), вы можете использовать gsoap, в который входит пример приложения веб-сервера, использующего пулы потоков. Я запустил сервер, используя это и MySQL (для постоянного состояния). Я согласен с Райаном в том, что касается сокращения / устранения состояния соответствия заявки.

0 голосов
/ 16 июля 2011

решение, хорошо разработанное для такого рода сообщений, - xmpp. Он позволяет масштабировать до 10000 соединений и получать сообщения назад и вперед с минимальной нагрузкой на сервер и минимальным опросом.

взгляните на следующий пост, чтобы выбрать хороший фреймворк xmpp для использования. Какую платформу XMPP для Java выбрать

0 голосов
/ 20 февраля 2009

Рассматривали ли вы peer-to-peer? Уровень техники перфорирования через брандмауэры на самом деле очень эффективен, тем более что вы в каждом случае запускаете свое собственное клиентское программное обеспечение и у вас есть серверы для установки соединения.

Больше работы, но значительно меньше ресурсов сервера.

Кроме того, напишите свое собственное серверное программное обеспечение - убедитесь, что оно может обрабатывать множество соединений и является чрезвычайно легким, и вы должны иметь возможность обрабатывать тысячи соединений на сервер перед балансировкой нагрузки.

-Adam

0 голосов
/ 20 февраля 2009

Балансировка нагрузки DNS позволит вам распределять запросы между несколькими IP-адресами, которые могут быть несколькими серверами. Помните, что ваши клиенты могут получать разные серверы от одного запроса к другому, поэтому ваше приложение не может использовать локальное управление состоянием. Ваша заявка должна будет хранить свое состояние в централизованном месте, таком как база данных.

...