Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Escalabilidade e Resiliência de Microservices em Python

597 views

Published on

Escalabilidade e Resiliência de Microservices em Python

Published in: Software
  • Be the first to comment

  • Be the first to like this

Escalabilidade e Resiliência de Microservices em Python

  1. 1. Microservices em Python: Resiliência e Escalabilidade Guilherme Vierno
  2. 2. About me • Físico por formação • Pythonista desde 2010 • Mineiro agora morando no Rio • Desenvolvedor na • Plataformas de publicação
  3. 3. Por que falar de microservices? Interesse ao longo do tempo Fonte: google trends
  4. 4. Por que falar de microservices? • Tendência do mercado • Implementado nos líderes de tecnologia do mundo (Amazon, eBay, Netflix, Apple…) • Resolve bem problemas de desenvolvimento em larga escala
  5. 5. Intro
 Do Monolito aos Serviços
  6. 6. globo.com (Monolito) pré micro-serviços Request Response
  7. 7. globo.com (Monolito) pré micro-serviços • Um grande projeto em Django • ∞ linhas de código e milhares de testes • Banco MySQL superinflado • Vários times desenvolvendo o mesmo codebase
  8. 8. Monolito
 Principais problemas 1. Baixa velocidade de entregas • “Time de deploy” e “dia do deploy” • Refatoração cada vez mais cara 2. Escalabilidade • Ruim de medir uso de recursos por módulo • Dificuldade em fazer cache eficiente 3. Resiliência • Algumas subidas causando instabilidade geral
  9. 9. Separação em serviços Migrando partes da
 aplicação para
 serviços isolados
  10. 10. Micro-serviços Time 1 Time 3 Time 2 Time 4 IN OUT IN OUT
  11. 11. Micro-serviços Características comuns • Velocidade de desenvolvimento • Pequenos em tamanho e limitados por contexto • Desenvolvidos autonomamente • Escalabilidade • Deploys individuais • Resiliência • Isolamento • Automatização de processos (build, release, monitoração…)
  12. 12. Python & Microserviços & Milhares de req/s & Alta disponibilidade
  13. 13. Python & Microserviços & Escalabilidade & Resiliência
  14. 14. 1.Sistema eficiente de cache
  15. 15. g1.globo.com/.* /busca /votar /noticias
  16. 16. Renderizando uma matéria Estilo Conteúdo Menu Tenant Semântica Webmedia GET /noticia/tiroteio-deixa-um-morto-e-feridos.ghtml
  17. 17. Cache distribuído
  18. 18. Cache distribuído Cenário 1 
 A página já foi requisitada neste servidor nos últimos 10 segundo
  19. 19. Cache distribuído Cenário 2 
 Cache do Varnish expirou mas a matéria foi acessada nos últimos 5 minutos e está fresca no redis
  20. 20. Cache distribuído Cenário 3 
 A página não foi acessada nos últimos 5 minutos
 ou não está no cache recente do redis RENEW
  21. 21. Cache distribuído serviço Tempo de cache % das requisições servidas Expiração Varnish 10s >80% Passiva Redis 5min ~15% Ativa / LRU MongoDB 5min - ∞ < 5% Ativa
  22. 22. 2.Expectativa de falhas
  23. 23. Circuit Breaking OUT IN
  24. 24. Expectativa de falhas • Cache + Stale (Fail-safe) • Retry • Backoff
  25. 25. 3.Comunicação Leve e assíncrona
  26. 26. • https://github.com/aio-libs/ • aioredis • aiomysql • aiopg • toredis • tornado-alf Bibliotecas assíncronas
  27. 27. 4.Monitoração
  28. 28. Healthcheck detalhado { "status": "failure", "results": [ { "output": "Connection Timeout", "checker": "redis_connection", "passed": false } ] }
  29. 29. Ferramentas
  30. 30. 5.Automação
  31. 31. Facilidade de subir Apps • Isolamento das apps • Automação de Infra • FaaS & PaaS & IaaS • Autoscaling • CI / CD
  32. 32. 1. Cache distribuído 2. Expectativa de falhas 3. Comunicação leve e assíncrona 4. Monitoração 5. Automação Recap
  33. 33. E por que Python?
  34. 34. • Prototipagem e desenvolvimento rápidos • Facilidade de instrumentar continuous delivery / DevOps / automações em geral • Uso bem difundido de Microframeworks • É bem fácil fazer comunicação leve entre apps μservices em Python Vantagens de usar Python
  35. 35. • Podemos combinar com outras linguagens • Manutenção barata • Uma boa hora de introduzir Python[3] na stack μservices em Python Mais coisas legais
  36. 36. • Tornado: Network I/O não bloqueante • Flask: Zero ao deploy em pouco tempo • Django: Tastypie, django rest framework, channels • Nameko: Feito para microservices • aiohttp: asyncio nativo com network μservices em Python Frameworks
  37. 37. Considerações Finais • Monolith-first • O momento certo é quando sentir a necessidade • Atenção aos requisitos: Provisionamento de infra, monitoração, automação… • A maior mudança é cultural
  38. 38. Isso é tudo pessoal! We’re hiring! https://talentos.globo.com Guilherme Vierno vierno.com.br
  39. 39. Micro-serviços Melhor velocidade das entregas • Domínio do time sobre o serviço • Deploy individual • Automação e conteinerização • Testes
  40. 40. Nem tudo são flores • Complexidade de desenvolvimento/operacional • Duplicação de dados • Latência adicional • Desuniformidade • Refatoração cross-módulo

×