Я пытаюсь получить отзывы о рекомендациях для списка услуг в моем конкретном приложении. У меня есть серверное приложение, которое поддерживает постоянные сокет-соединения с клиентами. Я хочу и дальше развивать сервер для поддержки распределенных экземпляров. Сервер «А» должен быть в состоянии транслировать данные на другие экземпляры онлайн-сервера. То же самое касается всех других активных экземпляров.
Параметры, которые я пытаюсь исследовать:
- Redis / Zookeeper / Doozer - каждый экземпляр сервера регистрируется на сервере конфигурации, и все подключенные серверы будут получать обновления конфигурации при его изменении. Что тогда?
- Поддерживать сквозные соединения с каждым экземпляром сервера и перебирать список со всеми исходящими данными?
- Некоторая пользовательская многоадресная рассылка UDP, но мне нужно было бы добавить собственную надёжность поверх нее.
- Пользовательский брокер сообщений - служба, которая запускает и поддерживает реестр при подключении и информировании каждого сервера. Поддерживает соединение с каждым сервером, чтобы принимать данные и повторно передавать их на другие серверы.
- Некоторый надежный многоадресный транспорт UDP, при котором каждый экземпляр сервера просто вещает напрямую и реестр не поддерживается.
Вот мои проблемы:
- Я бы не хотел полагаться на внешние приложения, такие как zookeeper или doozer, но я бы использовал их, очевидно, если это лучшее решение
- С пользовательским брокером сообщений я бы не хотел, чтобы он стал узким местом для пропускной способности. Что может означать, что мне, возможно, придется иметь возможность запускать несколько брокеров сообщений и использовать балансировщик нагрузки при масштабировании?
- multicast не требует никаких внешних процессов, если мне удастся свернуть свои собственные, но в противном случае мне, возможно, придется использовать ZMQ, что снова ставит меня в ситуацию зависимости.
Я понимаю, что я также говорю о доставке сообщений, но это идет рука об руку с решением, с которым я согласен.
Кстати, мой сервер написан на Go. Есть идеи о том, как лучше всего поддерживать масштабируемость?
* РЕДАКТИРОВАНИЕ цели *
Что я действительно спрашиваю, так это лучший способ реализовать широковещательную передачу данных между экземплярами распределенного сервера, учитывая следующее:
- Каждый экземпляр сервера поддерживает постоянные соединения сокетов TCP со своими удаленными клиентами и передает сообщения между ними.
- Сообщения должны быть в состоянии транслироваться другим работающим экземплярам, чтобы их можно было доставлять в соответствующие клиентские соединения.
- Низкая задержка важна, потому что обмен сообщениями может быть быстрым.
- Последовательность и надежность важны.
* Обновленная сводка вопросов *
Если у вас есть несколько серверов / несколько конечных точек, которые должны публиковать / размещать между собой, какой режим связи рекомендуется между ними? Один или несколько брокеров сообщений повторно публикуют сообщения в списке обнаруженных серверов? Надежная многоадресная рассылка напрямую с каждого сервера?
Как соединить несколько конечных точек в распределенной системе, сохраняя низкую задержку, высокую скорость и надежность доставки?