Article about comparison solutions messaging in cluod
As nossas aplicações não vivem isoladas. Por isso necessitamos de interfaces de comunicação entre elas. E para realizar essa comunicação, nós temos alguns desafios:
- Redes não são confiáveis
- Redes são lentas
- Quais quer duas aplicação são diferentes
- Mudanças são inevitáveis
E para esses desafios, existem esses principais metodos de solução:
- File Transfer
- Shared Database
- RPC - The communication occurs real-time and synchronously
- Messaging - The communication is asynchronous
Mensageria é a tecnologia que habilita a comunicação high-speed, asynchronous, program-to-program com entrega confiável. (Enterprise Integration Patterns - Addison Wesley)
- Remote Communication (desacoplamento de aplicações)
- Platform/Language Integration
- Asynchronous Communication
- Variable Timing
- Throttling
- Reliable Communication
- Disconnected Operation
- Mediation
- Thread Management (no Deadlock)
-
Complex programming model
-
Synchronous scenarios
-
Performance
-
Limited platform support
-
Vendor lock-in (Protocols - JMS)
-
Sequence issues (order)
-
Idempotent action
-
Unique read
-
Unique write
- Filas
- Tópicos
- Streams (stream é uma sequência ordenada, reproduzível e tolerante a falhas de registros de dados imutáveis, em que um registro de dados é definido como um par de valores-chave)
- Exchanges
RabbitMQ é um software open source de mensageria. Fornece uma forma comunicação assíncrona de dados entre processos, aplicações ou servidores. É um dos brokers de mensagens mais utilizados e implementa o protocolo AMQP — Advanced Message Queueing Protocol.
- Ordem: Não garante ordem
- Contexto: Broker de uso geral
- Modo de consumo: Push
- Tempo de vida da mensagem: Até ser consumido e ter tido o acknowledgment
- Garantia de entrega: Não garante atomicidade em transações de uma unica fila
Criado pelo Linkedin e posteriormente doada para a Apache Foundation, o Apache Kafka é uma plataforma de streaming distribuída.
E uma plataforma de streaming distribuída consiste em:
- Publique e assine fluxos de registros, semelhantes a uma fila de mensagens ou sistema de mensagens corporativo;
- Armazene fluxos de registros de maneira durável e tolerante a falhas;
- Processe fluxos de registros conforme eles ocorrem;
Kafka é geralmente usado para duas grandes classes de aplicativos:
- Construção de pipelines de dados de streaming em tempo real que obtêm dados entre sistemas ou aplicativos de maneira confiável.
- Construção de aplicativos de streaming em tempo real que transformam ou reagem aos fluxos de dados.
- Ordem: Garante a ordem dentro da partição
- Contexto: Broker de alto volume de mensagens e plataforma de stream
- Modo de consumo: Pull
- Tempo de vida da mensagem: Policy de retenção
- Garantia de entrega: Não garante atomicidade
Amazon Simple Notification Service é um serviço de envio de mensagens de publicação/assinatura totalmente gerenciado, altamente disponível, seguro e durável que permite o desacoplamento de microsserviços, sistemas distribuídos e aplicativos sem servidor.
- Ordem: Não garante ordem
- Contexto: mecanismo fácil para incorporar um sistema de notificação robusto com aplicativos
- Modo de consumo: Push
- Tempo de vida da mensagem: TTL padrão de quatro semanas
- Garantia de entrega: Sim, desde que o endpoint inscrito esteja acessível.
Amazon Simple Queue Service (SQS) é um serviço de filas de mensagens gerenciado que permite o desacoplamento e a escalabilidade de microsserviços, sistemas distribuídos e aplicativos sem servidor.
- Ordem: Sim com parametro FIFO
- Contexto: Processamento distribuido
- Modo de consumo: Pull
- Tempo de vida da mensagem: configuravel 1 min - 14 dias, default 4 dias
- Garantia de entrega: Sim
Amazon Kinesis é a solução para coletar e processar grandes streamings de registros em tempo real. É o kafka da AWS com mais recursos.
- Kinesis Video Streams - Capture, processe e armazene streams de vídeo
- Kinesis Data Streams - Capture, processe e armazene fluxos de dados
- Kinesis Data Firehose - Carregue streams de dados em datastores da AWS
- Kinesis Data Analytics - Analise streams de dados com SQL ou Java
- Ordem: Sim
- Contexto: Alto Processamento distribuido onde parte da analise e processamento é realizado nele
- Modo de consumo: Pull
- Tempo de vida da mensagem: Configuravel
- Garantia de entrega: Sim
O Pub/Sub é um serviço de mensagens assíncronas que separa serviços que produzem eventos de serviços que processam eventos.
- Ordem: Não garante ordem
- Contexto: middleware orientado a mensagens ou ingestão e entrega de eventos para pipelines de análise de streaming.
- Modo de consumo: Push
- Tempo de vida da mensagem: Até ser consumida
- Garantia de entrega: Sim
O Dataflow é um serviço gerenciado para executar uma ampla variedade de padrões de processamento de dados. A documentação neste site mostra como implantar os pipelines de processamento de dados de streaming e em lote usando o Dataflow, incluindo instruções de uso dos recursos de serviço.
- Contexto: Pipeline de dados - Processamento de dados.
- Modo de consumo: Push - ele vai entregar o dado
- Tempo de vida da mensagem: Até ser consumida
- Garantia de entrega: Sim
- Kafka - Confluent.io
- RabbitMQ - cloudamqp
- Redis - redislabs
- Livros:
- Enterprise Integration Patterns - Designing, Building And Deploying Messaging Solutions - Addison Wesley
- Podcasts:
- Links:
- https://www.enterpriseintegrationpatterns.com/patterns/messaging/IntegrationStylesIntro.html
- https://kafka.apache.org/uses
- https://docs.confluent.io/current/kafka/introduction.html
- https://microservices.io/patterns/communication-style/messaging.html
- https://activemq.apache.org/how-does-a-queue-compare-to-a-topic
- https://medium.com/dev-cave/rabbit-mq-parte-i-c15e5f89d94
- https://github.com/spassos/kafka