Como otimizar o processamento de eventos e registros de análise em larga escala

Last reviewed 2022-08-22 UTC

Neste artigo, descrevemos uma arquitetura para otimizar o processamento de análise em grande escala no Google Cloud. Para os fins deste artigo, "grande escala" significa mais de 100 mil eventos por segundo ou um tamanho de payload de evento agregado total de mais de 100 MB por segundo.

Os serviços gerenciados elásticos e escalonáveis do Google Cloud podem ser usados para coletar grandes quantidades de eventos de registro e análise recebidos e processá-los para entrada em um armazenamento de dados, como o BigQuery.

Qualquer arquitetura para processamento de quantidades significativas de dados de análise considera quais dados precisam ser acessados quase em tempo real e quais podem ser processados após um pequeno atraso, para separá-los corretamente. Uma abordagem segmentada traz estes benefícios:

  • Integridade dos registros. Você pode ver registros completos. Nenhum registro se perde devido a limites de cota de streaming ou amostragem.
  • Redução de custos. Inserções de streaming de eventos e registros são faturadas a uma taxa maior do que as inserções do Cloud Storage que usam jobs em lote.
  • Recursos de consulta reservados. Mover registros de prioridade inferior para carregamento em lote impede que eles causem impactos nos recursos de consulta reservados.

O diagrama de arquitetura a seguir mostra um sistema desse tipo e introduz os conceitos de hot paths e cold paths para processamento:

caminhos de processamento gerais

Visão geral da arquitetura

Nesta arquitetura, os dados surgem de duas possíveis origens:

  • Os registros são coletados usando o Cloud Logging.
  • Eventos de análise são publicados em um tópico do Pub/Sub.

Após o processamento de cada origem, os dados são colocados em hot path ou cold path, de acordo com os requisitos de latência da mensagem. O hot path usa entradas de streaming, que podem lidar com um fluxo de dados contínuo, enquanto o cold path é um processo de lote, que carrega os dados em uma programação determinada por você.

Eventos de geração de registros

O Cloud Logging pode ser usado para processar eventos de geração de registros criados por recursos padrão do sistema operacional. Por padrão, o Cloud Logging está disponível em vários ambientes do Compute Engine, incluindo imagens padrão, e também pode ser instalado em muitos sistemas operacionais usando o agente do Cloud Logging. O agente de geração de registros é o coletor de registros padrão do App Engine e do Google Kubernetes Engine.

Hot path

geração de registros em hot path

No hot path, registros essenciais necessários para monitoramento e análise dos serviços são escolhidos pela seleção de um filtro no coletor do Cloud Logging e transmitidos por streaming a várias tabelas do BigQuery. Use tabelas separadas para níveis de geração de registros de ERROr e WARN e divida ainda mais por serviço se grandes volumes forem esperados. Esta prática recomendada mantém o número de inserções por segundo por tabela abaixo do limite de 100 mil e mantém o bom desempenho das consultas para esses dados.

Cold path

geração de registros em cold path

Para cold path, os registros que não exigem análise quase em tempo real são selecionados usando um coletor do Cloud Logging voltado a um bucket do Cloud Storage. Os registros são organizados em lotes e gravados em arquivos de registro nos lotes do Cloud Storage de hora em hora. Esses registros podem ser carregados em lote no BigQuery usando o processo padrão de importação de arquivos do Cloud Storage, que pode ser iniciado usando o Console do Google Cloud, a interface de linha de comando (CLI) ou até mesmo um script simples. O carregamento em lotes não causa impactos no processamento de streaming de hot path nem no desempenho de consultas. Na maioria dos casos, provavelmente é melhor mesclar os registros de cold path nas mesmas tabelas usadas pelos registros de hot path para simplificar a solução de problemas e a geração de relatórios.

Eventos de análise

Os eventos de análise podem ser gerados pelos serviços do aplicativo no Google Cloud ou enviados de clientes remotos. O processamento desses eventos de análise por meio do Pub/Sub e, em seguida, por meio do Dataflow proporciona um sistema de alta capacidade com baixa latência. Embora seja possível enviar eventos de análise em hot e cold path para dois tópicos distintos do Pub/Sub, os eventos precisam ser enviados a um único tópico e processados usando jobs hot e cold paths do Dataflow separados. Assim, para atualizar jobs do Dataflow, é possível alterar o caminho que um evento de análise segue, que é mais fácil do que implantar uma nova versão de aplicativo ou cliente.

Hot path

eventos de hot path

Alguns eventos precisam de análises imediatas. Por exemplo, um evento pode indicar comportamento indesejado do cliente ou agentes com baixo desempenho. Selecione esses eventos a partir do Pub/Sub por meio de um job de dimensionamento automático do Dataflow e envie-os diretamente ao BigQuery. Esses dados podem ser particionados pelo job do Dataflow para garantir que o limite de 100 mil linhas por segundo por tabela não seja atingido. Dessa forma, as consultas apresentam bom desempenho.

Cold path

eventos de cold path

Eventos que precisam ser rastreados e analisados a cada hora ou diariamente, mas não imediatamente, podem ser enviados pelo Dataflow para objetos no Cloud Storage. Os carregamentos podem ser iniciados do Cloud Storage para o BigQuery usando o Console do Cloud, a Google Cloud CLI ou até mesmo um script simples. É possível mesclá-los com as mesmas tabelas usadas para eventos de hot path. Como no registro em cold path, os eventos de análise carregados em lote não causam impactos nos recursos de consulta reservados e mantêm o carregamento do caminho de processamento de streaming em um nível razoável.

Para mais informações sobre como carregar dados no BigQuery, consulte Introdução ao carregamento de dados.

A seguir