Desenvolvimento

19 jan, 2018

Arquitetos de Infraestrutura: Conheça a Engenharia Aarhus da Uber

Publicidade

Em janeiro de 2014, a Uber abriu seu primeiro escritório de engenharia remota em Aarhus, Dinamarca. Localizado no distrito de Clemensbourg da cidade, a Engenharia Aarhus da Uber cresceu de 5 para 50 engenheiros, todos focados em dimensionar nossa infraestrutura central para disponibilidade todos os dias em todo o mundo.

O escritório atende a duas principais áreas centrais de armazenamento de conteúdo tecnológico e computação da Uber:

  • A Equipe de Plataforma de Armazenamento: Garantir que os petabytes de dados estejam disponíveis e elasticamente escaláveis ​​é o principal desafio abordado pela Equipe da Plataforma de Armazenamento. Nosso escritório Aarhus é responsável pela construção e execução do Schemaless, mecanismo de armazenamento NoSQL horizontalmente escalável, feito pela própria Uber, mantendo nossa plataforma de gerenciamento de armazenamento da empresa e apoiando nossa infraestrutura de forma mais ampla.
  • A Equipe de Computação: A arquitetura de micro serviço da Uber é executada no uDeploy, uma plataforma virtualizada massivamente escalável com ferramentas automatizadas para o gerenciamento do ciclo de vida. A Equipe de Computação desenvolve e conduz a infraestrutura necessária para implantar, gerenciar e executar milhares de micro serviços em vários locais geográficos.

Abaixo, vários membros da equipe de engenharia Aarhus discutem suas experiências construindo a infraestrutura da Uber e sobre o que é trabalhar no primeiro escritório de engenharia europeu da Uber.

Steffen Grarup, Diretor de Engenharia, Infraestrutura Central

Steffen Grarup (E) e Anders Madsen (D) discutem táticas para expandir nossa infraestrutura de forma escalável e confiável.

Você trabalhou em várias outras empresas antes de chegar a Uber. Com o quê a sua experiência na Uber se compara?

Eu acho que a Uber é, de longe, a empresa que se modifica da maneira mais rápida dentre aquelas em que já estive, e também é a mais divertida. Gosto de conseguir me concentrar em dimensionar e implantar código de alta qualidade rapidamente. Eu também gosto muito que minha equipe chegue a seus próprios serviços e testemunhe o impacto desses serviços em uma escala global. Então, em poucas palavras, todo o foco do nosso trabalho é fazer com que o software seja executado perfeitamente, em todo o mundo.

Qual o principal objetivo do trabalho de engenharia do seu site?

O foco principal da Engenharia Aarhus da Uber é tornar a infraestrutura central da Uber escalável e altamente disponível. Apenas manter a plataforma em escala – duplicando a cada 5-6 meses – é um grande desafio. Devemos ser resilientes a qualquer forma de falha de hardware, rede ou centro de dados, e em muitos casos, resilientes aos humanos também! Em termos de execução de serviços de alta qualidade, ele se resume à escrita de software que seja fácil de diagnosticar, fácil de atualizar, fácil de expandir iterativamente e fácil de instalar para novos engenheiros.

O que você mais aprendeu com a sua experiência na Uber até agora?

Eu acho que a maior experiência de aprendizado tem se dado no quão grande pode ser o ganho de produtividade que você pode ter ao possuir o seu serviço. Da conceptualização à operação, as equipes de engenharia da Uber possuem o fluxo de trabalho completo de seus serviços. A Engenharia da Uber possui equipes SRE e Observability, mas no fim, você é responsável pelo seu trabalho.

Como você descreveria as oportunidades de engenharia na Uber para candidatos ao emprego?

Você consegue colaborar com pessoas muito inteligentes e motivadas, tanto local quanto globalmente. A partir de maio de 2017, possuímos escritórios de engenharia em 11 cidades que abrangem cinco países. Operando em mais de 70 países agora, a Uber é verdadeiramente uma empresa internacional. De São Francisco a Sofia e Bangalore a Boston, a Uber dá aos seus funcionários a oportunidade de trabalhar com pessoas em escritórios em todo o mundo. Quando eu comecei minha carreira, a informação era muito mais local. Esses jovens engenheiros de software não percebem a sorte que possuem!

Mary Fesenko, Engenheira de Software, Plataforma de Computação

Mary Fesenko (E) e o autor tomam uma pausa para o café para discutir o nosso próximo encontro de engenharia de Uber Aarhus.

Qual é o seu papel na Uber?

Sou engenheira de software na Equipe da Plataforma de Computação. Eu trabalho no nosso sistema de implantação, uDeploy.

Por que você decidiu se juntar à Engenharia da Uber?

Tenho usado a Uber há anos como passageira, mas nunca havia pensado em me candidatar a um emprego aqui – nem sabia que Uber tinha escritórios na Europa. Um ano atrás, recebi um e-mail de um recrutador com informações sobre posições abertas no escritório Aarhus e decidi tentar.

Você se mudou da Ucrânia para se juntar à nossa equipe. O que a convenceu a fazer essa mudança para Aarhus?

Naquela época, estava realmente procurando por oportunidades de emprego no exterior porque queria experimentar viver e trabalhar em outro país. Eu me concentrei principalmente em oportunidades na Europa e já havia me candidatado a diferentes cargos de engenharia na Alemanha e na Holanda. Eu não sabia muito sobre a Dinamarca e as oportunidades de trabalho de lá, então eu não tinha realmente considerado trabalhar lá.

Após um dia completo de entrevistas no local, percebi que a oportunidade era perfeita para mim. O processo de entrevista da Uber era bastante diferente daqueles que eu tinha no meu país natal – não sabia que alguém poderia se sentir tão animado e cheio de energia depois de um dia inteiro de conversa.

Mudar para Aarhus e trabalhar na Uber foram as duas melhores decisões da minha vida (até agora). Temos uma incrível equipe aqui, as pessoas estão sempre prontas para ajudar, e aprendo muito com elas. Além disso, fiz muitas conexões excelentes com os companheiros de expatriados na Uber, que me ensinaram os prós e os contras sobre morar em minha nova cidade.

Como você descreveria as oportunidades de engenharia na Uber?

Na Uber, colaborei com engenheiros inteligentes e experientes em toda a empresa para resolver problemas desafiadores e você conhece pessoas interessantes de diferentes países quase que diariamente.

Estou aqui há oito meses e ainda aprendo algo novo todos os dias. Antes da Uber, trabalhei em empresas que terceirizam seus softwares e acho que é uma boa mudança ter a total propriedade sobre seu produto. Além disso, eu realmente gosto do fato de não estar vinculado a uma tecnologia ou uma linguagem aqui. Você não é apenas um engenheiro de Java ou um engenheiro de Python, você é um engenheiro de software e, independentemente das suas preferências ou antecedentes, você precisa usar o conjunto de ferramentas apropriado para a tarefa em questão.

Jeppe Bronsted, Engenheiro de Software, Schemaless

Jeppe Bronsted sorri para a câmera em frente à entrada do escritório Aarhus da Uber.

Qual é o seu papel na Uber?

Eu sou um engenheiro de infraestrutura de back-end. Ajudo a construir a infraestrutura básica para a plataforma da Uber.

Como você entrou na engenharia de software?

Quando eu era mais jovem, queria ser músico; eu tocava trompete. Quando eu estava com 22 anos, comecei a estudar ciência da computação e acabei por buscar pela formação em Ph.D. Eu realizei pesquisas sobre como você pode usar dados de sensores de vários carros para aumentar a segurança, por exemplo, para detectar buracos na estrada antes que os veículos os alcancem. Em muitos aspectos, a engenharia de software combina a criatividade da música com a precisão e resolução de problemas da ciência. Como engenheiro, acho muito mais fácil descobrir o que eu preciso fazer para melhorar, e isso é muito gratificante.

O que o fez entrar na indústria ao invés de continuar no meio acadêmico?

O que eu realmente gosto sobre estar na indústria é que o período de tempo desde quando você desenvolve ideias para quando elas afetam pessoas reais é muito mais curto em comparação com a pesquisa. A pesquisa pode levar anos para realmente causar um impacto positivo.

Antes de trabalhar na Uber, estava em uma empresa de cuidados em saúde onde construí infraestrutura. Nesse ambiente, a linha de tempo de escrever uma linha de código para vê-la em produção era um processo de um ano.

Na Uber, eu implanto um novo software três a quatro vezes por dia; esse é realmente um grande benefício do nosso modelo. Outra coisa única sobre a Uber é a grande escala da empresa. Nós facilitamos mais de 10 milhões de corridas por dia. Então, todos os dias meu trecho de código é usado por pelo menos um milhão de pessoas. E toda vez que penso nisso, isso me motiva a continuar executando no mais alto nível.

Lasse Damgaard, engenheiro de software, infra-estrutura de serviços

Lasse Damgaard (D) e Damon Toal-Rossi (E) avaliam uma nova implantação.

Como você entrou na engenharia?

Eu fiz um caminho de carreira alternativo em comparação com muitos engenheiros. Eu não tenho um conhecimento formal de ciência da computação, mas durante meus estudos trabalhei em vários projetos relacionados à interação homem-computador.

Qual é o seu papel na Uber?

Eu projeto a interface de usuário para uDeploy, nossa solução de implantação de código, mas também faço alguns trabalhos de back-end na plataforma. Ao construir uma interface de usuário que seja efetiva e fácil de usar, minha equipe garante que o uDeploy possa enviar novos códigos de forma rápida e perfeita em todos os nossos serviços, sem que os engenheiros tenham que pensar sobre isso.

Como você definiria a cultura da Engenharia da Uber?

Nossa cultura se resume ao fato de que nos movemos rapidamente e em escala. Há uma certa mentalidade que vem de saber que as coisas se movem tão eficientemente quanto podem – você precisa ter um projeto forte, mas você não pode se fechar em uma caixa por dois meses para desenvolver um protótipo. Precisamos lançar o software em produção e depois iterar.

O que mais os candidatos da Infraestrutura devem saber sobre o que é trabalhar em nosso escritório?

Nós sempre avançamos, e essa também é a parte divertida. Achamos um equilíbrio entre ter um ambiente onde podemos cultivar a infraestrutura na taxa que precisamos; não podemos ter barreiras ou processos rígidos. Assim como nossas redes, nossa atitude em relação ao desenvolvimento deve ser ágil e maleável.

Anders Madsen (E) apresentando um projeto aos membros de sua equipe.

Qual é o seu papel na Uber?

Eu sou um engenheiro de software sênior na equipe da Plataforma de Computação. Como outros engenheiros no meu escritório, trabalho principalmente no uDeploy e em muitos dos seus serviços de suporte. Ao longo dos anos, estive envolvido com o crescimento do sistema uDeploy, serviços integrados para esta plataforma, construção e distribuição de serviços e, mais recentemente, escalando o sistema para acomodar taxas ainda maiores de demanda dos usuários.

Você está na Engenharia Aarhus da Uber desde a sua criação. Como o papel do escritório mudou ao longo do tempo?

Eu era um dos cinco primeiros engenheiros do escritório. No início, realizamos muitas tarefas de melhoria de infraestrutura e correções de erros enquanto construíamos o uDeploy. Nosso objetivo era criar um sistema que permitisse que os engenheiros implantassem com confiança na escala em constante expansão da Uber.

Em meu primeiro ano na Uber, tudo que fiz foi manter o crescimento da empresa através de serviços integrados para o nosso uDeploy e criar novos recursos úteis. Naquele momento, nunca planejávamos com mais de um mês de antecedência porque estávamos iterando muito rapidamente.

Ao longo dos anos, no entanto, amadurecemos o sistema e expandimos o portfólio de aplicativos que mantemos para sustentar operacionalmente o sistema uDeploy. O desenvolvimento mudou de soluções rápidas e finalizações de incêndio para recursos cuidadosamente planejados que são entregues sem arriscar a estabilidade do sistema. Enquanto os engenheiros de Aarhus construíram o uDeploy, agora fazemos parte de um grupo maior executando a plataforma de computação com os membros da equipe em São Francisco e Palo Alto.

Em quais outros desafios de engenharia você está trabalhando?

Embora possa parecer que o uDeploy esteja construído, há ainda muito mais a fazer. Geralmente, quando você projeta um componente de um sistema distribuído maior, você apenas imagina que ele seja dimensionado para uma determinada carga ou tamanho. Mas quando você está se aproximando desses parâmetros, você deve esticar ou reprojetar esse componente. Consequentemente, estamos constantemente trabalhando em melhorar o uDeploy para oferecer uma melhor experiência para nossos clientes: o restante da Engenharia da Uber.

O que torna trabalhar como engenheiro de software da Uber ser diferente de trabalhar em outras empresas?

Algumas coisas vêm à minha mente, uma delas é ser um proprietário. Em outras empresas, eu criei produtos de software que vendemos aos clientes. O ciclo normal, desde a concepção até a produção, foi de dois meses de planejamento, seis meses de desenvolvimento e seis meses de teste antes de um novo produto ser enviado. Eu só estava realmente envolvido nos seis meses de desenvolvimento e, depois disso, passei a construir um novo produto. No final do dia, existe apenas uma versão de cada serviço: a versão em execução na produção.

Outro diferencial é a escala e escopo dos problemas de engenharia que enfrentamos. Muitas empresas usam o mesmo software de código aberto que nós, mas a quantidade de tráfego que temos ultrapassa imprevisíveis limitações que as empresas que operam em uma escala menor nunca alcançam. Esta demanda nos obriga a pensar de forma criativa sobre como enfrentamos esses tipos de desafios.

Se nos ajudar a expandir nossas plataformas de computação e armazenamento lhe interessa, considere candidatar-se a um cargo em nossa equipe ou venha nos conhecer em algum meetup da Engenharia Aarhus da Uber!

***

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