Я пишу чат-приложение с использованием WebSockets, используя сервер WebSockets Jetty 9.3.7, работающий на AWS/EC2. Описание архитектуры приведено ниже:Нужна ли мне кластеризация сеансов в БД для балансировки нагрузки на сервер Jetty WebSockets с HAProxy на AWS/EC2?
(a) Серверы основаны на HTTPS
(wss
). Я думаю об использовании HAProxy
с использованием IP-хэш-LB для этого. Архитектура системы будет выглядеть следующим образом:
-->wss1: WebSocket server 1
/
clients->{HAProxy LB} -->wss2: WebSocket server 2
(a, b,..z) \
-->wss3: WebSocket server 3
Я завершение HTTPS
/wss
на LB в этих instructions.
(б) Клиенты a...z
подключиться к системе и будет подключаться к различным wss1
, wss2
или wss3
т.д.
(с) Теперь моя WebSocket приложение работает следующим образом. Когда один из клиентов выталкивает сообщение, он отправляется на сервер WS, к которому подключен клиент (скажем wss1
, а затем это сообщение распространяется среди нескольких других клиентов (набор клиентов, программно определенных в моем приложении WebSocket работает на wss1
). Например, a
создает сообщение Hey guys!
и толкает его к wss1
, который затем передаются клиентам b
и c
, так что b
и c
получить Hey guys!
сообщений. b
имеет подключение WebSocket к серверу wss2
и c
имеет подключение WebSocket до wss3
.
Мой вопрос заключается в том, чтобы нажать м essage с сервера приема сообщений, например (c) выше, wss1
должен знать сеанс/соединение WebSocket с b
и c
, которые вполне могут находиться на другом сервере WebSocket. Могу ли я использовать кластеризацию сеансов на Jetty для получения сеансов связи b
и c
? Если нет, то каков наилучший способ обеспечить этот поиск при балансировке нагрузки Jetty WebSockets?
Во-вторых, если я использую сеанса кластеризацию или некоторый такой метод для получения сеанса, как я могу использовать сессии для b
и c
на wss1
, чтобы отправить сообщение b
и c
? Похоже, что нет никакого способа сделать это, кроме как с помощью какой-либо связи между серверами. Это верно?
Если мне нужно использовать кластеры сеанса для этого, есть ли пример github, на который вы можете указать мне?
Спасибо!
Модель TL; DR версия моего вопроса будет: В HTTP: // StackOverflow. ком/Ques/15646213/how-do-i-access-instantiated-websockets-in-jetty-9? rq = 1, ответ Joakim описывает, как получить сеанс WebSocket, хранящийся локально на том же сервере. Как достичь этого, когда сеансы находятся на разных серверах? Если кластеризация сеансов - это способ, есть ли место, где я могу найти схему кластеризации сеансов Jetty? – Sonny
Я нашел схему кластеризации здесь: https://www.eclipse.org/jetty/documentation/9.2.3.v20140905/session-clustering-jdbc.html – Sonny