O documento apresenta estratégias para escalar uma aplicação na AWS até 10 milhões de usuários, começando com uma única instância e separando gradualmente os componentes (web, banco de dados) em várias instâncias e zonas de disponibilidade. Ferramentas como Elastic Load Balancing, Auto Scaling e serviços gerenciados como DynamoDB e RDS são apresentados para melhorar a performance, tolerância a falhas e escalabilidade da arquitetura.
2. Escalando na AWS até os Primeiros 10 Milhões de
Usuários
• EU:
– Fábio Aragão da Silva – silfabio@amazon.com
• VOCÊS: Estão aqui para aprender mais sobre
como escalar sua infraestrutura na AWS
• HOJE: Veremos as melhores praticas e
considerações para quanto estiverem
projetando em larga escala na AWS
3. Escalado até 10 milhões de usuários: uma estória
em quatro capítulos
• Introdução e Primeiros Passos
• Fundação
• Ferramentas e Monitoração
• 10 Milhões de Usuários e Além
12. Regiões
US-WEST (Oregon)
EU-WEST (Ireland)
ASIA PAC (Tókio)
US-WEST (N. California)
AMÉRICA DO SUL (São Paulo)
US-EAST (Virginia)
AWS GovCloud (US)
ASIA PAC
(Sydney)
ASIA PAC
(Singapore)
CHINA (Beijing)
13. Zonas de Disponibilidade
US-WEST (Oregon)
EU-WEST (Ireland)
ASIA PAC (Tókio)
US-WEST (N. California)
AMÉRICA DO SUL (São Paulo)
US-EAST (Virginia)
AWS GovCloud (US)
ASIA PAC
(Sydney)
ASIA PAC
(Singapore)
CHINA (Beijing)
15. • Negócio de mais de $7B
• Mais de 8,000 funcionários
• Uma porrada grande
quantidade de servidores
Todos os dias, a AWS
acrescenta capacidade
computacional equivalente a
esse negócio de $7B em 2004
2004 2014
19. Dia Um, Um Usuário:
• Uma única instância EC2
– Com toda a pilha de software no
servidor
• Servidor de Aplicações WEB
• Banco de Dados
• Gerenciamento
• etc.
• Um único endereço IP
elástico
• Amazon Route 53 como DNS
Instância
EC2
Endereço IP
Elástico
Amazon
Route 53
Usuário
20. “Putz Vamos precisar de uma caixa maior”
• Abordagem mais simples
• Agora podendo usar PIOPs
• Instâncias para I/O Alto
• Instâncias para Memória Alta
• Instâncias para CPU Alta
• Instâncias para Armazenagem Alta
• É fácil trocar o tipo de instância
• Mas vai atingir um limite
m3.xlarge
m1.small
i2.4xlarge
21. m3.xlarge
m1.small
i2.4xlarge
“Putz Vamos precisar de uma caixa maior”
• Abordagem mais simples
• Agora podendo usar PIOPs
• Instâncias para I/O Alto
• Instâncias para Memória Alta
• Instâncias para CPU Alta
• Instâncias para Armazenagem Alta
• É fácil trocar o tipo de instância
• Mas vai atingir um limite
22. Dia Um, Um Usuário:
• Poderiamos chegar
potencialmente a dezenas ou
até alguns milhares de
usuários dependendo do
tráfego e da complexidade da
aplicação
• Mas sem tolerância a falhas
• E sem redundância
Instância
EC2
Endereço IP
Elástico
Amazon
Route 53
Usuário
23. Dia Um, Um Usuário:
• Poderiamos chegar
potencialmente a dezenas ou
até alguns milhares de
usuários dependendo do
tráfego e da complexidade da
aplicação
• Mas sem tolerância a falhas
• E sem redundância
Instância
EC2
Endereço IP
Elástico
Amazon
Route 53
Usuário
24. Dia Dois, Usuários > 1:
Primeiramente, vamos
separar nosso host
“monolítico” em mais de
um servidor:
• Servidor Web
• Servidor de Banco de
Dados
– E que tal fazer uso de um
serviço de Banco de Dados
gerenciado?
Instância
WEB
Instância
de Banco
Endereço
IP elástico
Amazon
Route 53
Usuário
25. Gerência Própria Completamente Gerenciado
Banco de Dados
na Amazon EC2
Sua escolha de banco
de dados rodando na
Amazon EC2
Traga sua própria
licença (BYOL)
Amazon
DynamoDB
Serviço de Banco
NoSQL gerenciado
usando discos de SSD
Escalabilidade simples
e nenhuma
administração
Amazon RDS
Microsoft SQL, Oracle,
MySQL or PostgreSQL
como serviço
gerenciado
Licenciamento flexível
BYOL or com licença
incluída
Amazon
Redshift
Serviço de data
warehouse altamente
paralelo, da ordem de
petabytes
Rápido, poderoso e
fácil de escalar
Opções de Bancos de Dados
26. Escalado até 10 milhões de usuários: uma
estória em quatro capítulos
• Introdução e Primeiros Passos
• Fundação
• Ferramentas e Monitoração
• 10 Milhões de Usuários e Além
32. Mas por que começar com SQL?
• É uma tecnologia bem conhecida e estável
• Muito código já existente, comunidades, livros,
ferramentas, etc.
• Você provavelmente não vai conseguir ”sentar” um
banco SQL antes dos seus primeiros 10 milhões de
usuários. É sério, você não vai conseguir*
• Padrões claros e bem conhecidos para escalar
* A não ser que você se esforce muito esteja manipulando enormes quantidades de
dados; ainda assim um banco SQL terá lugar na sua pilha de software
33. A-há! Te peguei!
Você disse
“enormes
quantidades de
dados”. E eu vou
ter enooooormes
quantidades de
dados!
34. Só se a sua utilização estiver
gerando muitos TB ( >5 ) de dados
no primeiro ano OU você possuir um
fluxo extremamente intensivo em
termos de processamento de
dados… é que você provavelmente
vai precisar de verdade de NoSQL
35. Em todo caso, quando então usar
NoSQL?
• Aplicações de latência super baixa
• Conjunto de dados orientado a metadados
• Dados altamente não-relacionais
• Necessidade de tabelas sem estrutura pré-definida*
• Quantidades massivas de dados (na casa dos TB)
• Ingestão rápida de dados ( milhares de registros/seg )
• Já possui equipe qualificada em NoSQL
*Necessidade != “é mais fácil pra desenvolver”
37. Amazon Dynamo DB
• Banco NoSQL gerênciado e
com throughput provisionado
• Performance rápida e
previsível
• Arquitetura completamente
distribuída e tolerante a falhas
Característica Detalhes
Throughput
provisionado
Suba ou desça a capacidade de
escrita e leitura facilmente
Performance
previsível
Latência média de um único
dígito através de arquitetura
baseada em discos SSD
Consistência
Forte
Tenha certeza de estar lendo os
valores mais atuais
Tolerância a
falhas
Dados replicados entre
diferentes Zonas de
Disponibilidade
Monitoramento Integrado ao Amazon
CloudWatch
Segurança Integrado ao AWS Identity and
Access Management (AWS
IAM)
Amazon EMR Integrado ao Amazon EMR para
análises complexas em grandes
conjuntos de dados
38. Mas de volta à
conversa inicial…
Vejamos como
podemos escalar um
banco de dados SQL
39. Usuários > 100:
Primeiramente, vamos
separar nosso host
“monolítico” em mais de
um servidor:
• Servidor Web
• Servidor de Banco de
Dados
– Utilize o RDS para facilitar a
gestão e manutenção do
seu banco de dados SQL
Instância
WEB
Endereço
IP elástico
Amazon
Route 53
Usuário
RDS DB
instance
40. Usuários > 1000:
Agora, vamos
endereçar a falta de
tolerância a falha e
redundância:
• Com Elastic Load Balancing
• Com outra instância WEB
– Em outra zona de disponibiliza
• Habilitando Multi-AZ no RDS
Instância
WEB
Instância Amazon RDS
Ativa (Multi-AZ)
Zona de Disponibilidade Zona de Disponibilidade
Instância
WEB
Instância Amazon RDS
Standby (Multi-AZ)
Elastic Load
Balancing
Amazon
Route 53
Usuário
41. • Crie aplicações altamente escaláveis
Característica Detalhes
Disponível Distribui carga entre instâncias em múltiplas
zonas de disponibilidade
Verificação de Saúde Verifica automaticamente a saúde das instâncias
e tira-as de serviço caso não estejam
respondendo
Afinidade de Sessão Roteia pedidos da mesma origem para a mesma
instância
Secure sockets layer Suporta SSL offload de servidores web e de
aplicação com suporte de cifragem flexível
Monitoração Publica métricas para o Amazon CloudWatch
Elastic Load
Balancing
Elastic Load Balancing
43. Usuários > 10 mil - 100 mil:
RDS DB Instância
Ativa (Multi-AZ)
Zona de Disponibilidade Zona de Disponibilidade
RDS DB Instância
Standby (Multi-AZ)
Elastic Load
Balancing
RDS DB Réplica
de Leitura
RDS DB Réplica
de Leitura
RDS DB Réplica
de Leitura
RDS DB Réplica
de Leitura
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Amazon
Route 53
Usuário
44. Essas medidas vão nos
levar longe, mas a gente se
importa com performance e
eficiência, então vamos
melhorar a arquitetura com
componentes e serviços
45. Movendo parte da carga:
Pense em componentes e
serviços:
• Mova conteúdo estático da
instância WEB para o S3 e o
Cloudfront
• Mova estado/sessão e cache
do banco de dados para o
ElastiCache e/ou o DynamoDB
• Mais serviços daqui a pouco…
Instância
WEB
RDS DB Instância
Ativa (Multi-AZ)
Zona de Disponibilidade
Elastic Load
Balancing
Amazon S3
Amazon
CloudFront
Amazon
Route 53
Usuário
ElastiCache
Amazon
DynamoDB
46. Trabalhando com o S3
• Serviço de armazenamento de objetos
para a web
• Projetado para onze noves de
durabilidade
• Bom para:
– Conteúdo estático (css, js, imagens,
vídeos)
– Backups
– Logs
• “Escalabilidade Infinita”
• Suporta controle fino de permissões
• Integrado ao CloudFront
• Integrado ao EMR
• Atua como endpoint de logging para o
S3/CloudFront/Billing
• Suporta criptografia de dados em
descanso e em trânsito
• Redundância reduzida é 1/3 mais barata
• Amazon Glaciar para armazenamento
barato de longo prazo
47. CloudFront
Amazon CloudFront é um serviço web para
entrega escalável de conteúdo:
• Faz cache de conteúdo nos pontos de presença
para entrega mais rápida
• Ajuda a diminuir a carga na infra de origem
• Suporta conteúdo dinâmico e estático
• Suporta streaming de vídeo
• Suporta zone apex
• Suporta certificados SSL customizados
• TTL baixo (até 0 segundos)
• Baixo custo de transferência da origem (S3 e EC2)
• Otimizado para EC2, S3, ELB e Route 53
TempodeResposta
CarganoServidor
TempodeResposta
TempodeResposta
Sem CDN Com CDN para
arquivos
estáticos
Com CDN para
arquivos
estáticos e
conteúdo
dinâmico
0
10
20
30
40
50
60
70
80
8:00
AM
9:00
AM
10:00
AM
11:00
AM
12:00
PM
1:00
PM
2:00
PM
3:00
PM
4:00
PM
5:00
PM
6:00
PM
7:00
PM
8:00
PM
9:00
PM
VolumedeDados
Entregues(Gbps)
48. Escalado até 10 milhões de usuários: uma estória
em quatro capítulos
• Introdução e Primeiros Passos
• Fundação
• Ferramentas e Monitoração
• 10 milhões de Usuários e Além
49. Agora que nossa camada
web está bem mais leve,
vamos voltar ao começo da
conversa…
51. Mudança automática do tamanho do
cluster baseado na demanda
Disparo da política de auto-scaling
Característica Detalhes
Controle Permite definir as quantidades máximas e
mínimas de servidores e quando e como as
mudanças acontecem
Integrado ao Amazon
CloudWatch
Permite utilizar as métricas colhidas pelo
CloudWatch para decidir a melhor escalabilidade
Tipos de Instâncias Funciona com instâncias Spot e Sob Demanda;
compatível com VPC
aws autoscaling create-auto-scaling-
group
--auto-scaling-group-name MyGroup
--launch-configuration-name MyConfig
--min-size 4
--max-size 200
--availability-zones us-west-2c
Auto Scaling
Amazon
CloudWatch
59. Auto Scaling pode escalar
desde uma instância até
milhares de instâncias e
depois voltar
60. Usuários > 500 mil:
Zona de Disponibilidade
Amazon
Route 53
Usuário
Amazon S3
Amazon
CloudFront
Zona de Disponibilidade
Elastic Load
Balancing
Amazon
DynamoDBRDS DB Réplica
de Leitura
Instância
WEB
Instância
WEB
Instância
WEB
ElastiCache RDS DB Réplica
de Leitura
Instância
WEB
Instância
WEB
Instância
WEB
ElastiCacheRDS DB Instância
Standby (Multi-AZ)
RDS DB Instancia
Ativa (Multi-AZ)
61.
62. Use Ferramentas:
Gerenciar sua infraestrutura vai tomar uma parte
considerável e cada vez maior do seu tempo. Utilize então
ferramentas para automatizar as tarefas repetitivas.
• Ferramentas para gerenciar recursos da AWS
• Ferramentas de gestão de software and configuração
das instâncias (chef, puppet, salt, ansible, etc.)
• Análise automatizada de logs e ações dos usuários
63. Soluções de Gestão de Aplicação da AWS
AWS
Elastic Beanstalk
AWS
OpsWorks
AWS
CloudFormation
Amazon EC2
Conveniência Controle
Serviços de mais alto nível Faça você mesmo
64. Nesse ponto, você provavelmente vai encontrar problemas de
performance na aplicação:
• Tenha monitoramento/métricas/logging
– Se não puder construir, utilize soluções prontas de terceiros!
(Software-as-a-Service)
• Tire o máximo de informações que puder de cada
componente ou serviço
Usuários > 500 mil:
66. AWS Marketplace & Parceiros podem ajudar
• Clientes podem pesquisar,
encontrar e comprar software
• Precificação simplificada,
alinhada com o modelo do EC2
• Início em minutos
• Cobrança integrada na sua
conta da AWS
• Mais de 1300 produtos em mais
de 20 categorias
Saiba mais em: aws.amazon.com/marketplace
67. Escalado até 10 milhões de usuários: Uma estória
em quatro capítulos
• Introdução e Primeiros Passos
• Fundação
• Ferramentas e Monitoração
• 10 Milhões de Usuários e Além
68. Agora não há mais como
melhorar apenas
quebrando ainda mais a
camada web e de
aplicação
69.
70. SOA = Service Oriented Architecture, ou
Arquitetura Orientada a Serviços
71. SOA’ndo
Mova os serviços para suas
próprias camadas/modulos. Trate
cada um desses serviços como
peças 100% separadas da sua
infraestrutura e escale-os
independentemente.
A Amazon.com e a AWS fazem
isso extensivamente! Essa
abordagem oferece flexibilidade e
maior entendimento de cada
componente.
72. O Baixo Acoplamento Vos Libertará!
• Quanto menos acoplamento, mais escalabilidade:
– Componentes Independentes
– Projete tudo como se fosse uma caixa preta
– Desacople as interações
– Dê preferência a serviços que já possuam redundência e
escalabilidade ao invés de construir seus próprios
Controlador A Controlador B
Controlador A Controlador B
FIL
A
Alto Acoplamento
Use o Amazon SQS para buffers
Baixo Acoplamento FIL
A
73. Baixo Acomplamento + SOA = Vitória
Exemplos:
• Email / Filas / Notificação
• Transcodificação
• Busca
• Banco de Dados
• Monitoração
• Workflow
• Logging
Amazon
CloudSearch
Amazon SQSAmazon SNS
Amazon Elastic
Transcoder
Amazon SWF
Amazon SES
Quando estiver começando, se encontrar algum serviço
que já faça o que você quer, prefira utilizá-lo no lugar de
construí-lo você mesmo.
NÃO REINVENTE A RODA
74. Sobre reinventar a roda…
Se você estiver escrevendo
seu próprio serviço de: fila,
DNS, banco de dados,
armazenamento, monitoração
76. Vamos fazer uma pausa
rápida para conhecermos o
caso da AgênciaClick
Isobar
77. • Parte da Dentsu Aegis Network (+130
países, +300 agências, +36.000
profissionais)
• Média de 380 implantações por mês (mais
de 4.550 por ano)
• Projetos diversificados e com várias
constraints tecnológicas diferentes
• Estamos sempre correndo contra o tempo
78. • Garantir o funcionamento de sites de
campanhas onde o volume de acessos é
extremamente variável.
• Manter o custo fixo baixo da infra destas
campanhas, aumentando o número de
servidores quando necessário.
• Projetos muitas vezes casados com
campanhas off-line com alto investimento
em mídia gerando picos monstruosos de
acesso (as vezes de surpresa!)
• Transpor barreiras impostas pelo
departamento de tecnologia de nossos
clientes, acostumados com o modelo
antigo de infraestrutura.
79. • Implantação sem entraves, independente da
tecnologia.
• Redução e previsibilidade dos custos fixos de
projetos
• Escalabilidade e alta disponibilidade
• Suporte e consultoria pela ADTSys
81. Usuários > 1 milhão:
Alcançar um milhão de usuários e além vai exigir um pouco
mais das coisas discutidas anteriormente:
• Multi-AZ
• Elastic Load Balancing entre as camadas
• Auto Scaling
• Arquitetura SOA
• Entrega inteligente de conteúdo (Amazon S3/CloudFront)
• Cache dos dados do Banco de Dados
• Remoção de estado das camadas que usam auto scaling
82. Usuários > 1 milhão:
RDS DB Instance
Active (Multi-AZ)
Zona de Disponibilidade
Elastic Load
Balancing
RDS DB Réplica
de Leitura
RDS DB Réplica
de Leitura
Instância
WEB
Instância
WEB
Instância
WEB
Instância
WEB
Amazon
Route 53
User
Amazon S3
Amazon
CloudFront
Amazon
DynamoDB
Amazon SQS
ElastiCache
Instância
Worker
Instância
Worker
Amazon
CloudWatch
Instância de
Aplicação
Instância de
Aplicação
Amazon SES
84. Usuários > 5 milhões – 10 milhões:
Nesse ponto, você provavelmente vai começar a encontrar
problemas no banco de dados em relação a contenção de escrita
na base master.
Como resolver?
• Federação ~ divisão dos dados em múltiplas bases de dados
a partir de suas funções
• Sharding ~ divisão dos dados em múltiplas bases de dados a
partir dos dados em si
• Movimentação de algumas funcionalidades para outros tipos
de Bancos de Dados (NoSQL)
85. Movendo funcionalidades para NoSQL
• Similar à federação
• Novamente, revise os pontos anteriores para determinar
se você realmente precisa de NoSQL
• Use serviços gerenciados como Amazon DynamoDB
• Alguns casos de uso:
– pontuação/quadro de liderança em jogos
– Ingestão rápida de logs
– Tabelas temporárias ( carrinho de compra ou sessão )
– Tabelas muito acessadas
– Tabelas de pesquisa e metadados
Amazon
DynamoDB
88. Revisão
• Crie sempre sua infra-estrutura considerando
Multi-AZ
• Use sempre serviços auto-escaláveis:
– Elastic Load Balancing, Amazon S3, Amazon SNS, Amazon
SQS, Amazon SWF, Amazon SES, etc.
• Tenha redundância em todos os níveis
• Normalmente comece com SQL
• Utilize ferramentas de automação
89. Revisão (continuação)
• Tenha sempre métricas/monitoramento/logging
• Divida as camadas em serviços (SOA)
• Utilize Auto Scaling somente quando estiver pronto
pra ele
• Não reinvente a roda
• Passe a usar NoSQL apenas quando realmente
fizer sentido, mas faça o possível para não ter de
administrá-lo (de preferência, use o DynamoDB)
90. Juntando tudo isso,
temos agora condições
de suportar até 10
milhões de usuários sem
grandes dores de cabeça
92. Usuários > 10 milhões:
• Mais ajustes finos na aplicação
• Mais funcionalidades e recursos de SOA
• Indo de Multi-AZ para Multi-Região
• Potencialmente vai precisar começar a construir
soluções customizadas (ferramentas criadas
pela Netflix, por exemplo)
• Análise profundamente toda a pilha de software
95. Próximos Passos?
PEÇAM AJUDA!
• forums.aws.amazon.com
• aws.amazon.com/support
• Seu Gerente de Contas na AWS
• Um dos nossos Arquitetos de Soluções