2009-02-20 3 views
2

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

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

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

ответ

0

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

0

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

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

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

-Adam

3

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

Держите его без гражданства, остальное будет тривиально в сравнении.

+0

Спасибо за ваш ответ Райан. Мой вопрос заключается в том, что если я использую несколько распределенных балансированных по нагрузке баз данных, не будет ли проблем с моделью «возможной согласованности»? Может быть, алгоритм осколков, который всегда указывает мои запросы на одну и ту же базу данных? – idevelop

+0

Я стараюсь избегать опроса, поэтому я хотел сохранить связи живыми. – idevelop

+0

Я думал больше о планах балансировки нагрузки на уровне 4 на основе IP-клиента. Впрочем, я могу полностью отказаться от своих предположений. –

1

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

0

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

взгляните на следующее сообщение, чтобы выбрать хорошую инфраструктуру xmpp для использования. What XMPP framework for Java to choose