IPC在多个服务器上的多个进程之间

假设您有两台服务器,每台服务器有8个CPU核心。

每个服务器运行8个networking服务,每个networking服务都承载任意数量的长期TCP / IP客户端连接。

客户发送消息到服务。

服务根据消息做一些事情 ,并且可能通知客户端状态变化的N> 1。

当然,这听起来像是一个僵尸networking,但事实并非如此。 考虑IRC如何与c2s和s2s连接以及s2s消息中继协同工作。

  • 这些服务器位于同一个数据中心。
  • 服务器可以通过专用VLAN @ 1GigE进行通信。
  • 信息大小<1KB。

你将如何协调主机应该接收哪些服务,并将消息转发给连接的客户机以获取状态改变消息?

有很多方法可以有效地解决这个问题。

  • AMQP(RabbitMQ,ZeroMQ等)
  • 传播工具包
  • 所有服务之间的N ^ 2连接(坏)
  • 嘿,甚至运行IRC!

我正在寻找一个解决scheme:

  • 也许利用只有一个小封闭群集的事实
  • 很容易pipe理
  • 规模很好
  • 是“哑”(没有奇怪的边缘情况下)

你有什么经验?

你有什么build议?

谢谢!

如果:

  1. 你反对使用现有的中间件总线。
  2. 您的交换机支持IGMP侦听(基本上,您可以购买的任何Cisco交换机默认都会启用此function—我假设Dell / HP交换机也具有此function)
  3. 你们都在同一个VLAN中

然后,IPv4多播将为您正在尝试做的事情而开箱即用。 接收者订阅一个通道(多播组),发送者发送一个UDP数据报到组播组地址,交换机解决谁得到什么。 它使您的networking设备智能地处理消息路由。

如果您的交换机支持IGMP侦听,则会将(以太网)多播帧视为广播,并将其发送到VLAN上的所有主机,而不pipe主机是否请求它们。 因此,即使主机操作系统在到达任何应用程序之前丢弃了数据包,也会堵塞交换机和主机之间的pipe道。

如果IPv4组播不在同一个VLAN中,您仍然可以使用IPv4组播,但是您必须在设备上进行更多configuration才能使其发挥作用,但仍然可以正常工作。