Escalando primeiros 10 milhões de usuários
-
Upload
amazon-web-services-latin-america -
Category
Software
-
view
178 -
download
1
Transcript of Escalando primeiros 10 milhões de usuários
1997 - Reed Hastings and fellow software executive Marc Randolph co-found Netflix to offer online movie
rentals.
1999 - Netflix launches the subscription service, offering unlimited rentals for one low monthly subscription.
2000 - Netflix launches the personalized movie recommendation system that uses Netflix members’
ratings to accurately predict choices for all Netflix members.
2002 - Netflix makes its initial public offering (IPO on Nasdaq under the ticker “NFLX” with 600,000
members in the US.)
2005 - The number of Netflix members rises to 4.2 million.
2007 - Netflix introduces streaming, which allows members to instantly watch television shows
and movies on their personal computers.
2008 - Netflix partners with consumer electronics companies to stream on the Xbox 360, Blu-ray disc players and TV
set-top boxes.
2009 - Netflix partners with consumer electronics companies to stream on the PS3, Internet connected TVs and
other Internet connected devices.
2010 - Netflix is available on the Apple iPad, iPhone and iPod Touch, the Nintendo Wii, and other Internet connected
devices. Netflix launches its service in Canada.
2011 - Netflix launches throughout Latin America and the Caribbean.
2012 - Netflix became available in Europe including the United Kingdom, Ireland and in the Nordic Countries. Netflix
wins its first Primetime Emmy Engineering Award.
2013 - Netflix expanded to the Netherlands. Netflix garners 31 primetime Emmy nominations including outstanding
drama series, comedy series and documentary or nonfiction special for “House of Cards”, “Orange is the new black”,
and “The Square” respectively. House of Cards won three Primetime Emmy Awards. Netflix was the first internet TV
network nominated for the primetime Emmy.
2014 - In 2014 Netflix launched in 6 new countries in Europe (Austria, Belgium, France, Germany, Luxembourg and
Switzerland). Netflix wins 7 creative Emmy Awards for House of Cards and Orange is the New Black. Netflix now
has over 50 million members globallyhttps://pr.netflix.com/WebClient/loginPageSalesNetWorksAction.do?contentGroupId=10477
!
Regiões
Oregon
Ireland
Tokyo
N. California
Sao Paulo
Virginia
AWS GovCloud
Sydney
Singapore
Beijing
Frankfurt
Oregon
Ireland
Tokyo
N. California
Sao Paulo
Virginia
AWS GovCloud
Sydney
Singapor
e
Beijing
Zonas de Disponibilidade
Frankfurt
A escalabilidade é gerenciada pela
AWS ou pelo cliente?
Global AWSAmazon CloudFront, Amazon
Route53, Amazon IAM
Região AWSAmazon S3, Amazon
DynamoDB, Amazon ELB*
Zona de
DisponiblidadeCompartilhada
Amazon EC2, Amazon
ElastiCache**, Amazon RDS***
Fica, vai ter auto-scaling.
Mas na primeira arquitetura…
• Primeira Instância [t2.micro]
– Aplicação Web
– Banco de Dados
– Ferramentas Administrativas
– …
• Um Elastic IP
• DNS no Amazon Route 53
Amazon
Route 53
Usuário == 1
Instance
Elastic IP
Escalabilidade Vertical• Abordagem mais simples
• Familias de Instâncias
– High I/O
– High Memory
– High CPU
– High storage
– Cluster Compute
– Dense Storage
• Maior instância atualmente:
d2.8xlarge
36 RAM - 244 CPU - 24 x 2TB HDD
Características da Primeira Arquitetura
• Até centenas de usuários
• Ponto único de falhas
• Sem redundância ou alta disponibilidade
• Concorrência, Contenção e Carga
Segunda arquitetura, User > 10
Diferenças de Escalabilidade:
• Banco de Dados Relacional
– Escalabilidade Vertical
• Aplicação
– Escalabilidade Horizontal
Amazon
Route 53
Usuário
Web
Elastic IP
DB
Por que começar com SQL?
• Tecnologia estabelecida e madura
• Muito código, comunidade, livros, ferramentas,...
• Padrões difundidos de escalabilidade
Você provavelmente* não vai
“quebrar o banco”
nos primeiros 10M usuários.
* http://thedailywtf.com/articles/The-Query-of-Despair
O que precisaria começar com NoSQL?
• Dados não relacionais (grafos, documentos,…)
• Baixa* latência (<10ms)
• Requer (!= deseja) banco de dados sem
schema
• Grande* (> 10s TBs) volume de dados
• Ingestão de eventos complexos em tempo real
Terceira Arquitetura, User >100
Simplifique a administração do
banco de dados com o Amazon
Relational Database Service
• MySQL
• PostgresSQL
• Oracle
• MS SQL
• Amazon Aurora
Amazon
Route 53
Usuário
Web
Elastic IP
Amazon
RDS
Quarta Arquitetura, User > 1000
Alta Disponibilidade
• Elastic Load Balancer
• Instância Web
Redundante
– Em outra Availability
Zone
• RDS Multi-AZsa-east-1a sa-east-1b
Elastic Load
BalancingUsuário
s
Web Web
RDS DB
MestreRDS DB
Secundário
Esta arquitetura
pode suportar até
10K-100K
usuários
sa-east-1a sa-east-1b
Elastic Load
BalancingUsuário
s
Web Web
RDS DB
MestreRDS DB
Secundário
5a Arquitetura: Lendo de Réplicas
sa-east-1a sa-east-1b
Elastic Load
BalancingUsuário
s
Web Web Web Web
RDS DB
Mestre
RDS DB
SecundárioRDS DB
Replica
RDS DB
Replica
Web Web Web Web
RDS DB
Replica
RDS DB
Replica
INSERT SELECT
SYNC ASYNC
Aliviar a carga do servidor de aplicações e de banco
de dados:
a. Armazenar o conteúdo estático no Amazon S3
b. Mover as sessões HTTP no Amazon ElastiCache
ou Amazon DynamoDB
c. Distribuir o conteúdo estático e dinâmico pelo
Amazon CloudFront
Sexta Arquitetura:
6a. Conteúdo Estático no S3
InstânciasRDS DB Mestre
Elastic Load
Balancing
superapp.js
player34/avatar.jpg
api/leaderboard
Conteúdo Estático no S3
Instâncias
RDS DB
MestreElastic Load
Balancing
superapp.js
player34/avatar.jpg
api/leaderboard
App Cliente
html/js/css
Dados de Usuários
http://improve.dk/pushing-the-limits-of-amazon-s3-upload-performance/
Amazon ElastiCache
• Memcached e Redis como serviço
• Auto-recuperação (Self-healing)
• Baixíssima latência
• Caches locais com Memcached
• Caches replicados e persistentes com Redis
• O AWS Auto Discovery client simplifica o
redimensionamento do cluster sem impacto para
a aplicação
6b. Cache em Memória
InstânciasRDS DB
Mestre
Elastic Load
Balancing
App Cliente
html/js/css
Dados de Usuários
ElastiCache
* HTTP Sessions
* SELECT name FROM Planet
Amazon DynamoDB
• Serviço de Banco de Dados NoSQL
• Gerenciado pela AWS
• Vazão provisionada
• Latência baixa (~< 9ms) e previsível
• Tolerante à falhas
• Documentos em JSON
• Items de até 400KB
Cache em Memória
InstânciasRDS
DB
Mestre
Elastic Load
Balancing
App Cliente
html/js/css
Dados de Usuários
ElastiCache DynamoDB
* HTTP Sessions
• Votes, Activities, …
• CQRS
Distribuição de Conteúdo
• Cache “na borda” para entrega rápida
• Reduz carga na origem
• Streaming de video
• Custo mais baixo para tráfego interno
• Otimizações para Amazon EC2, Amazon S3, ELB e Amazon Route 53
Sexta Arquitetura:
InstânciasRDS
DB
MestreELB
App Cliente
html/js/css
Dados de
Usuários
ElastiCache
DynamoDB
CloudFront
Domingo Segunda Terça Quarta Quinta Sexta Sábado
Semana Típica no Amazon.com
Capacidade Provisionada?
Sétima Arquitetura:
Região
Zona de
Disponibilidade
Zona de
Disponibilidade
DNS
HTTP
STATIC
DYNAMIC
SQLNoSQL
CACHE
ALARM
Automatize TUDO!
• Implantação de novos ambientes
• Lançamentos
• Testes A/B
• Implantação Blue/Green
• Rollback de versões
• Gerenciamento de contas AWS
• Automação de configuração
• Análise de logs
Serviços de Gerenciamento de Aplicações
Alto Nível de Abstração Faça Você Mesmo
AWS
Elastic Beanstalk
AWS
OpsWorks
AWS
CloudFormationAmazon EC2
User >500k+
• Assegure monitoramento, metricas e logging
• Avalie qualitativamente a experiência do usuário
• Entenda as características de desempenho de
cada componente
http://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
Redução de acoplamento• Componentes Independentes
• Projete como “caixas pretas”
• Interações desacopladas
• Favoreça serviços gerenciados
Serviço A Serviço B
Serviço A Serviço B
RPC
Filas
Serviços para Aplicações
• Queuing
• Transcoding
• Search
• Databases
• Monitoring
• Metrics
• Logging
Amazon
CloudSearchAmazon SQSAmazon SNS
Amazon
Elastic
Transcoder
Amazon SWFAmazon SES
Serviços gerenciados para funcionalidades comums:
User >1mil+• Multi-AZ++
• Elastic Load Balancer entre camadas
• Auto Scaling com diversos grupos e alarmes
• Service Oriented Architecture e Microservices
• Distribuição eficiente de conteúdo
• Cache de consultas frequentes
Oitava???
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 53User
Amazon S3
Amazon
Cloudfront
DynamoDB
Amazon SQS
ElastiCache
Worker
Instance
Worker
Instance
Amazon
CloudWatch
Internal App
Instance
Internal App
InstanceAmazon SES
“Os serviços da AWS permitiram ao
time desenvolver soluções de
forma ágil, segura e escalável”
99Taxis é o maior aplicativo para
pedir táxis pelo celular no Brasil,
com mais de 2 milhões de
corridas/mês
Presente em mais de 300 cidades,
conta com mais de 100k taxistas
cadastrados (mais da metade da
frota nacional)
“por ser o mais
difundido serviço de
cloud, facilita a
contratação e aproveita
a expertise de uma
comunidade imensa”.
- Ricardo Lazaro,
Lead Developer
O Desafio
• Suportar rápido crescimento
de usuários e corridas,
mantendo baixo custo de
infraestrutura
• Manter/Monitorar o
ecossistema de aplicações
com procedimentos, métricas
e alarmes confiáveis
• Agilidade no desenvolvimento
de novas funcionalidades
Solução
Auto Scaling group Auto Scaling group Auto Scaling group
Elastic
Load
Balancing
Elastic
Load
Balancing
Elastic
Load
Balancing
SNS
SQS SQS SQS
5M > User < 10M
Contenção de escrita em
bancos de dados relacionais
• Federation ~ separar os bancos por função
• Sharding ~ separar os bancos por nós
• Bancos de Dados Não Relacionais
(Grafos, Documentos, Chave-Valor, …)
Federação de Dados
• Separação por função
• Dificulta consultas entre
funções
• Posterga a necessidade de
sharding ou NoSQL
• Não resolve problemas de
volume
ForumsDB
UsersDB
ProductsDB
Shards Horizontais
• Mais complexidade para a
aplicação
• ORM pode ajudar
• Sem limites para
escalabilidade
• Operação complexa
• Separação por função ou
chave
• SGBDR ou NoSQL
User ShardID
002345 A
002346 B
002347 C
002348 B
002349 A
Shard C
Shard B
Shard A
Adotando NoSQL
• Escalabilidade e/ou Abstração
• Avaliação Quantitativa
• Serviços Gerenciados (DynamoDB)
• Casos de uso:– Rankings, Leaderboards e Dashboards
– Ingestão de dados em tempo real
– Dados temporários
– Tabelas problemáticas
– Tabelas de metadados
Revisão Rápida
• Redundância Multi-AZ, em todas camadas
• Serviços Gerenciados - ELB, Amazon S3, Amazon
SNS, Amazon SQS, Amazon SWF, Amazon SES e outros.
• Prefira começar com SQL
• Otimize caches dentro e fora de sua
infraestrutura
• Automatize Tudo
Revisão Rápida
• Mantenha boas métricas, monitoramento e logs
• Decomponha camadas em serviços menores
• Use AutoScaling se e quando for adequado
• Reinvente seu negócio, não a roda
• Adote NoSQL se e quando for necessário
Por onde começar?
Comunidade no Brasil
http://www.awshub.com.br
Laboratórios Gratuitos
http://aws.amazon.com/training/intro_series/
Nível de Uso Gratuito
http://aws.amazon.com/free/
Treinamentos Presenciais
http://aws.amazon.com/training/
Canal do YouTube
https://www.youtube.com/user/AmazonWebServices
E depois?
Documentações dos Serviços
http://aws.amazon.com/documentation
Guias de Soluções
http://aws.amazon.com/whitepapers
Centrais de Arquitetura
http://aws.amazon.com/architecture
Programa de Startups
http://aws.amazon.com/start-ups