APIs e Microsserviços

26 jul, 2017

Engenharia de transporte sob demanda para negócios com a Uber Central

Publicidade

Quando a Uber foi lançada em 2009, nossa missão era simples: tornar o transporte tão confiável quanto a água corrente em todos os lugares, para todos. Embora a nossa missão continue a ser a mesma hoje, o número de casos de uso da Uber cresceu dramaticamente, motivando nossos engenheiros a pensar de forma criativa sobre como alavancamos nossa pilha de tecnologia existente.

Em abril de 2017, a Uber relançou a Uber Central (Central), uma solução de transporte sob demanda que oferece às organizações uma maneira mais eficiente de gerenciar viagens de negócios. Com a Central, as empresas podem solicitar uma viagem para seus fregueses ou clientes através de uma interface web fácil de usar disponível em desktop e telefonia móvel.

Com a contribuição de nossos clientes, a Central foi construída em cima da infraestrutura da plataforma Uber for Business, personalizando seu conjunto de ferramentas existente (incluindo controle de acesso, faturamento e relatórios) e recursos. Ser capaz de alavancar esta infraestrutura nos forneceu a flexibilidade e o suporte necessários para a nossa equipe básica para projetar, desenvolver e enviar nosso produto de forma rápida e exitosa.

Neste artigo, discutimos como a Engenharia da Uber construiu a arquitetura Uber Central integrando a infraestrutura da plataforma Uber for Business com um projeto front-end robusto para criar um novo tipo de experiência de transporte para a empresa.

 

Colocando o cliente em primeiro lugar

Para garantir que nossos clientes existentes da Uber for Business ficassem satisfeitos com a Central desde o começo, nossa equipe se encontrou com uma série de clientes para entender suas necessidades específicas e como elas poderiam ser abordadas pelo nosso produto.

As sessões incluíram reuniões com oficinas de reparação de automóveis, hotéis, empresas de consultoria e centros de cuidados para idosos, entre outros tipos de empresas – todas de negócios cujos clientes frequentemente confiavam neles para transporte de sua localização para outro destino – para determinar uma lista de recursos priorizados. Os recursos solicitados incluíam opções de cobrança flexíveis, recursos de relatórios aprimorados, controle de acesso, suporte para cancelamento, re-solicitações de viagem e a capacidade de contatar os motoristas antes, durante ou após a viagem.

Com nossa pesquisa, alinhamos nossas métricas de sucesso em equipes de engenharia, gerenciamento de produtos, projeto e vendas para construir o melhor produto possível para nossos clientes. Uma vez que os projetos e os requisitos da UX foram finalizados, conseguimos trabalhar criando a arquitetura da Central e os planos técnicos, juntamente com uma linha de tempo para entregar o novo aplicativo e integração com a Uber for Business.

 

A arquitetura por trás de Uber Central

A pilha de aplicativos Web de front-end da Uber, construída com Node.js, React e Redux, se comunica diretamente com nossa arquitetura orientada para serviços back-end através de um protocolo RPC personalizado baseado em Thrift chamado TChannel. Com este conjunto robusto de ferramentas e frameworks fornecidos pela equipe da Uber Mobile Platform, a equipe Central conseguiu se concentrar exclusivamente no projeto técnico, na arquitetura do sistema e na criação de uma experiência UX perfeita.

 

Integração Back-end

Para integrar perfeitamente a Central com a plataforma Uber for Business, as viagens tiveram que ser atribuídas de volta à sua organização em oposição ao passageiro individual. Para atender a este pré-requisito, definimos o que classifica uma viagem de negócios no back-end. Dentro do aplicativo Uber, os usuários podem selecionar qual perfil (por exemplo, Pessoal, Família, Trabalho) eles gostariam de usar para faturar sua viagem; no entanto, uma vez que as viagens da Central são solicitadas pelos clientes da Uber for Business no painel da Central e tomadas por seus clientes (e não necessariamente funcionários), tivemos que criar um tipo especial de passageiro associado à viagem no nosso serviço de back-end.

O próximo desafio foi descobrir como isentar esse passageiro especial de nossas ferramentas internas padrão e regras de viagem. Para realizar isso, criamos bandeiras especiais e regras de isenção para os passageiros da Central que são acionados quando uma organização opta pelo aplicativo através do painel da Uber for Business. Uma vez que o acesso está garantido, um passageiro convidado é criado e atribuído ao instrumento de pagamento da organização para essa viagem.

Quando uma viagem é solicitada, nossa plataforma API de tempo real lida com o pedido, como se fosse uma viagem Uber típica, mas com um passo adicional que retorna ao nosso serviço de backend para recuperar e atribuir informações do passageiro convidado para uma determinada viagem. Quando a viagem é concluída, é marcada como uma viagem de negócios e é processada através dos fluxos normais de liquidação e cobrança de viagem da Uber for Business para essa organização, apresentados abaixo:

Os pedidos de viagem da Uber Central são tratados da mesma forma que uma viagem Uber típica, com a exceção de que os pagamentos são encaminhados para os clientes da Uber for Business (U4B).

As organizações que usam a Central podem aproveitar os recursos da Uber for Business, como faturamento mensal, sincronização de lista de funcionários e relatórios de uso. As viagens da Central são marcadas como tal, mas são tratadas de outra forma como viagens realizadas por funcionários de um cliente da Uber for Business.

Em seguida, discutimos como desenvolvemos a nossa solução front-end usando o scaffolding dinâmico da plataforma web da Uber.

 

Ferramenta e projeto front-end

Para acomodar a enorme escala da Uber, nossa equipe da Plataforma Web desenvolveu uma plataforma web flexível e robusta para equipes nas linhas de produtos para construir a partir dela; de muitas maneiras, usar a Platforma Web da Uber é como ter um parquinho de brinquedos do desenvolvedor ao alcance de sua mão. Este scaffolding interno da Web ofereceu aos projetistas da Uber for Business extensa funcionalidades fora da caixa .

Com apenas uma linha de comando, conseguimos acessar um servidor Node.js com “baterias inclusas” que funcionasse totalmente com base em uma versão personalizada do Express.js chamando o Bedrock e o app cliente React/Redux com muitas bibliotecas npm escolhidas manualmente, incluindo react-router e Redux Form. Esta plataforma web também oferece suporte para as métricas do cliente e do lado do servidor que podem enviar dados para a nossa plataforma interna de registro de eventos e depuração onde os engenheiros da Uber podem ver erros e empilhar vestígios e trechos de código ofensivo.

A Plataforma Web da Uber também inclui um conjunto de middleware padrão que fornece segurança e internacionalização que lida com integração de infraestrutura e dependências de pacotes necessárias para criar e executar servidores web nos centros de dados da Uber. A plataforma permite que os desenvolvedores executem rápida e perfeitamente uma linha de comando para chamar uma configuração de conexão de chamada de procedimento remoto (RPC) para qualquer serviço no ecossistema da Uber. Com esse recurso, os projetistas podem visualizar a definição da interface, a solicitação esperada e o formato de resposta a partir do conforto de seu IDE ou editor de texto – não é necessária nenhuma documentação ou sandboxing.

Nossa biblioteca interna, Atreyu, lida com a resolução de gráficos para chamadas RPC para nossos serviços de back-end e se integra com o Bedrock. Com esse scaffolding, criamos uma página web personalizada e uma apresentação de formulários que atravessam o ciclo de vida completo do desenvolvimento usando os padrões normatizados a seguir para a renderização isomórfica de um aplicativo React/Redux.

Aperfeiçoamos nossas ferramentas front-end usando a enorme biblioteca de estilo UI da Uber e uma variedade de componentes React pré-fabricados. Com o framework do aplicativo e a funcionalidade básica no lugar, a equipe concentrou suas energias no projeto de uma hierarquia de componentes, planejando a estrutura do estado no Redux e incorporando uma estrutura de gráfico para solicitações agregadas de serviço para o backend.


A Uber Central incorpora recursos solicitados pelos clientes da Uber for Business, incluindo a capacidade de solicitar várias viagens ao mesmo tempo e agendar pedidos de viagens com antecedência.

Reunimos um design elegante para o aplicativo que incorporou nossos comentários dos nossos usuários do Uber for Business. Os recursos mais importantes para nossos usuários foram colocados na frente e no centro, como suporte para salvar viagens próximas, solicitar viagens simultaneamente e visualizar os detalhes das viagens em andamento. Os requisitos de projeto também incluíam otimizar a experiência para uso de celulares e tablets, pois muitas empresas queriam obter viagens para seus clientes sem estar em suas mesas. Você pode aprender mais sobre a Uber Central e sua lista de recursos assistindo nosso vídeo tutorial:

 

Construindo o futuro do transporte empresarial

Desde o relançamento da Central, nosso produto foi amplamente adotado pelos clientes da Uber for Business, com mais participação a cada semana. Nos próximos meses, pretendemos incorporar uma série de novos recursos, incluindo um método para que um usuário solicite uma viagem da Central sempre que quiser, mais opções de solicitação para empresas que solicitam viagens para grupos de passageiros e um UX atualizado que otimiza para casos de uso e atividades específicas.

Os engenheiros e projetistas da Uber for Business estão moldando o futuro do transporte comercial sob demanda, e esse último desenvolvimento será uma parte central do mundo da empresa.

***

Este artigo é do Uber Engineering. Ele foi escrito por Chris Bee. A tradução foi feita pela Redação iMasters com autorização. Você pode conferir o original em: https://eng.uber.com/uber-central/