Arquiteturas escaláveis e tolerantes a falhas

Preview:

Citation preview

Arquiteturas Escaláveis e Tolerantes a Falhas

Tech Talks

Objetivos

• Construir arquiteturas escaláveis horizontalmente

• Arquiteturas tolerantes a falhas em múltiplos componentes

• Gestão de Mudança e deploys sem dor

Desafios Comuns

• Controle do Estado em instâncias individuais

• Componentes que permitam aumentar linearmente a escrita

• Alta disponibilidade geográfica

• Processos de deploy mais leves e seguros

Controle do Estado em instâncias individuais

• Sessões Web/HTTP

• Uploads e gerenciamento de arquivos locais

• Caches locais

Como resolver?

Controle do Estado em instâncias individuais

• Sessões Web/HTTP • Repositório de sessão compartilhado: Memcached, Redis,

DynamoDB, etc

• Uploads e gerenciamento de arquivos locais • Sistema de arquivos distribuído e compartilhado: S3, Azure Blob,

OpenStack Swift, GlusterFS, etc

• Caches locais • Sistemas de cache distribuídos: memcached, redis, Infinispan, Elastic

Search, etc

Controle do Estado em instâncias individuais

Arquiteturas de micro-serviços

Componentes que aumentem linearmente a escrita

• Bancos de dados relacionais são os vilões comuns • Capacidade de escrita limitada pela capacidade de 1 único nó

• Topologias multi-master são raras e normalmente caras

Como resolver?

Componentes que aumentem linearmente a escrita

• Usar outros tipos de bancos de dados em conjunto com o relacional • Muitos bancos NoSql suportam particionamento: CAP Theorem

• Implementar o máximo de processamento assíncrono, com abordagens de retentativas e capacidade de controlar a vazão

Alta disponibilidade geográfica

• Falhas em datacenters individuais são comuns

• Falhas em componentes individuais são ainda mais comuns

• Cada vez mais precisaremos de arquiteturas distribuídas de alto volume

Como resolver?

Alta disponibilidade geográfica

• Falhas em datacenters individuais são comuns • Topologias multi-datacenter, com nuvens públicas ou híbridas

• Falhas em componentes individuais são ainda mais comuns • Privilegiar componentes de software que permitam replicação

distribuída e preferencialmente sharding

• Cada vez mais precisaremos de arquiteturas distribuídas de alto volume • Avaliar o uso de componentes clusterizáveis e sem limitações de

armazenamento, escrita e leitura

Alta disponibilidade geográfica

Processos de deploy mais leves e seguros

• Pipelines de CI/CD

• Private PaaS

• Arquiteturas de micro-serviços com containers

Como resolver?

Continuous Delivery/Deployment

Deployment Pipelines

Blue-Green Deployments

Stacks inteiras em Produção simultaneamente Chaveamento em poucos segundos

Private PaaS, micro-serviços

• Facilidade de promover aplicações e configurações para Produção, com migrações a quente

• Tempos baixíssimos de deploy

• Componentes mais granulares, mais fácil isolar impactos

Obrigado!