Pular para o conteúdo

Arquitetura real · Staff

Uber: indexação geoespacial

Grades hexagonais para casar motoristas e passageiros, e o custo de atualizar posição a cada segundo.

16 min de leitura · Fonte: Uber · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Grades hexagonais para casar motoristas e passageiros, e o custo de atualizar posição a cada segundo. Um marketplace de corridas precisa responder perguntas sobre regiões, não sobre pontos isolados: quanta demanda e quanta oferta existem aqui? Para isso, latitude e longitude brutas não bastam; é preciso uma forma de transformar o mapa em células com identificador, que possam ser contadas…

01 · CONTEXTO

O problema: analisar o mapa em células

Um marketplace de corridas precisa responder perguntas sobre regiões, não sobre pontos isolados: quanta demanda e quanta oferta existem aqui? Para isso, latitude e longitude brutas não bastam; é preciso uma forma de transformar o mapa em células com identificador, que possam ser contadas, comparadas e agrupadas. Em entrevista, comece por levantar requisitos: qual a precisão necessária, que tipo de vizinhança importa e se a região precisa ser vista em escalas diferentes (bairro, cidade).

A resposta da Uber foi criar o H3. A motivação declarada no blog de engenharia é combinar os benefícios de uma grade global hexagonal com um sistema de indexação hierárquico. Ou seja, o H3 é uma grade de hexágonos com hierarquia de resoluções, e não um índice baseado em quadrados. A Uber usa o H3 como o sistema de grade para análise e otimização em seus marketplaces.

02 · POR QUE HEXÁGONOS

A forma da célula muda a análise

Segundo a Uber, usar o hexágono como forma da célula é crítico para o H3. A razão central é a vizinhança: no hexágono existe uma única distância entre o centro da célula e o centro de cada vizinha, enquanto no quadrado há duas distâncias e no triângulo, três. Em grades quadradas, a análise exige conjuntos distintos de coeficientes, porque vizinhas laterais e diagonais não são equivalentes.

Na prática, essa uniformidade simplifica operações como suavizar valores entre células vizinhas ou analisar gradientes: o resultado não depende de a vizinha estar de lado ou na diagonal. É isso que faz sentido para estimar, por exemplo, como a demanda se espalha de uma região para a seguinte.

Forma da célulaDistâncias até as vizinhasEfeito na análise
TriânguloTrês distâncias diferentesVizinhança heterogênea
QuadradoDuas distâncias diferentesExige conjuntos distintos de coeficientes
Hexágono (H3)Uma única distânciaSimplifica análise e suavização de gradientes

03 · HIERARQUIA

Resoluções e a aproximação entre pai e filho

O H3 oferece dezesseis resoluções. A cada resolução mais fina, as células têm um sétimo da área das células da resolução anterior, mais grossa. Assim, o mesmo ponto pode ser descrito de forma grosseira (cidade) ou detalhada (quarteirão), apenas trocando a resolução.

Há uma ressalva importante: as células mais finas estão apenas aproximadamente contidas na célula pai, porque hexágonos não se subdividem exatamente em hexágonos menores. Em contrapartida, o identificador de uma célula filha pode ser truncado para encontrar a célula ancestral em resolução mais grossa, o que torna barato subir na hierarquia. Ao projetar, trate o agrupamento por pai como aproximação e não como partição exata.

  1. O cliente envia a posição de um ponto no mapa; o sistema precisa agrupá-lo em uma célula antes de qualquer análise regional.

    Diagrama da arquitetura: Da posição bruta à célula e ao agregado por célula pai
    CLApp do passageiro ou motoristaposição bruta
    NWAPI gateway
    CPServiço de indexação hexagonal
    CHCache de agregados por célula
  2. O serviço de indexação converte a posição em um identificador de célula hexagonal na resolução pedida.

    Diagrama da arquitetura: Da posição bruta à célula e ao agregado por célula pai
    CLApp do passageiro ou motorista
    NWAPI gateway
    CPServiço de indexação hexagonalidentificador de célula
    CHCache de agregados por célula
  3. O identificador truncado dá a célula ancestral em resolução mais grossa; o agregado dessa célula é lido do cache, sabendo que o agrupamento por pai é apenas aproximado.

    Diagrama da arquitetura: Da posição bruta à célula e ao agregado por célula pai
    CLApp do passageiro ou motorista
    NWAPI gateway
    CPServiço de indexação hexagonal
    CHCache de agregados por célulaagregado por pai

04 · NO MARKETPLACE

Preço dinâmico por célula

A própria Uber descreve o uso mais conhecido: o preço dinâmico é calculado medindo oferta e demanda em hexágonos de cada cidade atendida. O H3 permite analisar informação geográfica para definir preços dinâmicos e tomar outras decisões em escala de cidade.

Como arquitetura, o padrão é: eventos de posição de passageiros e motoristas chegam por uma fila de mensagens, são agregados por célula e alimentam um serviço de preço lido a cada solicitação. Como a chave natural é a célula, os contadores se distribuem bem entre nós, e o desenho conversa com análise em tempo real e com a escolha de uma boa chave de particionamento. Este desenho é uma interpretação didática; o blog da Uber não detalha a infraestrutura.

  1. Passageiros e motoristas enviam posições e pedidos pela borda do sistema.

    Diagrama da arquitetura: Oferta e demanda por célula alimentando o preço dinâmico
    CLPassageiros e motoristas
    NWAPI gateway
    QFila de eventos de localização
    CPAgregador por célula
    CHArmazenamento de oferta e demanda por célula
    CPServiço de preço dinâmico
  2. Os eventos de posição entram numa fila, desacoplando a ingestão da agregação.

    Diagrama da arquitetura: Oferta e demanda por célula alimentando o preço dinâmico
    CLPassageiros e motoristas
    NWAPI gateway
    QFila de eventos de localizaçãoeventos
    CPAgregador por célula
    CHArmazenamento de oferta e demanda por célula
    CPServiço de preço dinâmico
  3. Um consumidor converte cada posição em célula hexagonal e atualiza oferta e demanda daquela célula no armazenamento rápido.

    Diagrama da arquitetura: Oferta e demanda por célula alimentando o preço dinâmico
    CLPassageiros e motoristas
    NWAPI gateway
    QFila de eventos de localização
    CPAgregador por célulaagrega por célula
    CHArmazenamento de oferta e demanda por célula
    CPServiço de preço dinâmico
  4. O serviço de preço lê a relação entre oferta e demanda da célula para definir o preço dinâmico naquela região.

    Diagrama da arquitetura: Oferta e demanda por célula alimentando o preço dinâmico
    CLPassageiros e motoristas
    NWAPI gateway
    QFila de eventos de localização
    CPAgregador por célula
    CHArmazenamento de oferta e demanda por célula
    CPServiço de preço dinâmicopreço por célula
  5. Se o armazenamento de agregados cai, o preço da região fica sem dado atual e é preciso decidir entre usar o último valor conhecido ou um valor padrão.

    Diagrama da arquitetura: Oferta e demanda por célula alimentando o preço dinâmico
    CLPassageiros e motoristas
    NWAPI gateway
    QFila de eventos de localização
    CPAgregador por célula
    CHArmazenamento de oferta e demanda por célulafora do ar
    CPServiço de preço dinâmicoafetado

Perguntas frequentes

O que é Uber: indexação geoespacial?

Grades hexagonais para casar motoristas e passageiros, e o custo de atualizar posição a cada segundo.

O que o design de Uber: indexação geoespacial cobre?

Ele está organizado nestas seções: O problema: analisar o mapa em células, A forma da célula muda a análise, Resoluções e a aproximação entre pai e filho e Preço dinâmico por célula.

Quanto tempo leva Uber: indexação geoespacial e qual é o nível?

Leva cerca de 16 minutos para ler e tem nível Staff.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.