Este post foi publicado originalmente por Arthur de Haan em 22 de dezembro em inglês aqui.

Olá, meu nome é Arthur de Haan e sou responsável pela engenharia de teste e sistema no Windows Live. Para começar, eu gostaria de mostrar a você os bastidores do Hotmail e falar mais sobre o que é preciso para criar, implementar e executar o serviço Windows Live Hotmail em uma grande escala global.

Hospedar o email e os dados (e nossos próprios dados!) em nossos servidores é uma responsabilidade enorme, e levamos a qualidade, o desempenho e a confiabilidade muito a sério. Efetuamos investimentos significativos em engenharia e infraestrutura para ajudar a manter o Hotmail em operação 24 horas por dia em todos os dias do ano. Você raramente ouvirá falar desses esforços (vai ouvir falar deles apenas na rara ocasião em que algo dá errado e o serviço acaba enfrentando problemas).

O Hotmail é um serviço gigantesco em todas as dimensões. A seguir, alguns dos destaques:

  • Somos um serviço mundial, que oferece versões localizadas do Hotmail em 59 mercados regionais, em 36 idiomas.
  • Hospedamos mais de 1,3 bilhão de caixas de entrada (alguns usuários têm várias caixas de entrada)
  • Mais de 350 milhões de pessoas usam o Hotmail ativamente todos os meses (fonte: comScore, agosto de 2009).
  • Manipulamos mais de 3 bilhões de mensagens por dia e filtramos mais de 1 bilhão de mensagens de spam (emails que você nunca vê em sua caixa de entrada).
  • Aumentamos a capacidade de armazenamento em mais de 2 petabytes por mês (um petabyte é aproximadamente 1 milhão de gigabytes ou 1000 terabytes).
  • Temos atualmente mais de 155 petabytes de armazenamento implantados (70% do armazenamento é composto por anexos, geralmente fotos).
  • Somos a maior implantação de SQL Server 2008 do mundo (monitoramos e gerenciamos milhares de servidores SQL).

A interface do usuário do Hotmail que você vê no navegador é apenas a ponta do iceberg: inúmeras inovações ocorrem "nos bastidores". Neste post, vou apresentar uma visão geral de alto nível sobre como o sistema é arquitetado. Abordaremos em mais detalhes alguns recursos específicos em posts posteriores.

Arquitetura

O Hotmail e os outros serviços do Windows Live são hospedados em vários datacenters em todo o mundo. O serviço Hotmail é organizado em "unidades de escala" lógicas, ou clusters. Além do mais, o Hotmail tem uma infraestrutura compartilhada entre os clusters de cada datacenter:

  • Servidores para manipular as mensagens de entrada e de saída.
  • Filtros de spam (falaremos mais sobre spam em um post futuro no blog).
  • Armazenamento e agregação de dados dos sistemas de monitoramento de integridade do serviço.
  • Infraestrutura de monitoramento e resposta de incidentes.
  • Infraestrutura para gerenciar atualizações de configuração e implantação de código automatizada.

Um cluster hospeda milhões de usuários (quantos dependem da idade do hardware) e é um conjunto independente de servidores, incluindo:

  • Servidores front-end: servidores que fazem verificação de vírus e hospedam o código que se comunica com o navegador ou o cliente de email, usando protocolos como POP3 e DeltaSync.
  • Servidores back-end: servidores SQL e de armazenamento de arquivos, armazenamento de dados de monitoramento e spam, agentes de diretório e servidores que manipulam emails de entrada e de saída.
  • Balanceadores de carga: hardware e software usados para distribuir a carga de maneira mais homogênea para melhor desempenho.

Impedir a ocorrência de falhas e perda de dados é nossa maior prioridade e tomamos extremo cuidado para impedir que isso ocorra. Projetamos o serviço para lidar com as falhas: nossa pressuposição é a de que algo que possa falhar acabará falhando. Nós realmente temos falhas de hardware, com centenas de milhares de unidades de disco em uso, algumas propensas a falhar. Felizmente, devido à arquitetura e os processos de gerenciamento de falhas que temos implementados, os clientes raramente sofrem algum impacto com essas falhas.

Eis algumas formas de conter as falhas:

  • Redundância: usamos uma combinação de matrizes de armazenamento de servidor SQL para hospedar nossos dados. Usamos tecnologias de failover ativo/passivo. Essa é uma forma legal de dizer que temos vários servidores e cópias de seus dados constantemente sincronizados. Se um servidor falhar, outro já está pronto para assumir as funções em questão de segundos. No final das contas, mantemos quatro cópias de seus dados em várias unidades e vários servidores para reduzir a chance de perda de dados devido a uma falha de hardware.
  • Outro benefício dessa arquitetura é que podemos realizar manutenção planejada (como implementar atualizações de código ou patches de segurança) sem tempo de inatividade para você. Partes essenciais da engrenagem de nossa rede são também duplicadas para reduzir a chance de falhas relacionadas à rede.
  • Monitoramento: temos um sistema elaborado para monitorar hardware e software. Milhares de servidores monitoram a integridade do serviço, transações (por exemplo, envio de um email) e desempenho do sistema para clientes de todo o mundo. Como somos muito grandes, acompanhamos as métricas de desempenho e tempo de ativação de maneira agregada, assim como no nível de cluster e por região. Queremos realmente ter certeza de que as suas experiências individuais cheguem até nós; não queremos nos perder quando observamos médias de todo o sistema. Nós nos importamos com a experiência de cada usuário. Falaremos mais sobre desempenho e monitoramento em um post futuro.
  • Response center: temos uma equipe de response center 24 horas por dia que observa nossos sistemas de monitoramento globais e atua imediatamente quando há um problema. Temos um processo de escalonamento que pode colocar em ação nossa equipe de engenharia dentro de poucos minutos quando necessário.

Processo de engenharia

Falamos um pouco sobre nossa arquitetura e as etapas que seguimos para garantir um serviço ininterrupto. Entretanto, nenhum serviço é estático; além do crescimento devido ao uso, realizamos atualizações regularmente. Portanto, nossos processos de engenharia são tão importantes quanto a arquitetura para fornecer a você um excelente serviço. De patches a pequenas atualizações e versões principais, tomamos muitos cuidados durante o processo de desenvolvimento e distribuição.

Teste e implementação: para cada desenvolvedor de nossa equipe, temos um engenheiro de teste que trabalha lado a lado com ele para ajudar no projeto e nas especificações, definir uma infraestrutura de teste, escrever e automatizar casos de teste para novos recursos e medir a qualidade. Quando falamos sobre a qualidade, queremos dizer isso na definição mais ampla da palavra: não só estabilidade e confiabilidade, mas também facilidade de uso, desempenho, segurança, acessibilidade (para clientes com deficiências), privacidade, escalabilidade e funcionalidade em todos os navegadores e clientes aos quais oferecemos suporte, em todo o mundo. Dada a nossa escala, essa não é uma proeza fácil.

E como somos um serviço gratuito amplamente financiado pela publicidade, precisamos ser altamente eficientes operacionalmente falando. Portanto, a implementação, a configuração e a manutenção dos sistemas são altamente automatizadas. A automação também reduz o risco de falha humana.

Implementação de código e gerenciamento de mudanças: temos milhares de servidores em nosso laboratório de teste, onde implementamos e testamos bem o código antes de ele entrar em operação para nossos clientes. No datacenter, temos alguns clusters reservados para testar a "comida de cachorro" e as versões beta nas etapas finais de um projeto. Testamos cada mudança em nossos laboratórios, seja ela uma atualização de código, uma mudança de hardware ou um patch de segurança, antes de implementá-la para os clientes.

Após todas as equipes de engenharia terem encerrado tudo para o lançamento (incluindo engenharia de sistema e teste), começamos a atualizar gradualmente os clusters no datacenter para levar as mudanças até os clientes de todo o mundo. Em geral, fazemos isso em um período de alguns meses, não só porque leva tempo para realizar as atualizações sem afetar os clientes com paralisação, mas também porque nos permite observar e ter certeza de que não exista nenhuma perda de qualidade e desempenho.

Podemos também ativar ou desativar recursos individuais. Às vezes, implementamos atualizações, mas adiamos ou retardamos a sua ativação. Em casos raros, temos alguns recursos desativados temporariamente por motivos de segurança ou desempenho.

Conclusão

Este post começa a mostrar a você o senso de tamanho e escopo de engenharia que faz parte do fornecimento e da manutenção do serviço Hotmail. Temos o compromisso de realizar aprimoramentos contínuos e de excelência de nossos serviços para você. Continuamos aprendendo à medida que o serviço cresce e levamos todos os seus feedbacks a sério, então, deixe um comentário para mim com as suas opiniões e dúvidas. Sou apaixonado pelos serviços que oferecemos, assim como todos os membros da equipe do Windows Live. Podemos ser engenheiros, mas nós mesmos usamos os serviços junto com nossos milhões de clientes.

Gostou desse post? Então confira também nosso Twitter e nossa página no Facebook.