Post on 18-Dec-2014
description
José Papo
AWS Tech Evangelist
@josepapo
Então, como ter escalabilidade na Nuvem?
Auto-Scaling???
Começando pelo básico primeiro
US-WEST (Oregon) EU-WEST (Ireland)
ASIA PAC (Tokyo)
US-WEST (N. California)
SOUTH AMERICA (Sao Paulo)
US-EAST (Virginia)
AWS GovCloud (US)
ASIA PAC
(Sydney)
Regiões
ASIA PAC
(Singapore)
US-WEST (Oregon) EU-WEST (Ireland)
ASIA PAC (Tokyo)
US-WEST (N. California)
SOUTH AMERICA (Sao Paulo)
US-EAST (Virginia)
AWS GovCloud (US)
ASIA PAC
(Sydney)
Zonas de Disponibilidade
ASIA PAC
(Singapore)
Compute Storage
AWS Global Infrastructure
Database
App Services
Deployment & Administration
Networking
Compute Storage
AWS Global Infrastructure
Database
App Services
Deployment & Administration
Networking
Amazon
CloudWatch AWS IAM AWS
CloudFormation
Amazon Elastic
Beanstalk AWS
Data
Pipeline
AWS
OpsWorks
Amazon
CloudSearch Amazon SQS Amazon
SNS
Amazon
Elastic
Transcoder
Amazon SWF Amazon SES
Amazon
DynamoDB
Amazon RDS
Amazon
ElastiCache
Amazon
RedShift
AWS Storage
Gateway
Amazon S3
Amazon
Glacier
Amazon
CloudFront Amazon
EC2
Amazon
EMR Amazon
VPC
Amazon
Route 53 AWS
Direct
Connect
Vamos então começar pelo dia
um, um usuário ( você! ):
Dia Um, Um Usuário
• Uma instancia EC2
– Stack completo • Aplicação Web
• Banco de Dados
• Gestão
• Etc.
• Um Elastic IP
• Route53 para DNS
EC2
Instance
Elastic IP
Amazon
Route 53 User
“Precisamos de uma máquina maior”
• Modo mais simples
• Pode alavancar uso de PIOPs
• Instancias High I/O
• Instancias High Memory
• Instancias High CPU
• Instancias High Storage
• Fácil de mudar tamanhos de
instancias
• Vai eventualmente ter limitações
hi1.4xlarge
m2.4xlarge
m1.small
“Precisamos de uma máquina maior”
• Modo mais simples
• Pode alavancar uso de PIOPs
• Instancias High I/O
• Instancias High Memory
• Instancias High CPU
• Instancias High Storage
• Fácil de mudar tamanhos de
instancias
• Vai eventualmente ter limitações
hi1.4xlarge
m2.4xlarge
m1.small
Dia Um, Um Usuário:
• Pode potencialmente atender
algumas centenas até alguns
milhares de usuários
dependendo da instancia,
complexidade da app e
tráfego
• Não tem failover
• Não tem redundância
• Todos os ovos no mesmo cesto
EC2
Instance
Elastic IP
Amazon
Route 53 User
Dia Um, Um Usuário:
• Pode potencialmente atender
algumas centenas até alguns
milhares de usuários
dependendo da instancia,
complexidade da app e
tráfego
• Não tem failover
• Não tem redundância
• Todos os ovos no mesmo cesto
EC2
Instance
Elastic IP
Amazon
Route 53 User
Dia Dois, Usuário >1:
Vamos primeiro
separar os recursos em
mais de uma instancia.
• Instancia Web
• Instancia de Banco Web
Instance
Database
Instance
Elastic IP
Amazon
Route 53 User
Gestão Própria Serviço Gerenciado
Banco de Dados
no Amazon EC2
Sua escolha de BD
no Amazon EC2
Bring Your Own
License (BYOL)
Amazon
DynamoDB
Serviço gerenciado
de BD NoSQL que
usa storage SSD
Amazon RDS
MS SQL Server,
Oracle ou MySQL
as a service
BYOL ou Licença
Incluída
Amazon
Redshift
Data Warehouse as
a service
distribuído e com
escala de petabytes
Opções de Bases de Dados
Que tecnologia usar?
SQL? NoSQL?
Depende do seu caso
de uso, mas…
Comece com aquilo que for
mais simples para você
Vamos começar com o
Amazon RDS nesse exemplo
Usuários >100:
Web
Instance
Elastic IP
RDS DB
Instance
Amazon
Route 53 User
Vamos primeiro separar
os recursos em mais de
uma instancia.
• Instancia Web
• Instancia de Banco
– Use o RDS para ter uma
vida mais simples!
Usuários > 1000:
Agora vamos endereçar
a falta de failover e
redundancia: • Elastic Load Balancer
• Mais uma Instancia Web
– Em outra Zona de Disponibilidade
• Habilitar RDS Multi-AZ
Web
Instance
RDS DB Instance
Active (Multi-AZ)
Availability Zone Availability Zone
Web
Instance
RDS DB Instance
Standby (Multi-AZ)
Elastic Load
Balancer
Amazon
Route 53 User
Escalando
horizontalmente e
verticalmente podemos
chegar bem longe ( 10s-100s de milhares )
Usuários >10ks-100ks:
RDS DB Instance
Active (Multi-AZ)
Availability Zone Availability Zone
RDS DB Instance
Standby (Multi-AZ)
Elastic Load
Balancer
RDS DB Instance
Read Replica
RDS DB Instance
Read Replica
RDS DB Instance
Read Replica
RDS DB Instance
Read Replica
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Amazon
Route 53 User
Isso realmente nos levará
longe, mas queremos
também performance e
eficiência. Vamos limpar um
pouco mais
Mova a carga:
Diminua a carga nas
instancias Web e BD:
• Mova conteúdo estático da
instancia Web para o S3 e
CloudFront
• Mova estado/sessões e faça
cache do BD com ElastiCache
e/ou DynamoDB
Web
Instance
RDS DB Instance
Active (Multi-AZ)
Availability Zone
Elastic Load
Balancer
Amazon S3
Amazon
Cloudfront Amazon
Cloudfront Amazon
Cloudfront Amazon
Cloudfront Amazon
Cloudfront
Amazon
Cloudfront
Amazon
Route 53 User
ElastiCache
Cache Node ElastiCache
Cache Node ElastiCache
Cache Node
ElastiCache
DynamoDB
Agora que nossas camadas
Web e de BD estão mais
leves vamos voltar ao início
da nossa discussão…
Auto-Scaling!!!
Escalabilidade automática de
instancias de acordo com políticas
definidas
Trigger auto-scaling
policy
as-create-auto-scaling-group MyGroup
--launch-configuration MyConfig
--availability-zones us-east-1a
--min-size 4
--max-size 200
Auto-Scaling
Amazon
CloudWatch
Tráfego em Novembro na Amazon.com
November
Provisioned capacity
November
Tráfego em Novembro na Amazon.com
76%
24%
Provisioned capacity
November
Tráfego em Novembro na Amazon.com
November
Tráfego em Novembro na Amazon.com
Auto Scaling
É possível fazer ainda mais
melhorias deixando suas
camadas ainda mais leves e
orientadas a serviços
SOA = Service Oriented Architecture
Baixo acoplamente te liberta!
• Reduza o acoplamento para escalar ainda mais
– Componentes independentes
– Projete-os como uma caixa preta
– Desacople as integrações
– Prefira serviços já construídos com redundancia e
escalabilidade ao invés de contruir novamente
Controller A Controller B
Controller A Controller B
Q Q
Alto acomplamento
Use Amazon SQS como Buffers
Baixo acoplamento
Baixo acoplamento + SOA = Win!
Exemplos:
• Filas
• Transcoding de Vídeos
• Busca
• Bancos de Dados
• Monitoramento
• Métricas
• Logs
Amazon
CloudSearch Amazon SQS Amazon SNS
Amazon Elastic
Transcoder Amazon SWF
Amazon SES
Não reinvente a roda!
Baixo acoplamento + SOA
Exemplo
Imagine um site/app para
upload e compartilhamento
de fotos entre usuários
Exemplo usando filas de
mensagem SQS
S3 Bucket
For Ingest
User
SNS Topic
RRS S3
Bucket to
Serve
content to
CloudFront
S3 Bucket
For
originals
CloudFront
Download
Distribution
SQS Queue
Size for Thumbnail
SQS Queue
Size Image for
Mobile
SQS Queue
Size Image for Web
Auto scaling
Group
Instances
Auto scaling
Group
Instances
Auto scaling
Group
Instances
Exemplo usando serviço
Simple Workflow (SWF)
S3 Bucket
For Ingest
User
RRS S3
Bucket to
Serve
content to
CloudFront
S3 Bucket
For
originals
CloudFront
Download
Distribution
Auto scaling
Group
Instances
Auto scaling
Group
Instances
Auto scaling
Group
Instances
SWF
Instance running
decider
Usuários >1milhão+:
Chegar em um milhão e além requer uma arquitetura que utilize os recursos vistos anteriormente:
• Multi-AZ
• Elastic Load Balancer entre as camadas
• Auto-Scaling
• Service oriented architecture
• Servir conteúdo estático com as soluções certas ( S3/CloudFront )
• Cache e réplicas de bases de dados
• Mover estado para fora das camadas com auto-scaling
Usuários >1milhão+:
RDS DB Instance
Active (Multi-AZ)
Availability Zone
Elastic Load
Balancer
RDS DB Instance
Read Replica
RDS DB Instance
Read Replica
Web
Instance
Web
Instance
Web
Instance
Web
Instance
Amazon
Route 53 User
Amazon S3
Amazon
Cloudfront
DynamoDB
Amazon SQS
ElastiCache
Worker
Instance
Worker
Instance
Amazon
CloudWatch
Internal App
Instance
Internal App
Instance Amazon SES
Próximos passos
Usuários > 10milhões+:
Você provavelmente encontrará dificuldades com sua
base de dados nas escritas no BD Master.
Como resolver?
• Sharding ( separar conjuntos de dados em mais de
uma base de dados )
• Mover funcionalidades para outros tipos de BDs (
NoSQL )
Sharding
• Mais complexo para a
camada de aplicação
• Complexidade
operacional
• Shard por função ou
chave
User ShardID
002345 A
002346 B
002347 C
002348 B
002349 A
A
B
C
Mover funcionalidades para NoSQL
• Soluções NoSQL usualmente possuem
escalabilidade horizontal transparente
• Use serviços gerenciados como o
DynamoDB
DynamoDB
Você também poderá ter problemas relacionados a
velocidade ou performance.
• Tenha soluções de monitoração/métricas/logs
– Se possível, use soluções prontas! ( SaaS )
• Preste atenção no que seus usuários estão dizendo
• Verifique a performance de cada serviço/componente
Usuários > 10milhões+:
HOST
LEVEL
METRICS
AGGREGATE
LEVEL
METRICS
LOG
ANALYSIS
EXTERNAL
SITE
PERFORMANCE
AWS Marketplace & Partners AWS podem ajudar
Saiba mais em: aws.amazon.com/marketplace
Usuários > 10 milhões+:
Gerenciar sua infraestrutura será fundamental com
número de instancias e recursos utilizados em
crescimento. Use ferramentas para automatizar tarefas.
• Ferramentas da AWS
• Ferramentas de gestão de configuração
• Análise automatizada de logs e ações de usuários
Soluções de Gestão de Aplicações da AWS
Elastic Beanstalk OpsWorks CloudFormation EC2
Conveniência Controle
Serviços de Alto Nível Faça você mesmo
Host Based Configuration Management
Dois grandes players: – Opscode Chef
– PuppetLabs Puppet
• São parecidos em recursos
• Use HBCM junto com uma das soluções da AWS (OpsWorks integra com Chef e CloudFormation com Chef ou Puppet)
• Mais difícil gerenciar muitos recursos computacionais sem HBCM
Breve revisão sobre
escalabilidade
Pense em redundância em
todas as camadas
Multi-AZ na sua infraestrutura
Faça uso de serviços prontos
( ELB, S3, SNS, SQS, SWF,
SES, etc )
Use SQL ou NoSQL de
acordo com os requisitos de
seu negócio
Crie uma arquitetura
orientada a serviços ( SOA )
Use Auto-scaling quando
precisar crescer ou diminuir
automaticamente
Use ferramentas de automação
sempre que possível
Tenha soluções de
métricas/monitoração/logs
Não reinvente a roda!
Pensando nesses elementos
você certamente poderá
atender dezenas e até centenas
de milhões de usuários!
aws.amazon.com/pt/architecture
Saiba mais em…
RECURSOS TÉCNICOS
awshub.com.br
OBRIGADO! aws.typepad.com/brasil
slideshare.net/AmazonWebServicesLATAM
José Papo
AWS Tech Evangelist
@josepapo