Neste exemplo hipotético, temos um fluxo de dados em várias equipes de engenharia em uma empresa de comércio eletrônico. Essas equipes fornecem serviços, produzem dados e consomem dados em diferentes pontos do fluxo.
Por exemplo:
- 'Pedidos de equipe' mantém o banco de dados e as interfaces de pedidos
- 'Tráfego de equipe' gera dados de tráfego da web
- 'Team Warehouse' mantém o data warehouse
- 'Tráfego da equipe' depende do serviço da 'Ordem da equipe' para recuperar dados de pedidos e associá-los ao tráfego da web
- 'Team Warehouse' depende dos dados do 'Team Traffic' para criar tabelas DW
Imagine que 'Pedidos de equipe' atinge um problema de banco de dados (carga, latência, qualquer coisa) - Seu sistema de monitoramento alerta um engenheiro que começa a investigar o problema do banco de dados.
Nesse meio tempo, o 'Team Traffic' também foi alertado, já que eles observam um aumento nas respostas ruins. Eles começam a investigar e percebem rapidamente que o problema é com o serviço de "Pedidos da equipe" e cobram um ingresso para "Pedido da equipe"
A jusante de tudo isso, 'Team Warehouse' está recebendo dados incorretos. O monitoramento de DW os alerta para essa variação, então eles começam a procurar por causa raiz.
O problema é que agora temos pelo menos três engenheiros investigando o mesmo problema, e eles podem até não estar cientes de que outras equipes estão fazendo a mesma coisa.
Um ponto importante é que todas as três equipes estão usando diferentes sistemas de monitoramento e alerta; O Team Orders está monitorando problemas do servidor db, enquanto o Team Warehouse está procurando por variações no número de registros.
Existem outras abordagens; alerta apenas no topo do pipeline (bloqueando escalonamentos downstream) ou alertando na parte inferior do pipeline para sistemas upstream.
Há alguma prática recomendada, white papers ou soluções de engenharia que eu possa pesquisar para entender as diferentes maneiras de alertar e escalar problemas de dados em várias equipes de suporte / eng?