Share
Embed
Transcript
71 slides
-
Escalando para os primeiros milhões de usuários Julio M.
Faerman @jmfaerman TDC Florianópolis 2016 -
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 globally https://pr.netflix.com/WebClient/loginPageSalesNetWorksAction.do?contentGroupId=10477 -
A escalabilidade é gerenciada pela AWS ou pelo cliente?
Global AWS Amazon CloudFront, Amazon Route53, Amazon IAM Region AWS Amazon S3, Amazon DynamoDB, Amazon ELB* Availability Zone Compartilhada Amazon EC2, Amazon ElastiCache**, Amazon RDS*** -
Uma 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 -
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://yourdatafitsinram.com Instância vCPU RAM Storage Cost* t2.nano 5%+ 0.5 EBS
$0.0065 t2.large 2*60%+ 8 EBS $0.104 m4.large 2 6.5 EBS $0.12 m4.4xlarge 16 64 EBS $0.958 c4.4xlarge 16 30 EBS $0.958 m4.10xlarge 40 160 EBS $2.394 g2.8xlarge 32+GPU 60 240 SSD $2.60 r3.8xlarge 32 244 640G SSD $2.66 d2.4xlarge 16 122 24T HDD $2.76 d2.8xlarge 36 116 48T HDD $5.52 i2.8xlarge 32 244 6.4T SSD $6.82 x1.??? 100+ 2TB ??? ??? -
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-AZ sa-east-1a sa-east-1b Elastic Load Balancing Usuário s Web Web RDS DB Mestre RDS DB Secundário -
Esta arquitetura pode suportar até 10K-100K usuários sa-east-1a sa-east-1b
Elastic Load Balancing Usuário s Web Web RDS DB Mestre RDS DB Secundário -
5a Arquitetura: Lendo de Réplicas sa-east-1a sa-east-1b Elastic Load Balancing
Usuários Web Web Web Web RDS DB Mestre RDS DB Secundário RDS 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âncias RDS DB Mestre Elastic
Load Balancing superapp.js player34/avatar.jpg api/leaderboard -
Conteúdo Estático no S3 Instâncias RDS DB Mestre Elastic Load
Balancing superapp.js player34/avatar.jpg api/leaderboard App Cliente html/js/css Dados de Usuários -
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âncias RDS 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âncias RDS 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âncias RDS DB Mestre ELB 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 SQL NoSQL CACHE ALARM -
Arquitetura[s] Serverless Região STATIC Lambda Function API Gateway DynamoDB Table
S3 Bucket CloudFront Distribution Route53 Hosted Zone DYNAMIC -
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 CloudFormation Amazon 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 -
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 • Email • Queuing • Transcoding •
Search • Databases • Monitoring • Metrics • Logging Amazon CloudSearch Amazon SQS Amazon SNS Amazon Elastic Transcoder Amazon SWF Amazon 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 53 User Amazon S3 Amazon Cloudfront DynamoDB Amazon SQS ElastiCache Worker Instance Worker Instance Amazon CloudWatch Internal App Instance Internal App Instance Amazon SES -
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 quando for adequado • Aproveite os serviços gerenciados • Adote NoSQL se e quando for necessário • Reinvente seu negócio, não a roda