IPC между несколькими процессами на нескольких серверах
Допустим, у вас есть 2 сервера, каждый с 8 ядрами процессора.
Каждый из серверов запускает 8 сетевых служб, каждый из которых содержит произвольное количество долгоживущих клиентских подключений TCP/IP.
Клиенты отправляют сообщения в сервисы.
Службы делают что-то на основе сообщений и потенциально уведомляют N>1 клиентов об изменениях состояния.
Конечно, это звучит как ботнет, но это не так. Рассмотрим, как IRC работает с соединениями c2s и s2s и ретрансляцией сообщений s2s.
- Серверы находятся в одном центре обработки данных.
- Серверы могут общаться через частную сеть VLAN @1GigE.
- Размер сообщений составляет менее 1 КБ.
Как бы вы координировали, какие службы на каком хосте должны получать и передавать сообщения подключенным клиентам для сообщений об изменении состояния?
Существует бесконечное количество способов эффективно решить эту проблему.
- AMQP (RabbitMQ, ZeroMQ и т. Д.)
- Spread Toolkit
- N ^ 2 соединения между всеми услугами (плохо)
- Черт, даже запустить IRC!
- ...
Я ищу решение, которое:
- возможно, использует тот факт, что есть только небольшой замкнутый кластер
- легко администрировать
- хорошо масштабируется
- "тупой" (никаких странных крайних случаев)
Каковы ваши переживания?
Что вы порекомендуете?
Спасибо!
1 ответ
Если:
- Вы против использования существующей промежуточной шины.
- Ваш коммутатор поддерживает отслеживание IGMP (в основном любой коммутатор Cisco, который вы можете купить, будет включен по умолчанию - я предполагаю, что коммутаторы Dell/HP также будут иметь эту функцию)
- Вы все в одной VLAN
Тогда многоадресная рассылка IPv4 будет работать "из коробки" именно для того, что вы пытаетесь сделать. Получатели подписываются на канал (многоадресная группа), отправители отправляют дейтаграмму UDP на многоадресный адрес группы, коммутатор выясняет, кто что получает. Это заставляет ваше сетевое оборудование интеллектуально обрабатывать маршрутизацию сообщений.
Если ваш коммутатор не поддерживает отслеживание IGMP, он будет обрабатывать многоадресные кадры (Ethernet) как широковещательные и отправлять их всем хостам в VLAN, независимо от того, запрашивал их хост или нет. Таким образом, вы закроете канал между коммутатором и хостами, даже если хост-операционная система просто отбрасывает пакеты до того, как они попадают в какое-либо приложение.
Вы по-прежнему можете использовать многоадресную рассылку IPv4, если они не все в одной VLAN, но вам нужно больше настроить устройство, чтобы оно заработало, но оно все равно будет работать нормально.