Я пытаюсь получить отзывы о рекомендациях для службы «список» в моем конкретном приложении. У меня есть серверное приложение, которое поддерживает постоянные соединения сокетов с клиентами. Я хочу доработать сервер для поддержки распределенных экземпляров. Сервер «А» должен иметь возможность передавать данные другим экземплярам онлайн-сервера. То же самое касается всех других активных экземпляров.
Варианты, которые я пытаюсь исследовать:
- Redis / Zookeeper / Doozer - Each server instance would register itself to the configuration server, and all connected servers would receive configuration updates as it changes. What then?
- Maintain end-to-end connections with each server instance and iterate over the list with each outgoing data?
- Некоторая пользовательская многоадресная рассылка UDP, но мне нужно было бы добавить мою собственную дополнительную надежность поверх нее.
- Пользовательский брокер сообщений — служба, которая запускает и поддерживает реестр, когда каждый сервер подключается и информирует его. Поддерживает соединение с каждым сервером, чтобы принимать данные и ретранслировать их на другие серверы.
- Некоторый надежный многоадресный транспорт UDP, где каждый экземпляр сервера просто транслирует напрямую, и список не поддерживается.
Вот мои опасения:
- Я бы хотел не полагаться на внешние приложения, такие как zookeeper или doozer, но я бы использовал их, очевидно, если это лучшее решение.
- Я бы не хотел, чтобы пользовательский брокер сообщений стал узким местом в пропускной способности. Что означало бы, что мне, возможно, придется иметь возможность запускать несколько брокеров сообщений и использовать балансировщик нагрузки при масштабировании?
- многоадресная рассылка не требует никаких внешних процессов, если мне удастся запустить свой собственный, но в противном случае мне, возможно, придется использовать ZMQ, что снова ставит меня в ситуацию зависимости.
Я понимаю, что я также говорю о доставке сообщений, но это идет рука об руку с решением, которое я использую. Кстати, мой сервер написан на Go. Любые идеи о наилучшем рекомендуемом способе поддержания масштабируемости?
* ИЗМЕНИТЬ цель *
На самом деле я спрашиваю, как лучше всего реализовать широковещательную передачу данных между экземплярами распределенного сервера, учитывая следующее:
- Каждый экземпляр сервера поддерживает постоянные соединения TCP-сокетов со своими удаленными клиентами и передает сообщения между ними.
- Сообщения должны иметь возможность широковещательно передаваться другим работающим экземплярам, чтобы их можно было доставить по соответствующим клиентским соединениям.
- Низкая задержка важна, поскольку обмен сообщениями может осуществляться с высокой скоростью.
- Важна последовательность и надежность.
* Обновленная сводка вопросов *
Если у вас есть несколько серверов/конечных точек, которым необходимо публиковать/подписываться друг с другом, какой рекомендуемый режим связи между ними? Один или несколько брокеров сообщений для повторной публикации сообщений в списке обнаруженных серверов? Надежный мультикаст напрямую с каждого сервера? Как соединить несколько конечных точек в распределенной системе, сохраняя низкую задержку, высокую скорость и надежную доставку?
select
в 1024 fd. Если вы используете 30 000 пар сокетов для достижения лимита портов, вы можете рассмотреть возможность разделения его на несколько IP-адресов. (У вас действительно 30 000 отдельных клиентов?) - person lunixbochs   schedule 20.09.2011