Storm - Sistema de Mensagens Distribuídas
O Apache Storm processa dados em tempo real e a entrada normalmente vem de um sistema de enfileiramento de mensagens. Um sistema de mensagens distribuído externo fornecerá a entrada necessária para a computação em tempo real. O Spout lerá os dados do sistema de mensagens e os converterá em tuplas e entrará no Apache Storm. O fato interessante é que o Apache Storm usa seu próprio sistema de mensagens distribuído internamente para a comunicação entre seu nimbus e o supervisor.
O que é sistema de mensagens distribuídas?
O sistema de mensagens distribuído é baseado no conceito de enfileiramento de mensagens confiável. As mensagens são enfileiradas de forma assíncrona entre os aplicativos clientes e os sistemas de mensagens. Um sistema de mensagens distribuído oferece os benefícios de confiabilidade, escalabilidade e persistência.
A maioria dos padrões de mensagens segue o publish-subscribe modelo (simplesmente Pub-Sub) onde os remetentes das mensagens são chamados publishers e quem quiser receber as mensagens é chamado subscribers.
Depois de publicada a mensagem pelo remetente, os assinantes podem receber a mensagem selecionada com a ajuda de uma opção de filtragem. Normalmente, temos dois tipos de filtragem, um étopic-based filtering e outro é content-based filtering.
Observe que o modelo pub-sub pode se comunicar apenas por meio de mensagens. É uma arquitetura muito fracamente acoplada; mesmo os remetentes não sabem quem são seus assinantes. Muitos dos padrões de mensagem permitem que o intermediário de mensagem troque mensagens de publicação para acesso oportuno por muitos assinantes. Um exemplo da vida real é a Dish TV, que publica diferentes canais como esportes, filmes, música, etc., e qualquer pessoa pode assinar seu próprio conjunto de canais e obtê-los sempre que seus canais assinados estiverem disponíveis.
A tabela a seguir descreve alguns dos sistemas populares de mensagens de alta capacidade -
Sistema de mensagens distribuídas | Descrição |
---|---|
Apache Kafka | Kafka foi desenvolvido na empresa LinkedIn e mais tarde tornou-se um subprojeto da Apache. O Apache Kafka é baseado em um modelo de publicação-assinatura distribuído habilitado para broker, persistente. Kafka é rápido, escalonável e altamente eficiente. |
RabbitMQ | RabbitMQ é um aplicativo de mensagens robusto distribuído de código aberto. É fácil de usar e roda em todas as plataformas. |
JMS (Java Message Service) | JMS é uma API de código aberto que oferece suporte à criação, leitura e envio de mensagens de um aplicativo para outro. Ele fornece entrega de mensagem garantida e segue o modelo publicar-assinar. |
ActiveMQ | O sistema de mensagens ActiveMQ é uma API de código aberto do JMS. |
ZeroMQ | ZeroMQ é o processamento de mensagens peer-peer sem corretor. Ele fornece padrões de mensagem push-pull, roteador-revendedor. |
Francelho | Kestrel é uma fila de mensagens distribuída rápida, confiável e simples. |
Protocolo Thrift
O Thrift foi criado no Facebook para desenvolvimento de serviços em várias linguagens e chamada de procedimento remoto (RPC). Mais tarde, tornou-se um projeto Apache de código aberto. Apache Thrift é umInterface Definition Language e permite definir novos tipos de dados e implementação de serviços em cima dos tipos de dados definidos de uma maneira fácil.
Apache Thrift também é uma estrutura de comunicação que oferece suporte a sistemas embarcados, aplicativos móveis, aplicativos da web e muitas outras linguagens de programação. Alguns dos principais recursos associados ao Apache Thrift são sua modularidade, flexibilidade e alto desempenho. Além disso, ele pode executar streaming, mensagens e RPC em aplicativos distribuídos.
Storm usa extensivamente o Protocolo Thrift para sua comunicação interna e definição de dados. A topologia do Storm é simplesmenteThrift Structs. Storm Nimbus que executa a topologia no Apache Storm é umThrift service.