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.
Upcoming SlideShare
What to Upload to SlideShare
What to Upload to SlideShare
Loading in …3
×
1 of 40

Escalabilidade e Resiliência de Microservices em Python

1

Share

Download to read offline

Escalabilidade e Resiliência de Microservices em Python

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

×