Arquitetura Pub/Sub

Matheus Kielkowski
4 min readDec 2, 2023

A arquitetura Pub/Sub, que significa Publicação e Assinatura, mais conhecido também pelo termo em inglês “Publisher and Subscriber”, é um tipo de arquitetura para comunicação entre sistemas distribuídos.

Onde os remetentes (publishers) enviam eventos, ou também conhecido como “mensagens”, para notificacar alguma criação, atualização, deleção, seja o que for, sobre seu domínio, e estas notificações são encaminhas para os destinatários (subscribers), que optam por receber estes eventos e os utilizam para realizar operações dentro de seu domínio também.

O interessante desse modelo, é que a comunicação não é feita diretamente entre o Publisher e o Subscriber, pois caso mais entidades optam por receber estes eventos, ficaria inviável ao longo do tempo do publicador realizar esse gerenciamento de saber para quem deve enviar estes eventos, toda vez que algum domínio opta por receber ou deixa de querer receber.

Para isto então, é apresentado dentro da proposta da arquitetura, uma entidade central, que podemos chamar aqui de Tópico, para qual todos os Publishers enviaram os eventos, e os Subscribers se inscreveram neste Tópico, para dizer que querem receber os eventos de determinada entidade.

O Publisher, tem o papel de enviar eventos para o sistema. Ele envia mensagens para um ou mais Tópicos, sem precisar conhecer os detalhes dos Subscribers. Isso possibilita um isolamento dos domínios, e faz com que não precisem se adaptar à partir de regras de negócio de outros domínios.

O Subscriber por sua vez, é a entidade que se registra no Tópico para dizer que quer receber os eventos de determinado Publisher. E com isto, os subscribers também não precisam se moldar à partir do domínio publicador. Eles apenas indicam seu interesse em receber os eventos dele.

O Tópico é a entidade de comunicação central, que irá fazer este papel de receber as mensagens disparadas pelos publicadores e enviar estas mesmas para seus assinantes. Trazendo para um exemplo mais concreto, podemos imaginar que ele é um carteiro de jornais, onde as pessoas (assinantes) dizem que querem receber notícias desses jornais, e o carteiro as entrega quando o jornal (publicador) as envia.

Hoje em dia, com o crescimento da arquitetura de Microserviços, esse tema voltou a ser muito comentado. E com isto surgiram diversos sistemas especializados, que oferecem este tipo de operação, os famosos Serviços de Mensageria, ou também Message Brokers.

Um Serviço de Mensageria, é o componente central dentro de uma arquitetura de microserviços, que gerencia a distribuição de mensagens entre os serviços publicadores e os assinantes, como o Tópico.

Mas ele executa um papel mais robusto, pois não apenas encaminha as mensagens, mas realiza todo um papel de gestão sobre estas mensagens. Como por exemplo, manter um ou mais tópicos disponíveis para uso, rastreia os assinantes interessados em cada tópico, armazena os dados dessas mensagens, possui políticas de rententativa de envio em caso de falha ao assinante tentar receber a mensagem, entre uma série de outras políticas para garantir a consistência de comunicação entre os sistemas.

E esta persistência e consistência na comunicação dos serviços é muito importante, pois caso estes assinantes não recebem os eventos que solicitaram, pode-se gerar uma série outros problemas por conta na falha de comunicação.

Por exemplo, dentro de um sistema de e-commerce, muitas vezes o pagamento do pedido não é feito instantaneamente na hora da compra, leva-se um determinado tempo até a operadora do cartão informar ao e-commerce que o dinheiro do pagamento foi transferido com sucesso.
E caso haja alguma falha nesta comunicação, o consumidor pode-ser lesado acidentalmente, e acabar pagando duas vezes, ou se não o e-commerce encaminha o produto para o cliente mas não recebe o pagamento, etc.

Resultado

A arquitetura Pub/Sub oferece várias vantagens, incluindo a desacoplagem entre os componentes do sistema, o que facilita a escalabilidade e a manutenção. Além disso, ela suporta a comunicação assíncrona, permitindo que os sistemas se comuniquem de maneira eficiente e resiliente.

Essa abordagem é comumente usada em sistemas distribuídos, microsserviços, e ambientes em nuvem para lidar com comunicação entre diferentes partes do sistema de forma eficiente e escalável. Exemplos de serviços de mensageria que implementam o modelo Pub/Sub incluem o Google Cloud Pub/Sub, Apache Kafka, RabbitMQ, entre outros.

Vale salientar, que esta arquitetura não é exclusiva de microserviços, ela pode ser muito bem implementada em uma aplicação monolítica, bastando apenas a implementação do modelo de forma interna, para comunicação entre os domínios e subdomnínios da aplicação.

--

--

Matheus Kielkowski
Matheus Kielkowski

Written by Matheus Kielkowski

Software Enginner in love with web technologies 👨‍💻

Responses (1)