Existem soluções de cluster de alta disponibilidade para streaming TCP em tempo real?

4

Temos um servidor que recebe alguns dados, agindo como um cliente TCP, processando-os de alguma forma e servindo dados processados a clientes, agindo como um servidor TCP. Ele também armazena esses dados no disco e pode servir de arquivos em vez de fluxo em tempo real.

O problema é que esse serviço deve estar disponível no modo 24x7, sem interrupções permitidas. No momento, isso é feito com dois servidores, um agindo como um backup ativo - os clientes mantêm conexões com os dois servidores e, se algo acontecer ao servidor principal, eles simplesmente alternam para o backup. Embora essa solução funcione por cerca de 15 anos, é um pouco inconveniente e coloca muita lógica de failover nos clientes.

Ultimamente as pessoas começaram a falar sobre o uso de um cluster para garantir a disponibilidade desse serviço, mas não importa o quanto eu pesquise, não consigo encontrar soluções de cluster que permitam failover de conexão TCP transparente para que ninguém perceba que algo aconteceu para o servidor. Existem alguns documentos de pesquisa, mas não consegui encontrar nenhuma implementação em funcionamento. Aqui está como eu acho que deveria funcionar:

  1. Os dois servidores recebem os dados via TCP. O ideal é que pareça uma única conexão com o mundo "externo", para economizar largura de banda e, o que é mais importante, garantir que os dois servidores recebam fluxos de dados idênticos.

  2. Quando um cliente se conecta ao IP do cluster, ele recebe os dados processados em uma única conexão, mas ambos os servidores devem ver essa conexão e fornecer os dados, é apenas que apenas um dos fluxos realmente alcança o cliente , o backup vai para / dev / null, por assim dizer.

  3. Quando o servidor falha (ele não transmite dados por algum tempo, digamos, 5 segundos), o cliente deve continuar recebendo o mesmo fluxo dentro da mesma conexão. Ele precisa acontecer muito rápido, então o tempo total de streaming não excede aproximadamente 10 segundos.

Confiabilidade é a coisa mais importante aqui. O failover rápido é o próximo. As soluções Linux de código aberto são preferidas, mas se existirem soluções quase perfeitas comerciais e / ou não-Linux, também gostaria de saber sobre elas. Soluções que impõem muitas restrições ou exigem modificações do software aplicativo do servidor são perfeitamente aceitáveis também.

    
por Sergei Tachenov 06.08.2011 / 12:59

2 respostas

1

Você deve olhar para o HAProxy. O HAProxy geralmente é executado no modo HTTP, mas também pode manipular conexões TCP brutas. Ele suporta o balanceamento de carga entre servidores e pode usar o Heartbeat para detectar se uma instância está inativa.

Se você configurar precisa ser totalmente transparente (servidores obtendo os IPs de origem versus o do servidor HAProxy), você pode ter que corrigir seu kernal Linux para TProxy ou encontrar uma distribuição Linux que suporte TProxy dentro do kernel ou como um módulo .

Essa é a melhor solução de código aberto. Se você precisa de algo mais abrangente do que isso, você teria que olhar para ofertas comerciais como Citrix Netscaler para BigIP da F5.

    
por 01.09.2011 / 14:21
0

Você poderia obter um PhD neste material - é um problema imensamente complicado. Ou você poderia adotar a abordagem fácil e consertar o protocolo para que ele não fosse tão instável quanto a falhas de conexão. O SMTP é um modelo decente de como evitar a maioria das formas de perda de dados induzida por falhas.

    
por 09.08.2011 / 02:18