Arquitetura de software e pilha de tecnologia da Uber – Como a Uber foi construída?
Publicados: 2022-01-17Uber se tornou um nome familiar. A incrível plataforma permite que os usuários reservem serviço de táxi em apenas quatro etapas simples. O aplicativo Uber garante serviço rápido e conveniência ideal, não é de admirar que tenha explodido em popularidade.
Você sabia que o Uber tem 98 milhões de usuários ativos mensais? Além disso, a empresa gerou US$ 11,1 bilhões em receita em 2020? A Uber estabeleceu um exemplo clássico para startups e serviços de táxi existentes. Toda organização tem como objetivo replicar o sucesso do Uber, oferecendo serviços de táxi rápidos e convenientes.
Se você também está impressionado com o imenso sucesso do Uber, este artigo é para você. Aqui, discutiremos a pilha de tecnologia da Uber e a arquitetura de software, e isso lhe dará uma melhor compreensão da plataforma e ajudará você a criar seu aplicativo de serviços de táxi do zero. Então vamos começar.
Como faço para criar um aplicativo em tempo real como o Uber?
Para construir um aplicativo em tempo real como o Uber, você deve primeiro entender os diferentes componentes dele, que são os seguintes:
Aplicativo de passageiros
Se você já usou o aplicativo Uber antes, você se identificará facilmente com a funcionalidade do aplicativo para passageiros. Este componente do aplicativo possui todos os recursos que os usuários precisam para reservar um táxi, como escolha da corrida, calculadora de tarifas, pagamentos online, rastreamento por GPS, etc.
Aplicativo de motorista
O aplicativo do motorista é usado por taxistas que mostram novas solicitações de táxi dos passageiros. Usando este painel, os motoristas podem aceitar ou recusar solicitações de carona e verificar a localização exata do passageiro usando o mapa integrado.
O mercado
O marketplace conecta os dois aplicativos – aplicativo de passageiro e aplicativo de motorista. Ele realiza as tarefas mais complicadas que envolvem a correspondência dos passageiros com os motoristas e o manuseio de pagamentos.
Portanto, se você deseja criar um aplicativo como o Uber, precisará de três painéis diferentes. O primeiro painel permitirá que os passageiros reservem um táxi e o segundo painel permitirá que os motoristas aceitem solicitações de carona. E, por fim, um terceiro painel receberá as solicitações dos dois primeiros e gerenciará todas as operações online.
Como construir o próximo Uber?
O Uber é um serviço de táxi de grande sucesso que oferece a máxima conveniência aos passageiros. Desenvolver um aplicativo como o Uber pode envolver uma quantia significativa de dinheiro e uma equipe de desenvolvimento de aplicativos competente.
Além disso, há algumas outras coisas a serem consideradas ao desenvolver um aplicativo como o Uber.
Confira seus concorrentes.
É uma ótima ideia pesquisar aplicativos que estão tentando resolver o mesmo problema que você procura resolver com seu aplicativo. Observar esses aplicativos ajudará você a ter uma ideia sobre seus recursos, funcionalidades e público-alvo.
Além disso, uma análise completa do cenário competitivo ajudará você a entender como seus concorrentes operam. Por exemplo, verificar suas mídias sociais permitirá que você obtenha informações sobre sua estratégia de marketing, evolução do produto e índices de satisfação do cliente. Tudo isso ajudará você a lançar um aplicativo de sucesso.
Conheça seus usuários em potencial
Antes de entrar no desenvolvimento de aplicativos, você precisa saber quem usará seu aplicativo. Somente se você conhecer seu público-alvo será capaz de se comunicar adequadamente com eles.
Você pode coletar todos os dados demográficos de seus usuários em potencial, como idade, localização, sexo, comportamentos, preferências etc. Uma vez feito, você pode discutir a ideia do seu aplicativo com as pessoas que você considera altamente.
Mantenha o foco na experiência do usuário.
A experiência do usuário é um dos principais aspectos de um aplicativo de sucesso. As pessoas querem usar aplicativos que ofereçam uma interface de usuário e UX simples e intuitiva. Uma interface de usuário impressionante oferece uma experiência de navegação perfeita e uma UX intuitiva garante facilidade de uso.
Fornecer uma boa experiência de usuário leva a uma melhor aquisição de usuários e maiores downloads.
Teste com um MVP
Um produto mínimo viável (MVP) é a primeira versão básica do produto que suporta recursos mínimos, mas cruciais. A criação de um MVP antes de desenvolver um aplicativo completo é aconselhável, pois permite um tempo de lançamento mais rápido, atrai adotantes iniciais e realiza um ajuste de produto ao mercado desde o início.
Uma vez que o MVP é liberado para os usuários, seu feedback inicial é obtido. Com base nesse feedback, você pode reiterar, corrigir bugs e introduzir novos recursos que darão ao seu produto uma vantagem competitiva.
Como o aplicativo Uber funciona tecnicamente?

O aplicativo Uber processa uma grande quantidade de dados, aproveitando as plataformas de ML e análise de dados desenvolvidas internamente. Quando um passageiro solicita um táxi, muitos dados são gerados. Por exemplo, o aplicativo recebe dados sobre o passageiro, sua localização, informações do cartão de crédito, custo da corrida, taxistas próximos etc. E, aos poucos, todas essas informações percorrem todo o sistema. Vamos ver como.
Uma vez que uma corrida é solicitada, a plataforma:
- Salva todas as informações do passeio no banco de dados
- Processa a solicitação de carona com a geolocalização do passageiro
- Envia todos os dados processados para o algoritmo de correspondência desenvolvido por ML
- Procura informações sobre motoristas presentes nas proximidades no banco de dados

Requisitos para projetos semelhantes ao Uber
O Uber foi lançado em 2009 e, por muito tempo, a plataforma teve um back-end com arquitetura monolítica. Em outras palavras, o aplicativo usava um único banco de dados junto com vários servidores de aplicativos para gerenciar todas as solicitações online.
Para o período inicial, isso funcionou muito bem. No entanto, à medida que a plataforma cresceu, a necessidade de novos recursos também aumentou. E para integrar novos recursos, a equipe de desenvolvimento teve que implantar todo o código de uma só vez. Isso afetou a velocidade do aplicativo e tornou o processo de introdução de novos recursos extremamente arriscado e demorado. Isso ocorre porque cada integração pode potencialmente derrubar todo o sistema. Isso levou à adoção da arquitetura de microsserviços.
Microsserviços

Em 2014, a Uber adotou a arquitetura de microsserviços para garantir melhor velocidade e desempenho. Essencialmente, essa arquitetura inclui um grupo de serviços direcionados à funcionalidade uns dos outros. Assim, a equipe de desenvolvimento pode facilmente implantar novos códigos de forma independente com a arquitetura de microsserviços, garantindo o dimensionamento completo do sistema.
DOMA (Arquitetura de Sistema Orientada ao Domínio)
Embora a arquitetura de microsserviços tenha sido uma grande atualização para a arquitetura monolítica, a equipe de desenvolvimento da Uber não parou por aí. Eles adotaram uma nova abordagem chamada DOMA- Domain-Oriented System Architecture com o tempo.
De acordo com essa abordagem, os desenvolvedores orientam seu design em torno de coleções de microsserviços relacionados. E essas coleções são chamadas de domínios. Além disso, os domínios também são classificados em diferentes coleções chamadas camadas. A camada específica à qual cada domínio pertence estabelece quais dependências os microsserviços nesse domínio podem assumir. Isso é chamado de projeto de camada.
Os desenvolvedores então tornam cada domínio independente dos outros usando a API Gateway. Assim, cada domínio tem sua própria lógica e não está relacionado aos demais domínios dentro da mesma camada.

Em palavras simples, ao fornecer uma arquitetura organizada, pontos de extensão predefinidos e gateways de domínio, o DOMA transforma a arquitetura de microsserviços de algo complicado para algo facilmente compreensível.

Qual estrutura de interface do usuário o Uber usa?
A equipe de design da Uber se concentra em atualizar constantemente o design do aplicativo, adicionando novos recursos. No entanto, este é um processo demorado. Então, para agilizar os esforços da equipe de design, eles criaram um framework React UI chamado Base.

O Base inclui elementos de aplicativos Uber pré-projetados, como cores, grades, tipografia, listas, botões e iconografia. A estrutura permitiu que a equipe de design criasse designs em um ritmo mais rápido, mantendo altos padrões e consistência de UI/UX.
Qual é a pilha de tecnologia por trás do aplicativo de entrega de alimentos Uber?
Em 2014, o back-end da Uber incluía linguagens como Python, Mongo e MySQL. Por outro lado, o sistema de despacho usava Node.js e Redis, enquanto os aplicativos móveis eram alimentados por Java e Objective-C. No entanto, à medida que os requisitos evoluíram, os desenvolvedores mudaram quase todos os componentes da plataforma.
Pilha de tecnologias de mercado
O marketplace da Uber é um aspecto importante que gerencia todo o fluxo de dados e análise de dados. E a pilha de tecnologia usada para construir esse mercado inclui linguagens como Python, Go, Java e Node. Agora vamos dar uma olhada nesta pilha de tecnologias de mercado em detalhes:
O motor de execução de viagem
Como o mecanismo de execução de viagem é parte integrante do mercado, ele foi originalmente escrito em Node.js, que era preferido por seu processamento assíncrono, simples e de thread único. O Node.js também permitiu que a equipe do Uber gerenciasse grandes quantidades de conexões simultâneas. No entanto, agora, a empresa cria novos serviços em Go, que é conhecido por sua eficiência, simultaneidade e operações seguras.
A API de linha de frente
A API de linha de frente direciona as solicitações dos dispositivos móveis do motorista e do passageiro para outras APIs e serviços. Isso é escrito em Node.js, exceto na borda. Ele usa NGINX para o front-end e executa a terminação SSL e alguma autenticação.
Conexão em tempo real
Para suportar perfeitamente as mais altas demandas de disponibilidade, a pilha do marketplace deve receber informações em tempo real. Assim, os desenvolvedores usam o Ringpop, uma biblioteca para construir sistemas distribuídos cooperativos. Graças a essa biblioteca, os desenvolvedores obtêm uma conexão altamente disponível com bancos de dados distribuídos, como Riak e DynamoDB.
A lógica correspondente
O algoritmo de correspondência, ou seja, o sistema que gerencia os alertas de motoristas e passageiros em tempo real e depois os corresponde, é escrito em Go e Node.js. Riak é seu banco de dados distribuído, enquanto o Redis oferece cache.
Otimização dinâmica de preços
A equipe de marketplace da Uber gerencia a otimização e o equilíbrio por meio de preços dinâmicos, correspondência inteligente e posicionamento de suprimentos. Anteriormente, a maioria das partes dessa pilha foi construída usando Python com Flask e uWSGI. No entanto, agora, os desenvolvedores estão substituindo a maioria do Python pelo Go para obter maior desempenho.
Streaming de dados e aprendizado de máquina
Uber usa Kafka e seus próprios bancos de dados de produção para streaming de dados. E o armazenamento de dados depende do Hive, HDFS, Elasticsearch, MapReduce e serviços web de armazenamento de arquivos. A empresa também desenvolveu seu próprio LIDAR que garante o compartilhamento interno. O LIDAR roda Jupyter, JupyterHub, integrado ao Apache Spark e sua própria plataforma de dados.
Seguindo em frente, vale ressaltar que o Uber possui sua própria plataforma de ML. Em 2015, a empresa decidiu dimensionar o ML para padronizar ferramentas e fluxos de trabalho e evitar antipadrões de ML. Consequentemente, eles desenvolveram Michelangelo em 2017.
Michelangelo é uma plataforma baseada em IA e ML que ajuda a gerenciar dados, avaliar e implantar modelos, fazer previsões de tendências e monitorar prognósticos. A plataforma de ML compreende uma combinação de sistemas de código aberto e componentes internos, como:
- HDFS
- Samza
- Fagulha
- MLLib
- TensorFlow
- Cassandra
- XGBoostName

Tecnologias de pilha de um aplicativo da web
Para o aplicativo baseado na web, os desenvolvedores do Uber usam o Node.js, uma plataforma de código aberto com uma enorme comunidade de engenheiros da web. O Node.js também permite que os desenvolvedores compartilhem código JavaScript entre o servidor e o cliente para criar aplicativos Web universais. Por fim, eles usam o Browserify para todos os pacotes do lado do cliente, como vem com o Node. Requisitos do módulo baseado em js.
O servidor web da Uber chamado Bedrock é construído em Express.js, um framework web popular que oferece total segurança e internalização. Sua camada de comunicação de serviço interna, conhecida como Atreyu, gerencia toda a comunicação com os serviços de back-end e se integra ao Bedrock. Essa camada de comunicação também permite que a empresa faça solicitações para suas APIs de serviço SOA de maneira fácil e rápida.
A Uber usa Flux e React.js padrão para renderização de aplicativos e manipulação de estado. O sistema de compilação, Core Tasks, é um grupo predefinido de scripts para compilar e versionar recursos de front-end que são criados em Gulp.js.
Tecnologias de empilhamento de um aplicativo móvel
Para desenvolver um aplicativo como o Uber, você precisa criar quatro aplicativos móveis diferentes: passageiro Android, motorista Android, passageiro iOS e motorista iOS. Os desenvolvedores criam aplicativos IOS usando linguagem de programação Objective-C e Swift, enquanto o aplicativo Android é desenvolvido usando Java. Mas além deles, existem poucas outras tecnologias usadas pelos desenvolvedores. Esses incluem:
Pilha de tecnologia de aplicativos Android
- Gradle
- OkHttp/Gson/Retrofit
- Faca de manteiga
- Punhal
- Expresso
- Picasso
- RxJavaGenericName
- Madeira
Pilha de tecnologia de aplicativos iOS
- bode
- Alvenaria/SnapKit
- KSCrashGenericName
- OCMock
Quais linguagens de programação posso usar para criar um aplicativo de entrega de alimentos como o Uber?
Se você deseja desenvolver um aplicativo como o Uber, pode optar por integrar as seguintes tecnologias:
- Node.js – para aplicativo da web do Marketplace
- Python – para aplicativo de reservas baseado na web
- Go- para melhor desempenho e velocidade
- Browserify – para empacotamento do lado do cliente
- Java – para integrações de serviços de terceiros
- Armazém de dados Apache Hive – para análise e consulta de dados
- ELk – para armazenamento de logs, processamento e envio
- Apache Cassandra – para gerenciar grandes volumes de dados
- MySQL Database Service - para gerenciamento de banco de dados relacional
- Docker – para infraestrutura de data center
- HAProxy – para servidor proxy e balanceador de carga
Este é um rápido resumo da pilha de tecnologia da Uber. No entanto, simplesmente copiar essa pilha de tecnologia sem fazer sua própria pesquisa pode ser prejudicial ao seu modelo de negócios. Além disso, aplicar as mesmas tecnologias não garantirá o sucesso do seu negócio de táxi.
Portanto, é aconselhável construir seu aplicativo com o mínimo de tecnologias possível. Gradualmente, à medida que sua empresa se expande, você pode continuar adicionando novos recursos aproveitando tecnologias mais recentes. Você só deve usar a pilha de tecnologia do Uber como fonte de inspiração para começar.