O que é o Pub/Sub?

O Pub/Sub permite que os serviços se comuniquem de maneira 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. Ela é igualmente eficaz como um 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 inscritos. 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 eventos para o serviço Pub/Sub, sem considerar como ou quando esses eventos serão processados. Em seguida, o Pub/Sub entrega eventos a todos os serviços que precisam reagir a eles. Em comparação com 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 geral.

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

Casos de uso comuns

  • Ingestão da interação do usuário e eventos do servidor. Para usar eventos de interação do usuário de apps do usuário final ou eventos do servidor do sistema, encaminhe-os para o 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. Eventos, brutos ou processados, podem ser disponibilizados para vários aplicativos em sua equipe e na organização para processamento em tempo real. Ele é compatível com padrões de design de aplicativo baseados em eventos e um barramento de eventos empresariais. O Pub/Sub permite que você faça 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 é comumente 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 estado no BigQuery e outros sistemas de armazenamento de dados.

  • Processamento e fluxos de trabalho paralelos. É possível distribuir com eficiência um grande número de tarefas entre vários workers, por exemplo, compactar arquivos de texto, enviar notificações por e-mail, avaliar modelos de IA ou reformar imagens. Para isso, use mensagens do Pub/Sub para se conectar ao Cloud Functions.

  • Barramento de eventos empresariais. Crie um barramento de compartilhamento de dados em tempo real para toda a empresa, distribuindo eventos de negócios, atualizações de banco de dados e eventos de análise em toda a organização.

  • Transmissão de dados de aplicativos, serviços ou dispositivos de IoT. Por exemplo, um aplicativo SaaS pode publicar um feed de eventos em tempo real ou um sensor residencial pode fazer streaming de dados para o Pub/Sub para uso em outros produtos do Google Cloud por meio de um Dataflow.

  • 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, as instâncias de um serviço podem ser implantadas no Compute Engine em várias zonas, mas se inscrever em um tópico comum. Quando o serviço falha em qualquer zona, as outras podem captar a carga automaticamente.

Tipos de serviços do Pub/Sub

O Pub/Sub consiste em dois serviços:

  • Serviço do Pub/Sub. Esse serviço de mensagens é a escolha padrão para a maioria dos usuários e aplicativos. Ele oferece o máximo de confiabilidade e o maior conjunto de integrações, além do gerenciamento automático de capacidade. O Pub/Sub garante a replicação síncrona de todos os dados em pelo menos duas zonas e a replicação de melhor esforço em uma terceira zona adicional.

  • Serviço do Pub/Sub Lite. Um serviço de mensagens separado, mas semelhante, criado para um custo menor. Ele oferece menor confiabilidade em comparação com o Pub/Sub. Ele oferece armazenamento de tópicos por zona ou região. Os tópicos zonais do Lite são armazenados em apenas uma zona. Os tópicos regionais do Lite replicam dados para uma segunda zona de forma assíncrona. Além disso, o Pub/Sub Lite exige que você pré-provisione e gerencie a capacidade de armazenamento e capacidade. Considere o Pub/Sub Lite apenas para aplicativos em que o alcance de um custo extremamente baixo justifica parte do trabalho operacional e diminui a confiabilidade.

Para mais detalhes sobre as diferenças entre o Pub/Sub e o Pub/Sub Lite, consulte Como escolher o Pub/Sub ou 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 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:

  • Processamento de stream e integração de dados. Compatível com o Dataflow, incluindo modelos do Dataflow e SQL, que permitem o processamento e a integração de dados no BigQuery e em 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. 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 produtos do Monitoring e do 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 para recursos individuais.
  • APIs. O Pub/Sub usa tecnologias de API gRPC e REST de serviço padrão com bibliotecas de cliente para várias linguagens.
  • Gatilhos, notificações e webhooks. O Pub/Sub oferece entrega de mensagens baseada em push como solicitações HTTP POST para webhooks. Isso permite implementar a automação do fluxo de trabalho com facilidade usando o Cloud Functions ou outros produtos sem servidor.
  • Organização. O Pub/Sub pode ser integrado a fluxos de trabalho sem servidor de 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 para o qual os editores enviam mensagens.
  • Assinatura. Um recurso nomeado que representa o fluxo de mensagens de um tópico específico a ser entregue ao 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 para um tópico e é exibido 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. Um aplicativo com uma assinatura de um tópico para receber mensagens dele.
  • Confirmação (ou "ack"). Um sinal enviado por um assinante ao Pub/Sub depois que ele recebe uma mensagem. As mensagens confirmadas são removidas da fila da assinatura.
  • Push and pull: Os dois métodos de entrega de mensagens. 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