Мы собираемся разработать бэкэнд для нашего посланника, поэтому у меня есть одна идея, которую я хочу здесь описать, может быть, кто-то может дать мне совет.Чат на основе Erlang (распределение нагрузки и распределение нагрузки)
1) Идея:
Nginx - перенаправляет запрос на случайный узел (круговой) -> Erlang кластера - перенаправляет к фактическому узлу (мы выбираем узел с минимальным количеством процессов) -> Рукопожатие -> Перейдите на WebSocket.
Каждый узел в кластере имеет таблицу ETS, которая содержит количество процессов для каждого узла (поля - узел, num_processes). Каждый узел каждые 5 секунд отправляет свое количество процессов всем узлам кластера.
Таким образом, нам не нужно иметь главный узел, потому что каждый узел может выполнять балансировку нагрузки.
2) Дополнительный вопрос:
Это хорошая идея, чтобы зарегистрировать активные соединения WebSocket пользователя (PID) по всему миру с gproc? Нам нужен этот список для каждого пользователя для отправки уведомлений через ws для конечного пользователя.
1) Более 1 миллион пользователей (более 200 тысяч онлайн) 2) Мы будем отправлять только текстовые сообщения с метаданными (изображения, видео и аудио будут сохранены на кластере «СМИ» сервера) 3) Я пытаюсь распространять все соединения пользователя WebSocket между кластером. 4) Когда узел умирает, все клиенты пользователя будут пытаться повторно подключиться, что приведет к сбою ping (соединения WebSocket умершего узла будут распространяться среди живых узлов) – user1178363