Pergunta

em vez de escrever sua própria biblioteca.

Estamos trabalhando em um projeto aqui que vai ser um pool de servidores auto-divisão, se uma seção cresce muito pesado, o gerente seria dividi-lo e colocá-lo em outra máquina como um processo separado. Seria também alertar todos os clientes conectados Isso afeta para conectar para o novo servidor.

Estou curioso sobre o uso ZeroMQ para inter-servidor e de comunicação entre processos. O meu parceiro prefere rolar a sua própria. Eu estou olhando para a comunidade para responder a esta pergunta.

Eu sou um programador bastante novato mim e acabou de aprender sobre mensagens filas. Como eu pesquisei e li, parece que todos está usando filas de mensagens para todos os tipos de coisas, mas por quê? O que os torna melhor do que escrever sua própria biblioteca? Por que eles são tão comuns e por que existem tantos?

Foi útil?

Solução

o que os torna melhor do que escrever sua própria biblioteca?

Quando lançando a primeira versão do seu aplicativo, provavelmente nada: suas necessidades são bem definidos e você irá desenvolver um sistema de mensagens que irá atender às suas necessidades:. Lista de recursos pequena, o código fonte pequena etc

Essas ferramentas são muito útil após a primeira versão, quando você realmente tem que estender a sua aplicação e adicionar mais recursos para ele. Deixe-me dar-lhe casos alguns de uso:

  • seu aplicativo terá que falar com uma máquina big endian (SPARC / PowerPC) a partir de uma pequena máquina endian (x86, Intel / AMD). Seu sistema de mensagens tinha algum endian pressuposto de ordenação: ir e corrigi-lo
  • você projetou seu aplicativo para que ele não é um / sistema de mensagens binário protocolo e agora é muito lento, porque você gasta a maior parte de seu tempo analisá-lo (o número de mensagens aumentou e análise tornou-se um gargalo): adaptá-lo para que ele possa transporte binário / codificação fixa
  • No começo você tinha 3 máquina dentro de uma lan, sem atrasos perceptível tudo fica para cada máquina. seu cliente / patrão / pointy-de cabelo-diabo-chefe aparece e lhe dizer que você vai instalar o aplicativo em WAN você não controlar - e então você começa a ter falhas de conexão, mau latência etc. você precisa mensagem de loja e repetir o envio -los mais tarde: voltar para o código e conecte essas coisas em (e apreciar)

  • mensagens enviadas necessidade de ter respostas, mas nem todos eles: você envia alguns parâmetros e esperar uma planilha, como resultado, em vez de apenas enviar e reconhece, volte ao código e conecte essas coisas em (e desfrutar .)

  • algumas mensagens são críticas e necessidades há recepção / envio de cópia de segurança adequada / persistência /. Porque você pergunta ? fins de auditoria

E muitos outros casos de uso que eu esqueci ...

Você pode implementá-lo, mas não gastar muito tempo fazendo isso:. Você provavelmente irá substituí-lo, mais tarde, de qualquer maneira

Outras dicas

Isso é muito parecido com perguntando: por que usar um banco de dados quando você pode escrever seu próprio

A resposta é que o uso de uma ferramenta que tem sido em torno de um tempo e é bem compreendido em lotes de diferentes casos de uso, compensa mais e mais ao longo do tempo e como suas necessidades evoluem. Isto é especialmente verdadeiro se mais de um desenvolvedor está envolvido em um projeto. Você quer se tornar pessoal de apoio para um sistema de filas se mudar para um novo projeto? Usando A previne ferramenta que aconteça. Torna-se problema de outra pessoa.

Caso em questão: a persistência. Escrevendo uma ferramenta para armazenar uma mensagem no disco é fácil. Escrevendo um persistor que as escalas e executa bem e estável, em muitos casos de uso diferentes, e é gerenciável e barato para apoio, é difícil. Se você quiser ver alguém reclamando sobre o quão difícil é, então, olhar para isso: http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional-programming-exchange

De qualquer forma, espero que isso ajude. Por todos os meios escrever sua própria ferramenta. Muitas, muitas pessoas têm feito isso. O que quer que resolve o seu problema, é bom.

Estou pensando em usar ZeroMQ mim - daí me deparei com esta questão

.

Vamos supor por um momento que você tem a capacidade de implementar um sistema de filas de mensagens que atenda todas as suas necessidades. Por que você iria adotar ZeroMQ (ou outra biblioteca de terceiros) sobre a abordagem roll-seu-próprio? Simples -. Custos

Vamos assumir por um momento que ZeroMQ já atende todas as suas necessidades. Tudo o que precisa ser feito é integrá-lo em sua construção, ler alguns doco e, em seguida, começar a usá-lo. Isso tem que ser muito menos esforço do que rolar seus próprios. Além disso, a carga de manutenção foi deslocado para outra empresa. Desde ZeroMQ é livre, é como se você acabou cresceu sua equipe de desenvolvimento para incluir (parte de) a equipe ZeroMQ.

Se você executou um negócio de desenvolvimento de software, então eu acho que você iria equilibrar o custo / risco do uso de bibliotecas de terceiros contra o seu próprio material circulante, e, neste caso, usando ZeroMQ ganharia as mãos para baixo.

Talvez você (ou melhor, o seu parceiro) sofrer, como tantos desenvolvedores fazer, a partir do "Não Inventado aqui "síndrome ? Se assim for, ajustar a sua atitude e reavaliar o uso de ZeroMQ. Pessoalmente, eu prefiro muito mais os benefícios da atitude Elsewhere Orgulhosamente encontrado. Eu estou esperando que eu possa orgulhar de encontrar ZeroMQ ... o tempo dirá.

EDIT: Me deparei com este vídeo dos desenvolvedores ZeroMQ que fala sobre por você deve usar ZeroMQ.

o que os torna melhor do que escrever sua própria biblioteca?

sistemas de enfileiramento de mensagens são transacionais, que é conceitualmente fácil de usar como um cliente, mas difícil de acertar como um implementador, especialmente considerando filas persistentes. Você pode pensar que você pode ir longe com escrevendo uma biblioteca de mensagens rápidas, mas sem transações e persistência, você não teria os benefícios de um sistema de mensagens.

Persistência neste meio contexto que o middleware de mensagens mantém mensagens não processadas em armazenamento permanente (no disco) no caso do servidor vai para baixo; após um reinício, as mensagens podem ser manuseados e não retransmitir é necessário (o remetente nem sequer saber que havia um problema). meios transacionais que você pode ler mensagens de diferentes filas e mensagens de escrita para diferentes filas de forma transacional, o que significa que quer todas as leituras e gravações de sucesso ou (se um ou mais falhar) nenhum êxito. Isto não é realmente muito diferente do transacionalidade conhecido a partir de interface com bases de dados e tem os mesmos benefícios (que simplifica o manuseio de erro; sem transações, você teria que assegurar que cada indivíduo de leitura / gravação bem-sucedida, e se uma ou mais falhar, você tem para reverter essas mudanças que teve sucesso).

Antes de escrever sua própria biblioteca, ler o Manual do 0MQ aqui: http://zguide.zeromq.org/ page: todos

As possibilidades são que você quer decidir instalar RabbitMQ, ou então você vai fazer a sua biblioteca em cima de ZeroMQ uma vez que eles já fizeram todas as partes duras.

Se você tem um pouco de tempo dar-lhe uma tentativa e implantação sua própria implementação! Os aprendizados deste exercício irá convencê-lo sobre a sabedoria de utilizar uma biblioteca já testado.

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