O que é o Pub/Sub?

O Pub/Sub permite que os serviços se comuniquem de forma assíncrona, com latências na ordem de 100 milissegundos.

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

O Pub/Sub permite criar sistemas de produtores e consumidores de eventos, chamados editores e assinantes. Os editores se comunicam com os assinantes de forma assíncrona transmitindo eventos, em vez de chamadas de procedimento remoto (RPCs, na sigla em inglês) síncronas.

Os editores enviam eventos para o serviço do Pub/Sub, sem considerar como ou quando esses eventos serão processados. Depois, o Pub/Sub entrega eventos a todos os serviços que precisam reagir a eles. Em comparação com os sistemas que se comunicam por meio de 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 o uso do Console do Cloud. Para uma introdução mais abrangente, consulte Como criar um sistema de mensagens do Pub/Sub.

Casos de uso comuns

  • Processamento da interação do usuário e de servidores para utilizar eventos de interação dos usuários finais em apps ou eventos do servidor do sistema, encaminhe-os ao Pub/Sub e use uma Ferramenta de processamento de stream (como o Dataflow) que os entrega 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: os eventos, brutos ou processados, podem ser disponibilizados para vários aplicativos da sua equipe e organização para processamento em tempo real. Esse recurso é compatível com um "barramento de eventos empresariais" e padrões de design de aplicativo orientados a eventos. O Pub/Sub permite a integração com muitos sistemas do Google que exportam eventos para o Pub/Sub.
  • Replicação de dados entre bancos de dados. O Pub/Sub é normalmente 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 de dados.
  • Processamento e fluxos de trabalho paralelos. É possível distribuir de maneira eficiente um grande número de tarefas entre vários workers, como compactação de arquivos de texto, envio de notificações por e-mail, avaliação de modelos de IA ou reformação de imagens por meio de mensagens do Pub/Sub para conexão. Cloud Functions
  • busnibus de evento empresarial. Você pode criar um barramento de compartilhamento de dados em tempo real em toda a empresa, distribuir eventos de negócios, atualizações de bancos de dados e eventos de análise em toda a organização.
  • Streaming de dados de dispositivos IoT. Por exemplo, um sensor residencial pode fazer streaming de 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 códigos de objetos que foram alterados.
  • Balanceamento de carga para confiabilidade. Por exemplo, instâncias de um serviço podem ser implantadas no Compute Engine em várias zonas, mas se inscreverem em um tópico comum. Quando o serviço falha em qualquer zona, os outros podem retirar a carga automaticamente.

Pub/Sub ou Pub/Sub Lite

O Pub/Sub consiste em dois serviços:

  • Serviço Pub/Sub: deve ser a escolha padrão para a maioria dos usuários e aplicativos. Ele oferece a maior confiabilidade e o maior conjunto de integrações, além do gerenciamento automático de capacidade.

  • Serviço do Pub/Sub Lite: um serviço de mensagens separado, semelhante, de baixo custo. Ele oferece armazenamento zonal e é necessário provisionar previamente e gerenciar a capacidade de armazenamento e capacidade.

Considere o Pub/Sub Lite apenas para aplicativos em que alcançar um custo extremamente baixo justifica algum trabalho operacional extra e menor disponibilidade.

Para mais detalhes, consulte Como escolher o Pub/Sub ou o Pub/Sub Lite. Para testar o Pub/Sub Lite, consulte Primeiros passos com o Pub/Sub Lite.

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 recursos encontrados em middlewares de mensagens tradicionais, como Apache ActiveMQ e RabbitMQ, como mensagens inativas filas e filtragem.

Outro recurso que o Pub/Sub adote a partir do middleware de mensagens é o paralelismo por mensagem, em vez de baseado em partição. O Pub/Sub "aloca" mensagens individuais aos clientes inscritos e acompanha se uma determinada mensagem foi processada com sucesso.

Por outro lado, outros sistemas de mensagens escalonáveis horizontalmente usam partições para escalonamento horizontal. Isso força os assinantes a processar mensagens em cada partição em ordem e limita o número de clientes simultâneos ao número de partições. O processamento por mensagem maximiza o paralelismo dos aplicativos de assinante e ajuda a garantir a independência do editor/assinante.

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

O Pub/Sub destina-se à comunicação de serviço a serviço em vez de comunicação com clientes finais ou de IoT. Outros padrões são melhores compatíveis com outros produtos:

É possível usar uma combinação desses serviços para criar padrões de banco de dados -> serviços -> cliente. Por exemplo, consulte o tutorial Como fazer streaming de mensagens do Pub/Sub por meio de WebSockets.

Integrações

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

  • Processamento de stream e integração de dados: compatível com o Dataflow, incluindo modelos e SQL do Dataflow, que permitem o processamento e }integração de dados no BigQuery e data lakes no Cloud Storage. Os modelos do Dataflow para mover dados do Pub/Sub para o 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. A composição visual de pipelines de integração e processamento executados no Spark + Dataproc pode ser realizada com Datafusion.
  • Monitoramento, alertas e geração de registros: compatível com produtos do Monitoring e Logging.
  • Autenticação e IAM: o Pub/Sub depende de uma autenticação OAuth padrão usada por outros produtos do Google Cloud e é compatível com o IAM granular, permitindo o controle de acesso a recursos individuais.
  • APIs: o Pub/Sub usa tecnologias padrão da API REST e do gRPC com bibliotecas de cliente para várias linguagens.
  • Gatilhos, notificações e webhooks: o Pub/Sub oferece entrega de mensagens por push como solicitações HTTP POST para webhooks. Isso permite implementar facilmente a automação do fluxo de trabalho usando o Cloud Functions ou outros produtos sem servidor.
  • Orquestração: o Pub/Sub pode ser integrado a fluxos de trabalho sem servidor e com várias etapas. Big Data e orquestração analítica geralmente feitas com o Cloud Composer (em inglês), compatível com gatilhos do Pub/Sub.

Principais conceitos

  • Tópico: um recurso nomeado para o qual as mensagens são enviadas pelos editores.
  • Assinatura: um recurso nomeado que representa o fluxo de mensagens de um tópico específico para ser entregue ao aplicativo assinante. Para mais detalhes sobre assinaturas e semântica de 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, por fim, é entregue aos assinantes.
  • Atributo de mensagem: um par de chave-valor que um editor pode definir para 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 um tópico.
  • Assinante: aplicativo com assinatura de um tópico para receber mensagens dele.
  • Confirmação (ou “ack”): um sinal enviado por um assinante ao Pub/Sub depois de receber uma mensagem. As mensagens visualizadas são removidas da fila de mensagens da assinatura.
  • Push e pull: os dois métodos de entrega de mensagem. Um assinante recebe mensagens pelo Pub/Sub enviando-as ao endpoint escolhido do assinante ou pelo assinante extraindo elas do serviço.

Os relacionamentos de editor-assinante podem ser de um para muitos (fan-out), de muitos para um (fan-in) e de muitos para muitos, conforme mostrado no diagrama a seguir:

Relacionamentos entre editor e assinante

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

Ciclo de vida das mensagens

Próximas etapas