O Sucesso da Uber com o Apache Pinot: Economias de Custo e Impulso de Desempenho

Para uma empresa como a Uber, os dados em tempo real são o sangue vital tanto de seus serviços voltados para o cliente quanto de seus serviços internos. Os clientes dependem dos dados em tempo real para obter viagens e pegar comida à vontade. Os times internos também dependem de dados atualizados para impulsionar a infraestrutura por trás de seus aplicativos voltados para o cliente, como para sua ferramenta interna que monitora a análise de falhas do aplicativo móvel.

A Uber migrou para o Apache Pinot para impulsionar essa ferramenta interna e experimentou melhorias significativas em comparação com seu antigo mecanismo de análise (Elasticsearch). Ao mudar para o Pinot, uma verdadeira plataforma de análise em tempo real, a Uber viu benefícios, incluindo:

  • Redução de 70% nos custos de infraestrutura (economia de mais de US$ 2 milhões por ano)
  • Redução de 80% nos núcleos de CPU
  • Redução de 66% no tamanho dos dados
  • Redução de 64% no tempo de carregamento de páginas (de 14 segundos para menos de 5 segundos)
  • Redução do atraso de ingestão para <10 milissegundos
  • Diminuição dos tempos limite de consulta e eliminação do problema de perda de dados

Assista Agora

O conteúdo deste blog é baseado em um encontro presencial que contou com histórias de usuários do Apache Pinot. Também referenciamos um blog da equipe de engenharia da Uber que aborda como eles usam o Pinot para fornecer análises em tempo real para falhas no aplicativo móvel. Assista ao encontro aqui:

Ou continue lendo para aprender como a Uber alcançou esses resultados com o Apache Pinot.

Como a Uber entrega análises em tempo real sobre falhas no aplicativo móvel

A Uber possui um pipeline de ingestão automatizado que rastreia quedas de aplicativos e coleta dados para investigação. Alguns desses dados são ingeridos no Apache Flink para transformações, que são então devolvidos a tópicos Kafka para consumo downstream. Esses eventos brutos e processados no Kafka são então consumidos pelo Apache Pinot, que executa consultas analíticas cujos resultados são entregues a usuários internos por meio do Grafana e ferramentas de visualização internas. Seu pipeline ingere dados em tempo real e offline (não representados) para criar uma visão completa dos usuários, conhecidos como tabelas híbridas no Apache Pinot.

Análise de Falhas em Aplicativos em Tempo Real com Apache Pinot

A Uber libera cerca de 11.000 mudanças novas de código e infraestrutura toda semana, e conta com uma ferramenta própria (Healthline) para ajudar a detectar e resolver problemas de quedas. O Healthline permite que a Uber melhore a medição e alcance do Mean Time To Detect (MTTD). Por exemplo, eles podem lançar um novo recurso que causa quedas inesperadas no aplicativo e precisam ser capazes de rapidamente identificar a origem das quedas ao investigar os dados de queda.

O dashboard abaixo mostra uma semana de dados de quedas para um aplicativo móvel e uma versão do sistema operacional. Neste exemplo, eventos de sessão ocorrem até centenas de milhares de vezes por segundo, e quedas medem entre 15.000 a 20.000 eventos por segundo. A Uber combina essas métricas para calcular a taxa de ausência de fatalidades, que indica a saúde do aplicativo (o objetivo é estar o mais próximo de 100% quanto possível).

Com o Elasticsearch, um mecanismo de busca genérico, picos nas taxas de falhas causariam atraso na ingestão e retardariam a resposta da equipe na identificação de problemas. Ao migrar para o Apache Pinot, projetado especificamente para análises em tempo real em grande escala, a equipe observou uma diminuição tanto no número quanto na gravidade dos atrasos na ingestão.

Análise Aprofundada de Dados de Acidentes

Além da visão de alto nível dos dados de acidentes, a Uber também fornece análises detalhadas no nível dos acidentes. Eles agregam métricas de acidentes em várias dimensões, como o número de acidentes por sistema operacional e por versão, e a distribuição de acidentes por versão. Este caso de uso aproveita vários índices do Pinot (de faixa, invertido e de texto) para indicar quando um tipo de acidente ocorreu, quais versões são afetadas, o número de ocorrências e o número de usuários e dispositivos afetados.

Para a análise detalhada, foi crucial que a Uber tivesse capacidades de pesquisa de texto para ler mensagens de erro de acidentes. O índice de texto do Pinot é construído em cima do Lucene e lhes dá a capacidade de pesquisar acidentes por mensagem de acidente, nome de classe, rastreamento de pilha e mais.

Medindo Sessões em Escala

A Uber também utiliza o Pinot para medir sessões únicas por dispositivo, versão, sistema operacional e hora em escala. O Pinot oferece processamentos em tempo real com alta capacidade de throughput capaz de ingerir 300.000 eventos analíticos por segundo da Uber. A equipe possui uma configuração híbrida que inclui uma tabela em tempo real com granularidade de 10 minutos e retenção de dados de 3 dias, bem como uma tabela offline com granularidade horária e diária e retenção de dados de 45 dias.

Aproveitando o HyperLogLog do Apache Pinot, a equipe conseguiu reduzir o número de eventos armazenados e realizar menos agregações únicas em eventos. O Pinot também ofereceu latências muito baixas — abaixo de 100 milissegundos para latência p99.5.

Economia de Custos de Infraestrutura

Segundo os cálculos da Uber, eles economizaram mais de US$ 2 milhões em custos anuais de infraestrutura ao migrar para o Pinot. Seu setup com Pinot resultou em uma redução de 70% nos custos de infraestrutura em comparação com o Elasticsearch. Eles também observaram uma redução de 80% nos núcleos de CPU e uma diminuição de 66% em sua pegada de dados.

Com o Elasticsearch, a Uber estava usando 22.000 núcleos de CPU. Com o Pinot, reduziram esse número em 80%. Aqui está um instantâneo de seu setup com o Pinot:

Melhoria no Desempenho das Consultas e Experiência do Usuário

Com o Apache Pinot, a Uber consegue oferecer uma melhor experiência do usuário com carregamento de páginas mais rápido e maior confiabilidade. A migração para o Pinot reduziu os tempos de carregamento de páginas em 64%, de 14 segundos para menos de 5 segundos. O Pinot também tem uma melhor tolerância a picos de carga, levando a uma recuperação mais rápida de atrasos. Mesmo que a equipe veja um atraso na ingestão, o Pinot consegue se recuperar rapidamente em alguns minutos.

Em comparação com o Elasticsearch, o Pinot também mostrou melhorias significativas em relação aos tempos limite das consultas e perda de dados. Se ocorresse um desastre em um aplicativo móvel enquanto usava o Elasticsearch, as consultas relacionadas a esse índice teriam tempo limite. A Uber resolveu esse problema com o Pinot controlando o tamanho do segmento. A equipe também não enfrenta problemas de perda de dados com o Pinot, em comparação com frequentes problemas de dados quando o Elasticsearch lidava com aumento na taxa de ingestão.

A Próxima Iteração do Setup do Pinot na Uber

Em seguida, o Uber planeja migrar para a indexação de texto nativo para seus dados de falha móvel. Os dados de falha móvel do Uber contêm uma grande quantidade de dados estruturados, o que torna viável para a equipe migrar todos os seus casos de uso para índices de texto nativos. Essa transição proporcionará economias de custos com armazenamento de dados e reduzirá o tempo gasto na consulta de dados.

O Uber Não É a Única Organização Acontecendo Sucesso Migratório de Elasticsearch para Pinot

A Uniqode (anteriormente Beaconstac) viu uma melhoria de 10 vezes na performance geral das consultas ao mudar de Elasticsearch para Pinot. A Cisco Webex também migrou suas análises em tempo real e observabilidade para o Pinot após enfrentar altas latências. A equipe da Webex descobriu que o Apache Pinot oferece latências 5 a 150 vezes menores do que o Elasticsearch.

Source:
https://dzone.com/articles/real-time-app-crash-analytics-with-apache-pinot