Escalando primeiros 10 milhões de usuários

78
São Paulo

Transcript of Escalando primeiros 10 milhões de usuários

São Paulo

Escalando para os primeiros

10 milhões de usuários

Julio M. Faerman

@jmfaerman

Como escalar

do usuário 1 ao 10M?

OBS: Sem desperdícios!

Em quanto tempo?

~3 Dias

~3500

instâncias

?

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

!

A escalabilidade é gerenciada

pela AWS ou pelo cliente?

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***

Qual a diferença entre uma

Zona de Disponibilidade e

um Data Center?

Qual a diferença entre uma

Zona de Disponibilidade e

um Data Center?

“Inovação em Escala na AWS”

Qual é o mínimo?

Vai ter Auto Scaling?

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

É melhor começar com

SQL ou NoSQL?

Prefira começar com SQL!

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

Instâncias EC2

oferecem até

244GiB RAM

http://yourdatafitsinram.com

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

Disponibilidade e

Tolerância a Falhas

Eficiência e Desempenho

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

?????

Melhor latência E melhor custo!

Usuário

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

E o Auto Scaling?!?

Domingo Segunda Terça Quarta Quinta Sexta Sábado

Semana Típica no Amazon.com

Domingo Segunda Terça Quarta Quinta Sexta Sábado

Semana Típica no Amazon.com

Capacidade Provisionada?

Novembro

Novembro no Amazon.com

Capacidade?

Novembro

Novembro no Amazon.com

Novembro no Amazon.com

76%

24%

Capacidade Provisionada

Novembro

Novembro no Amazon.com

Novembro

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

Métricas do

Host

Métricas

Agregadas

Análise de

Log

Percepção de

Desempenho

Decomposição

e

Desacoplamento

http://martinfowler.com/articles/microservices.html

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

• Email

• 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

Etapas Seguintes

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

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

10 milhões ou mais!

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

MK33BR2015

Obrigado! Perguntas?

Julio M. Faerman

@jmfaerman