IPC entre vários processos em vários servidores

2

Digamos que você tenha 2 servidores, cada um com 8 núcleos de CPU cada.

Cada um dos servidores executa 8 serviços de rede que hospedam um número arbitrário de conexões de clientes TCP / IP de longa duração.

Clientes enviam mensagens para os serviços.

Os serviços fazem algo com base nas mensagens e, potencialmente, notificam o N > 1 dos clientes das alterações de estado.

Claro, parece uma botnet, mas não é. Considere como o IRC funciona com conexões c2s e s2s e com a transmissão de mensagens s2s.

  • Os servidores estão no mesmo datacenter.
  • Os servidores podem se comunicar através de uma VLAN privada @ 1GigE.
  • As mensagens são < 1 KB de tamanho.

Como você coordenaria quais serviços em qual host deveria receber e retransmitir mensagens para clientes conectados para mensagens de mudança de estado?

Há um número infinito de maneiras de resolver esse problema com eficiência.

  • AMQP (RabbitMQ, ZeroMQ, etc.)
  • Spread Toolkit
  • N ^ 2 conexões entre todos os serviços (ruim)
  • Heck, até mesmo execute o IRC!
  • ...

Estou procurando uma solução que:

  • talvez explora o fato de que há apenas um pequeno cluster fechado
  • é fácil de administrar
  • escala bem
  • é "burro" (sem casos estranhos)

Quais são suas experiências?

O que você recomendaria?

Obrigado!

    
por z8000 26.02.2010 / 06:17

1 resposta

1

Se:

  1. Você se opõe a usar um barramento de middleware existente.
  2. O seu switch suporta snooping IGMP (basicamente, qualquer switch Cisco que você possa comprar estará ativado por padrão - presumo que os switches Dell / HP também tenham esse recurso)
  3. Vocês estão todos na mesma VLAN

Em seguida, o IPv4 multicast funcionará pronto para uso exatamente para o que você está tentando fazer. Receptores se inscrevem em um canal (grupo multicast), os remetentes enviam um datagrama UDP para o endereço multicast do grupo, o switch calcula quem recebe o quê. Isso faz com que o seu equipamento de rede lide com o roteamento de mensagens de maneira inteligente.

Se o seu switch não suportar a espionagem IGMP, ele tratará os quadros multicast (Ethernet) como broadcasts e os enviará a todos os hosts na VLAN, independentemente de o host ter solicitado para eles ou não. Então você vai entupir o tube entre o seu switch e os hosts, mesmo que o sistema operacional do host esteja soltando os pacotes antes de chegar a qualquer aplicativo.

Você ainda pode usar o IPv4 Multicast se eles não estiverem todos na mesma VLAN, mas você terá que fazer mais configurações em seu equipamento para fazer isso funcionar, mas ainda funcionará muito bem.

    
por 24.11.2010 / 15:13