Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Shopify e Production Engineering: Como fazemos ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Shopify e Production Engineering: Como fazemos mais de 50 deploys por dia

Shopify é uma das maiores empresas de comércio eletrônico do mundo e muito desse sucesso vem da utilização e desenvolvimento de tecnologias abertas como Ruby on Rails, Docker, Python, Golang, Kubernetes, ElasticSearch, Kafka, MySQL e várias outras.

Como uma empresa de comércio eletrônico, recebe uma carga exorbitante de requisições durante eventos como Black Friday e Cyber Monday, além de "flash sales", que são vendas online de produtos em quantidades reduzidas, por tempo limitado e sem aviso prévio.

Nessa palestra pretendo mostrar como os conceitos SRE (Site Reliability Engineering), DevOps e ChatOps são utilizados pelo time de Production Engineering da Shopify para permitir que desenvolvedores façam mais de 50 deploys por dia em produção de forma estruturada sem ameaçar a escalabilidade da plataforma.

More Decks by Douglas Soares de Andrade

Other Decks in Technology

Transcript

  1. Shopify e Production Engineering Como fazemos mais de 50 deploys

    por dia FISL Porto Alegre Julho 11, 2018
  2. Sobre mim: Shopify Production Engineer, em Montreal Pai de três

    lindas crianças e dois gatos =^^= • Python/Ruby, Django/Rails, Docker, Kubernetes
  3. Golang MySQL Redis Kafka Elastic Search Data Centers (Colocation) Cloud

    (Google, Amazon) Tecnologias utilizadas pela Shopify Monolito Rails Aplicações Python Outras aplicações Rails
  4. • Simplicidade: Procure a solução mais simples e vá melhorando

    com o tempo e com o apoio do seu time • Get Shit Done: Ao invés de gastar tempo com reuniões desnecessárias, focamos nossa energia em fazer entregas pequenas e funcionais constantemente • Aja como um dono: Se algo está quebrado ou não está funcionando, arrume ou notifique quem possa fazê-lo Cultura
  5. • Pense no longo prazo: Apesar de priorizarmos entregas pequenas

    e rápidas é importante manter a visão de onde queremos chegar • Seja adaptável e não tema mudanças: Mudança é uma constante tanto em tecnologia quanto nas formas de fazer comércio, portanto, devemos estar abertos e preparados para acolhê-las • Bônus - bateria de confiança (trust battery): Toda interação na Shopify começa com 100% de confiança e depende de você mantê-la carregada Cultura
  6. • Pair programming: Sempre que possível, trabalhamos em pares para

    resolver problemas e/ou melhorar nossas habilidades • Code Review: Todas as mudanças só vão para master/deploy se revisadas por um ou mais desenvolvedores • ATC: Cada time tem pessoas que são escaladas para ajudar outras pessoas e resolver problemas • Responsabilidade: Uma vez que uma funcionalidade é enviada para deploy, somos responsáveis por ela até que chegue em produção • Código compartilhado: O código de uma aplicação deve ser conhecido por todos do time para evitar bus/lottery factor Processos
  7. • Slack: Ferramenta utilizada para comunicação interna e chatops •

    Pull-Requests: Qualquer discussão relacionada a código é feita nos comentários dos pull-requests • Wiki, anúncios e comunicados: Temos uma ferramenta interna que gerencia posts técnicos e que permite a criação de anúncios (eventos e mudanças da empresa, palestras) e comunicados (indisponibilidade, manutenção, mudanças técnicas). Como nos comunicamos?
  8. Dev

  9. “Quanto tempo leva para um desenvolvedor ter seu ambiente configurado

    e ser produtivo? É um processo agradável?”
  10. • Antes de 2012: README.md e varios scripts bash para

    preparar e inicializar o projeto • 2012: Github Boxen: Gerenciador de configuração • 2013-2015: Vagrant usando chef cookbooks no github • 2015-atualmente: Utilização do dev e railgun como ferramentas para provisionar ambientes de desenvolvimento • Futuro: dev utilizando kubernetes e rodando em nuvem? Um pouco de história
  11. • Fácil e rápido de instalar • Estável • Fácil

    de atualizar • Reproduzível • Parecido com o ambiente de produção O que é um bom ambiente de desenvolvimento?
  12. • Versionamento: Um premissa que a Shopify tem desde seu

    início é que tudo que pode ser versionado deve ser versionado - seja código-fonte dos projetos, configuração de infraestrutura e até posts de blogs/wikis internos • Github Apps: Para validação estática e correção de código fonte Github e Shopify
  13. • Verificamos: ◦ Se os templates de deploy estão corretos

    ◦ Se o código quebra alguma regra de sintaxe e/ou boas práticas ◦ se a cobertura diminuiu • Fazemos: ◦ Criamos as imagens para testes e para deploy em produção ◦ Executamos os testes no ambiente de Integração Contínua A cada commit
  14. Metas • Orquestrar deploys: Construir imagens para execução de testes

    e deploys em produção, execução dos testes, notificação de responsáveis • Auditável: Quais deploys foram feitos, por quem e de quais revisões • Fácil de operar: Basta criar uma "stack" que o ShipIt começa a monitorar o projeto • Reverter e bloquear deploys • Opensource
  15. Como funciona? • Desenvolvedor faz um commit em master •

    Github dispara um webhook e o ShipIt é notificado • ShipIt monitora todos os commits feitos em master a partir da última versão em produção • Desenvolvedor dispara o deploy (ou acontece automaticamente) e o mesmo é feito de todas as versões pendentes • ShipIt verifica se deploys estão habilitados, coordena a execução dos testes de IC, reconstrução dos contêineres (se necessário) • Dispara o deploy das mudanças depois que todos os testes passam e o ambiente está preparado para recebê-las.
  16. E quando dá erro durante o deploy? • Bloqueio de

    novos deploys: Novos deploys são bloqueados via spy para analisarmos o que aconteceu • Análise do problema: Verificamos o que aconteceu e corrigimos o problema se for possível e fazemos outro deploy em modo de emergência • Reverter as mudanças: Se não for possível continuar o deploy, revertemos as mudanças em master • Desbloqueio de novos deploys
  17. E quando dá erro depois do deploy? • Bloqueio de

    novos deploys: Novos deploys são bloqueados via spy para analisarmos o que aconteceu • Rollback: Basta clicar no botão de rollback (caso não tenham mudanças do esquema de base de dados ou alguma outra mudança crítica (se houver, envolvemos outras áreas) • Monitoramento: Monitoramos os ambientes e a aplicação para ver se está funcionando corretamente • Corrigimos o problema e fazemos outro deploy em modo de emergência • Desbloqueio de novos deploys
  18. • Automação: Reduzir execução de código não gerenciado em containers

    de produção • Empoderamento: Qualquer desenvolvedor pode executar comandos administrativos - desde criação de repositórios até mover aplicações para outros clusters • Informações e métricas: Ver status de serviços e shops, métricas de infraestrutura. Metas
  19. • Propriedade (Ownership): Envolver equipes de desenvolvimento em tudo relacionado

    a aplicações/serviços - deploys, falhas de segurança, indisponibilidade de serviços Metas
  20. • Integração com Github • Gerenciamento da nossa CDN (mudança

    de tráfego, expiração de cache, etc) • Gerenciamento de deploys (bloquear, desbloquear, reiniciar) • Gerenciamento de clusters (mudança de datacenter, mudança de todos os serviços para outra região) • Gerenciamento de incidentes (criação, notificação, notas) • On Call (responsável atual por serviço, notificar pessoas on call) Principais funcionalidades
  21. Metas principais • Propriedade: Definir responsáveis para todos os serviços/aplicações

    em execução na Shopify • Métricas: Ser capaz de medir quão bem estamos indo em relação a infraestrutura operacional para um determinado serviço • Automação: Prover ferramentas para simplificar a construção e manutenção da infraestrutura de serviços
  22. Arquitetura Services DB Services GitHub API Web Hooks Repos Users

    Teams Issues Runtimes Tools Web App Chat App