Pergunta

É uma boa idéia para usar sockets para enviar dados entre dois servidores, ou devo usar algo como MQ para mover dados.

As minhas perguntas: são soquetes de confiança, se eu precisar de uma única vez, entrega / assegurada de dados

Existem outras soluções?

Graças.

Foi útil?

Solução

Sockets são uma API de nível de aplicativo para executar a comunicação de rede. A confiabilidade dos soquetes depende do protocolo de rede que você selecionar quando você cria o socket. Se você selecionar TCP / IP, você receberá transferência "confiável" ... até um limite. Se você selecionar UDP / IP que você vai ter de transferência "não confiável".

Como afirmado em outras respostas, garante TCP que você não perder ou corromper dados até certo ponto:

  1. se existe uma rede bastante longa interrupção, ou o remetente ou o destinatário morre uma conexão TCP / IP vai quebrar e você vai perder dados, a menos que você tomar medidas para reiniciar o conexão.
  2. se houver uma rede corrupção de dados nível, há uma pequena probabilidade de que ele não será detectados pelos checksums.

Para maiores níveis de garantias de confiabilidade do que TCP / IP fornece, você precisa implementar checksumming mais sensíveis e mecanismos de entrega garantidos por cima da camada de rede baseada em sockets do seu aplicativo. Ou usar um produto de enfileiramento de mensagens que faz difícil o trabalho para você.

Portanto, a resposta à sua pergunta é que ele depende de como você usa Sockets, e em que nível de confiabilidade do sistema requer.

Outras dicas

Sockets são tão confiáveis ??como você faz sua implementação, e com base no hardware subjacente. Se você não quer o incômodo de fazer um serviço de entrega garantida (em que condições? 100% nunca vai acontecer), um sistema de fila de mensagens é uma boa aposta. A fila de mensagens irá implementaram todos os persistência, Esperar na fila, novas tentativas, etc que você precisa para implementar a si mesmo se você foi com soquetes padrão.

Você provavelmente deve utilizar um MQ se você precisar de entrega garantida não importa o que acontece (como se a outra parte fica offline para manutenção) e você não quer escrever toda a lógica de si mesmo. Sockets é o que você usa para se conectar a uma outra parte, não importa se essa parte é o MQ ou o receptor final da mensagem.

soquete são confiáveis ??uma vez que cada comunicação é feita em cima dela, incluindo MQ.

Mas você pode querer adicionar um pouco de entrega GARANTIDO com MQ para melhorar a confiabilidade de sua aplicação. O que é isso? garante a entrega garantiu que a sua mensagem é processada pelo menos uma vez, e não mais de uma vez, pelo consumidor. o consumidor está fora? o produtor está desligado? o servidor MQ está desligado? as falhas de disco? graças ao MQ, nenhuma mensagem será perdida, o que quer que aconteça (desde que o administrador sabe o seu trabalho). Além disso, se você reiniciar o consumidor, nenhuma mensagem será processada duas vezes. Wich pode ser importante se as mensagens contêm milhões de dólares transferências. Mas não garantimos que a sua mensagem é processada em uma quantidade raisonnable de tempo. e o tempo de processamento é por vezes mais importante do que a entrega GARANTIDO, dependendo da sua aplicação.

É até você para escolher a melhor maneira de se comunicar entre os servidores, dependendo de suas necessidades. entrega de entrega Garantido tem tanto custo financeiro e desempenho, por isso é para ser usado somente se realmente necessário (milhões de dólares tranfers, por exemplo).

Para a maioria das aplicações que você pode conseguir algo satisfazendo apenas por repetindo suas mensagens quando, em seguida, falhar. Mas isso não é a entrega verdadeira uma única vez garantiu. não tentar implementá-lo por si mesmo, é uma coisa muito difícil que só poucos são capazes de alcançar. É useles considerar redevelopping um software tão complicado como MQ ou Apache AQ.

Espero que ajude.

  • jeb

Sockets é o mecanismo em bruto para a transferência de dados. Tudo o resto é implementado em cima deste. No modelo de rede OSI eles pertencem a camada 4. Embora implementar end-to-end confiável conexão, eles são raramente utilizado como o protocolo final. Você quase sempre precisa implementar uma camada de aplicação. O que isto seria depende da sua aplicação (que você precisa para transferir arquivos ou mensagens Basta enviar) e sua infra-estrutura de rede.

Se você usar um fluxo de tomada , é assegurado protocolo TCP que os dados não se perder na transmissão e é improvável que ser corrompidos (embora você tem que decidir se suas somas de verificação de 16 bits são suficientes ou você precisa de um mecanismo de verificação de camada app).

sistemas O MQ fornecer, eo que você pode ou não necessidade é de nível de aplicativo transação do tipo confiabilidade, ou seja, a capacidade de entrega de garantia, mesmo em face de hardware ou software falhas intermitentes.

Dependendo do tipo de dados um serviço web simples pode ser a solução mais rápida. Eles são relativamente fáceis de configurar e testar. Embora para alguns exemplos específicos que eu preciso saber que tipo de dados e ambiente que você está em execução.

Depende largly do tipo de aplicação que você está desenvolvendo. É que você está escrevendo um programa onde você precisa de resposta ou ack da mensagem enviada em seguida, sockets TCP são boas. Mas, se você estiver implementando algum tipo de fluxo de trabalho de cenário, você deve usar filas de mensagens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top