O que é o Pub/Sub?

Pub/Sub, que significa Publisher/Subscriber (Editor/Assinante), permite que os serviços se comuniquem de forma assíncrona, com latências na ordem de 100 milissegundos.

O Pub/Sub é usado na análise de streaming e em pipelines de integração para processar e distribuir dados. Ele é tão eficaz quanto o middleware orientado a mensagens para integrar serviços ou como uma fila para carregar tarefas em paralelo.

Com o Pub/Sub, é possível criar sistemas de produtores e consumidores de eventos, chamados de editores e assinantes. Os editores se comunicam com os assinantes de forma assíncrona transmitindo eventos, em vez de realizar chamadas de procedimento remoto (RPCs) síncronas.

Os editores enviam os eventos ao serviço do Pub/Sub, sem considerar como ou quando eles serão processados. Depois, o Pub/Sub entrega os eventos a todos os serviços que precisam responder a eles. Em comparação com os sistemas que se comunicam por RPCs, em que os editores precisam esperar que os assinantes recebam os dados, essa integração assíncrona aumenta a flexibilidade e a robustez do sistema em geral.

Para começar a usar o Pub/Sub, confira o Guia de início rápido sobre como usar o Console do Cloud. Para ver uma introdução mais completa, consulte Como criar um sistema de mensagens do Pub/Sub.

Casos de uso comuns

  • Eventos do servidor e interação do usuário de processamento. Para utilizar os eventos de interação dos apps de usuário final ou os de servidor do seu sistema, encaminhe-os ao Pub/Sub e use uma ferramenta de processamento de stream como o Dataflow. Esse tipo de ferramenta entrega os eventos ao BigQuery, Bigtable, Cloud Storage e outros bancos de dados. O Pub/Sub permite coletar eventos de muitos clientes simultaneamente.
  • Distribuição de eventos em tempo real. É possível disponibilizar eventos brutos ou processados a vários aplicativos na sua equipe e organização para realizar o processamento em tempo real. Esse recurso é compatível com um "barramento de eventos empresariais" e padrões de design de aplicativos orientados a eventos. O Pub/Sub possibilita a integração com muitos sistemas do Google que exportam eventos para ele.
  • Replicação de dados entre bancos de dados. O Pub/Sub é muito usado para distribuir eventos de alteração de bancos de dados. Esses eventos podem ser usados para criar uma visualização do estado do banco de dados e do histórico de estados no BigQuery e em outros sistemas de armazenamento.
  • Processamento e fluxos de trabalho paralelos. É possível distribuir um grande número de tarefas entre vários workers por meio de mensagens do Pub/Sub que se conectam ao Cloud Functions. Essas tarefas incluem a compactação de arquivos de texto, o envio de notificações por e-mail, a avaliação de modelos de IA e a reformatação de imagens.
  • Barramento de eventos empresariais. Crie um barramento de compartilhamento de dados em tempo real para toda a empresa. Com ele, você distribui eventos empresariais e de análise e atualizações de bancos de dados por toda a organização.
  • Streaming de dados de dispositivos IoT. Por exemplo, um sensor residencial pode transmitir dados para servidores de back-end hospedados na nuvem.
  • Atualizar caches distribuídos. Por exemplo, um aplicativo pode publicar eventos de invalidação para atualizar os IDs dos objetos que foram alterados.
  • Balanceamento de carga para aumentar a confiabilidade. Por exemplo, é possível implantar as instâncias de um serviço no Compute Engine em várias zonas, mas assinar um tópico em comum. Quando o serviço falha em uma zona, as outras assumem a carga automaticamente.

Pub/Sub ou Pub/Sub Lite

O Pub/Sub consiste em dois serviços:

  • Pub/Sub: opção padrão para a maioria dos usuários e aplicativos. Oferece a mais alta confiabilidade e o maior conjunto de integrações, além do gerenciamento automático de capacidade.

  • Pub/Sub Lite: um serviço de mensagens separado, mas com recursos similares e a um baixo custo. Oferece armazenamento zonal e exige que você pré-provisione e gerencie a capacidade de processamento e armazenamento.

Escolha o Pub/Sub Lite apenas para aplicativos em que os custos muito baixos justificam o trabalho operacional extra e a menor disponibilidade.

Para ver mais informações, consulte Como escolher o Pub/Sub ou o Pub/Sub Lite. Para testar o Pub/Sub Lite, consulte o Guia de início rápido do serviço.

Comparação entre o Pub/Sub e outras tecnologias de mensagens

O Pub/Sub combina a escalonabilidade horizontal do Apache Kafka e do Pulsar com os recursos de middlewares de mensagens tradicionais, como o Apache ActiveMQ e RabbitMQ. Por exemplo, a filtragem e enfileiramento de mensagens inativas.

Outro recurso de middleware de mensagens incluído no Pub/Sub é o paralelismo por mensagem (em vez do baseado em partição). O Pub/Sub "concede" mensagens individuais aos clientes do assinante e acompanha se alguma delas foi processada com sucesso.

Em comparação, outros sistemas de mensagens usam partições na escalonabilidade horizontal. Isso obriga os assinantes a processar mensagens em cada partição na ordem e limita o número de clientes simultâneos à quantidade de partições. O processamento por mensagem maximiza o paralelismo dos aplicativos do assinante e garante a independência do editor/assinante.

Comunicação entre serviços x serviço e cliente

O Pub/Sub é voltado para a comunicação entre serviços, e não para a comunicação com clientes de IoT ou usuários finais. Outros produtos oferecem um suporte melhor aos demais padrões:

É possível combinar esses serviços para criar padrões "cliente -> serviços -> banco de dados". Por exemplo, consulte o tutorial Como fazer streaming de mensagens do Pub/Sub para WebSockets.

Integrações

O Pub/Sub oferece muitas integrações com outros produtos do Google Cloud para você criar um sistema de mensagens completo:

  • Integração de dados e processamento de stream: compatível com o Dataflow, incluindo os modelos dessa ferramenta e o SQL. Eles permitem o processamento e a integração de dados no BigQuery e data lakes no Cloud Storage. Os modelos do Dataflow para mover dados do Pub/Sub ao Cloud Storage, BigQuery e outros produtos estão disponíveis nas IUs do Pub/Sub e do Dataflow no Console do Cloud. A integração com o Apache Spark, principalmente quando gerenciada com o Dataproc, também está disponível. Com o Datafusion, você visualiza os pipelines de integração e processamento executados no Spark e Dataproc.
  • Monitoramento, alertas e geração de registros: compatível com os produtos Monitoring e Logging.
  • Autenticação e IAM: o Pub/Sub inclui a autenticação OAuth padrão usada pelos outros produtos do Google Cloud e é compatível com o IAM granular, o que possibilita o controle de acesso de recursos individuais.
  • APIs: o Pub/Sub usa tecnologias padrão da API REST e gRPC com bibliotecas de cliente em várias linguagens.
  • Gatilhos, notificações e webhooks: o Pub/Sub entrega mensagens por push como solicitações POST HTTP feitas para webhooks. Isso permite implementar a automação do fluxo de trabalho com facilidade usando o Cloud Functions ou outros produtos sem servidor.
  • Orquestração: o Pub/Sub pode ser integrado de maneira declarativa a fluxos de trabalho sem servidor com várias etapas. A orquestração analítica e de big data geralmente são feitas com o Cloud Composer, que é compatível com os gatilhos do Pub/Sub.

Principais conceitos

  • Tópico: um recurso nomeado que recebe as mensagens enviadas pelos editores.
  • Assinatura: um recurso nomeado que representa o fluxo de mensagens de um tópico específico a ser entregue para o aplicativo assinante. Para ver mais detalhes sobre assinaturas e a semântica da entrega de mensagens, consulte o Guia do assinante.
  • Mensagem: a combinação de dados e atributos (opcionais) que um editor envia a um tópico e que é entregue aos assinantes.
  • Atributo de mensagem: um par de chave-valor que um editor pode definir em uma mensagem. Por exemplo, a chave iana.org/language_tag e o valor en podem ser adicionados às mensagens para marcá-las como legíveis por um assinante que fala inglês.
  • Editor: um aplicativo que cria e envia mensagens para os tópicos.
  • Assinante: um aplicativo com assinatura em um tópico para receber as mensagens dele.
  • Confirmação: um sinal enviado por um assinante ao Pub/Sub depois de receber uma mensagem. As mensagens confirmadas são removidas da fila da assinatura.
  • Push e pull: os dois métodos de entrega de mensagem. O assinante recebe as mensagens por meio de um push do Pub/Sub para o endpoint escolhido ou de um pull realizado no serviço.

A relação entre editor e assinante pode ser de um para muitos (fan-out), de muitos para um (fan-in) e de muitos para muitos. É o que mostra o diagrama a seguir:

Relacionamentos entre editor e assinante

O diagrama a seguir mostra como uma mensagem é transmitida de um editor a um assinante. Na entrega por push, a confirmação é implícita na resposta à solicitação, enquanto a entrega por pull requer uma RPC separada.

Ciclo de vida das mensagens

Próximas etapas