Escalando para os primeiros 10 milhoes de usuarios

Post on 07-Jan-2017

619 views 5 download

Transcript of Escalando para os primeiros 10 milhoes de usuarios

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Ari Dias, Sr Mgr, Partner Solutions Architect

Escalando para os primeiros

milhões de usuários1011

© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Ari Dias, Sr Mgr, Partner Solutions Architect • Solutions Architect (2012)

AWS Summit 2016

WHO

ARE

YOU?

Como escalar a sua aplicação?

http://i.telegraph.co.uk/multimedia/archive/02674/CLIMBER_2674482b.jpg

Muita coisa para

ler!

Lugar de onde

você não

deveria

começar!

Auto Scaling

…é uma ferramenta e um destino.

Não é uma única solução que

resolverá todos os problemas.

Então, por onde devemos começar?

Vamos começar pelo

básico…

US-WEST (Oregon)

EU (Ireland)

ASIA PACIFIC

(Tokyo)

US-WEST (N. California)

SOUTH

AMERICA (Sao

Paulo)

US-EAST (N. Virginia)

AWS GOVCLOUD (US)

ASIA PACIFIC

(Sydney)

ASIA PACIFIC

(Singapore)

CHINA (Beijing)

RegiõesEU (Frankfurt)

INDIA (2016)

US-WEST (Oregon)

EU (Ireland)

ASIA PACIFIC

(Tokyo)

US-WEST (N. California)

SOUTH

AMERICA (Sao

Paulo)

US-EAST (N. Virginia)

AWS GOVCLOUD (US)

ASIA PACIFIC

(Sydney)

ASIA PACIFIC

(Singapore)

CHINA (Beijing)

Zonas de DisponibilidadeEU (Frankfurt)

INDIA (2016)

Edge locations

TECHNICAL &

BUSINESS

SUPPORT

Account

Management

Support

Professional

Services

Solutions

Architects

Training &

Certification

Security

& Pricing

Reports

Partner

Ecosystem

AWS

MARKETPLACE

Backup

Big Data

& HPC

Business

Apps

Databases

Development

Industry

Solutions

Security

APPLICATION

SERVICES

Queuing

Notifications

Search

Orchestration

Email

ENTERPRISE

APPS

Virtual

Desktops

Storage

Gateway

Sharing &

Collaboration

Email &

Calendaring

Directories

HYBRID CLOUD

MANAGEMENT

Backups

Deployment

Direct

Connect

Identity

Federation

Integrated

Management

SECURITY &

MANAGEMENT

Virtual Private

Networks

Identity &

Access

Encryption

KeysConfiguration Monitoring Dedicated

INFRASTRUCTURE

SERVICES

RegionsAvailability

ZonesCompute Storage

DatabasesSQL, NoSQL,

CachingCDNNetworking

PLATFORM

SERVICES

App

Mobile

& Web

Front-end

Functions

Identity

Data Store

Real-time

Development

Containers

Source

Code

Build

Tools

Deployment

DevOps

Mobile

Sync

Identity

Push

Notifications

Mobile

Analytics

Mobile

Backend

Analytics

Data

Warehousing

Hadoop

Streaming

Data

Pipelines

Machine

Learning

TECHNICAL &

BUSINESS

SUPPORT

Account

Management

Support

Professional

Services

Solutions

Architects

Training &

Certification

Security

& Pricing

Reports

Partner

Ecosystem

AWS

MARKETPLACE

Backup

Big Data

& HPC

Business

Apps

Databases

Development

Industry

Solutions

Security

APPLICATION

SERVICES

Queuing

Notifications

Search

Orchestration

Email

ENTERPRISE

APPS

Virtual

Desktops

Storage

Gateway

Sharing &

Collaboration

Email &

Calendaring

Directories

HYBRID CLOUD

MANAGEMENT

Backups

Deployment

Direct

Connect

Identity

Federation

Integrated

Management

SECURITY &

MANAGEMENT

Virtual Private

Networks

Identity &

Access

Encryption

KeysConfiguration Monitoring Dedicated

INFRASTRUCTURE

SERVICES

RegionsAvailability

ZonesCompute Storage

DatabasesSQL, NoSQL,

CachingCDNNetworking

PLATFORM

SERVICES

App

Mobile

& Web

Front-end

Functions

Identity

Data Store

Real-time

Development

Containers

Source

Code

Build

Tools

Deploymen

t

DevOps

Mobile

Sync

Identity

Push

Notifications

Mobile

Analytics

Mobile

Backend

Analytics

Data

Warehousing

Hadoop

Streaming

Data

Pipelines

Machine

Learning

Solutions

Architects

Solutions Architects

APPLICATION

SERVICES

Queuing

Notifications

Search

Orchestration

Email

SECURITY &

MANAGEMENT

Virtual Private

Networks

Identity &

Access

Encryption

KeysConfiguration Monitoring Dedicated

INFRASTRUCTURE

SERVICES

RegionsAvailability

ZonesCompute Storage

DatabasesSQL, NoSQL,

CachingCDNNetworking

PLATFORM

SERVICES

App

Mobile

& Web

Front-end

Functions

Identity

Data Store

Real-time

Development

Containers

Source

Code

Build

Tools

Deployment

DevOps

Mobile

Sync

Identity

Push

Notifications

Mobile

Analytics

Mobile

Backend

Analytics

Data

Warehousing

Hadoop

Streaming

Data

Pipelines

Machine

Learning

Os bloquinhos para compor a solução

Serviços em alta disponibilidade e

tolerante a falhas

Alta disponibilidade

com a arquitetura

correta

Amazon CloudFront

Amazon Route 53

Amazon S3

Amazon DynamoDB

Elastic Load Balancing

Amazon EFS

AWS Lambda

Amazon SQS

Amazon SNS

Amazon SES

Amazon SWF

Amazon EC2

Amazon EBS

Amazon RDS

Amazon VPC

Vamos começar com …

1 usuário

Você

1 Usuário

• Amazon Route 53 para DNS

• Um único Elastic IP

• Uma única instância EC2

• Com tudo instalado

• Aplicação web

• Banco de dados

• Gerenciamento

• Etc …

Instância

Amazon

EC2

Elastic IP

UsuárioAmazon

Route 53

“Vamos precisar de uma máquina maior”

• Estratégia básica

• Pode se basear em PIOPS

• I/O grande

• Memória grande

• CPU grande

• Disco grande

• Fácil de alterar a capacidade da

instância

• Eventualmente vai chegar no limite!

c4.8xlarge

m3.2xlarge

t2.micro

“Vamos precisar de uma máquina maior”

• Estratégia básica

• Pode se basear em PIOPS

• I/O grande

• Memória grande

• CPU grande

• Disco grande

• Fácil de alterar a capacidade da

instância

• Eventualmente vai chegar no limite!

c4.8xlarge

m3.2xlarge

t2.micro

1 Usuário

• Dependendo da

aplicação e da carga

poderemos chegar a

centenas ou milhares de

usuários

• Não há tolerância à falha

• Sem redundânciaInstância

EC2

Elastic IP

UsuárioAmazon

Route 53

1 Usuário

• Dependendo da

aplicação e da carga

poderemos chegar a

centenas ou milhares de

usuários

• Não há tolerância à falha

• Sem redundânciaInstância

EC2

Elastic IP

UsuárioAmazon

Route 53

Usuários >1

Usuários > 1

Primeiro, vamos separar

alguns componentes em mais

de uma instância:

• Aplicação web

• Banco de dados

Usar um serviço

gerenciado de banco de

dados?

Instância

Web

Instância

de Banco

de Dados

Elastic IP

UsuárioAmazon

Route 53

Você gerencia Gerenciado pela AWS

Banco de dados

em EC2

Você é livre para

usar o banco que

escolher

A gestão das

licenças é sua

Amazon

DynamoDB

Banco de dados

NoSQL gerenciado

e executando sobre

SSDs

Escalabilidade

homogênea

Sem administração

Amazon RDS

Microsoft SQL Server

Oracle

MySQL

PostgreSQL

MariaDB

Amazon Aurora

Sua licença ou já

incluída

Amazon

Redshift

DW para

processamento

paralelo

Escala de Petabytes

Rápido, poderoso e

facilmente escalável

Opções de Banco de Dados

Você gerencia Gerenciado pela AWS

Banco de dados

em EC2

Você é livre para

usar o banco que

escolher

A gestão das

licenças é sua

Amazon

DynamoDB

Banco de dados

NoSQL gerenciado

e executando sobre

SSDs

Escalabilidade

homogênea

Sem administração

Amazon RDS

Microsoft SQL Server

Oracle

MySQL

PostgreSQL

MariaDB

Amazon Aurora

Sua licença ou já

incluída

Amazon

Redshift

DW para

processamento

paralelo

Escala de Petabytes

Rápido, poderoso e

facilmente escalável

Opções de Banco de Dados

Amazon Aurora

• Disco escala automaticamente até 64 TB

• Até 15 réplicas de leitura

• Backup incremental no Amazon S3

• Replicado em 3 AZs

• Compatível com MySQL

To NoSQL, or not to NoSQL?

Alguém pode não gostar,

mas…

Comece com banco de dados SQL

Por que começar com SQL?

• Tecnologia madura e bem posicionada.

• Muito código disponível, comunidades, livros e

ferramentas.

• Você não vai quebrar o seu banco SQL nos seus

primeiros 10 milhões de usuários. Não, não vai.

• Estratégias de escala já bem conhecidas.

* A não ser que você esteja fazendo algo SUPER peculiar com os dados ou você tenha um

volume de dados massivo… mas ainda o banco SQL terá um lugar na sua arquitetura.

AH HA! Você

disse massivo?”

Eu terei volumes

massivos de

dados!

> 5 TB em um ano?

Workload de dados incrivelmente

intensos??

OK!Você pode precisa de NoSQL!

Por que você pode precisar de um NoSQL?

• Aplicações de baixa latência

• Metadata-driven

• Dados não estruturados (não relacional)

• Precisa de um modelo de dados sem esquemas*

• Quantidade expressiva de dados (TB+)

• Necessidade de ingestão rápida de dados (milhares de

registros/sec)

*Precisa!= “É mais fácil desenvolver sem schemas”

Usuários >100

Usuários >100

Primeiro, vamos separar

nosso servidor em dois

componentes:

• Aplicação web

• Banco de dados

Use Amazon RDS para

facilitar a sua vida Instância

Web

Elastic IP

Instância

RDS DB

UsuárioAmazon

Route 53

Usuários >1000

Usuários >1000

Agora, vamos adicionar

tolerância à falhas e

redundância:

Mais uma instância web

• Em outra Zona de

disponibilidade

RDS Multi-AZ

Elastic Load Balancing (ELB)

Web

Instance

RDS DB Instance

Active (Multi-AZ)

Availability Zone Availability Zone

Web

Instance

RDS DB Instance

Standby (Multi-AZ)

ELB

Balancer

UserAmazon

Route 53

Elastic Load Balancing

• Em alta disponibilidade

• 1 - 65535

• Health checks

• Redirecionamento por

sessões

• SSL

• Monitoramento

• Logs

horizontal

ve

rtic

al

Usuários > 10,000s–100,000s

RDS DB Instância

Ativa (Multi-AZ)

Availability Zone Availability Zone

RDS DB Instância

Standby (Multi-AZ)

ELB

Balancer

RDS DB

Read Replica

RDS DB

Read Replica

RDS DB

Read Replica

RDS DB

Read Replica

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 53Usuário

E quanto à performance e

eficiência?

Diminuindo a carga…

RDS DB Instance

Active (Multi-AZ)

Availability Zone

ELB

Balancer

Amazon S3

Amazon

CloudFront

Amazon

Route 53User

Mova algum workload

Web Instances

• Conteúdo estático para o Amazon S3 e Amazon CloudFront

Mova…

Amazon Simple Storage Service (S3)

• Storage de objetos

• Altamente durável

• Muito bom para objetos

estáticos

• “Escala infinita”

• Objectos até 5 TB

• Criptografia opcional

Amazon CloudFront

• Cache de conteúdo para entrega

rápida

• Diminui a carga na origem

• Conteúdo estático e dinâmico

• Streaming de vídeos

• Certificados SSL

• Baixo TTLs (tão baixo qnt 0)

• Otimizado para AWS

Amazon CloudFront

Res

po

nse

Tim

e

Serv

er L

oad

Res

po

nse

Ti

me

Serv

er

Load

Res

po

nse

Ti

me

Serv

er

Load

Sem CDN CDN para

Conteúdo

Estático

CDN para

Conteúdo

Estático e

Dinâmico

020406080

8:0

0 A

M

9:0

0 A

M

10:0

0 A

M

11:0

0 A

M

12:0

0 P

M

1:0

0 P

M

2:0

0 P

M

3:0

0 P

M

4:0

0 P

M

5:0

0 P

M

6:0

0 P

M

7:0

0 P

M

8:0

0 P

M

9:0

0 P

MVo

lum

e d

e

da

do

s (

Gb

ps

)

Mova algum workload

• Conteúdo estático no Amazon S3

e Amazon CloudFront

Move…

• Sessão/estado para o Amazon

DynamoDB

• Cache dos dados no Amazon

ElastiCacheRDS DB Instance

Ativo (Multi-AZ)

Availability Zone

ELB

Balancer

Amazon S3

Amazon

CloudFront

Amazon

Route 53Usuário

ElastiCache DynamoDB

Instâncias Web

Amazon DynamoDB

• Banco de dados NoSQL gerenciado

• Throughput provisionado

• Rápido e previsível

• Distribuído e tolerante a falhas

• Suporte à JSON

• Itens até 400 KB

Amazon Elasticache

• Memcached ou Redis gerenciado

• Escala de 01 a vários nós

• Self-healing (substitui instâncias com

problemas)

• Single AZ para nó de Memcache

• Possível Multi-AZ com Redis

Mova algum workload

Move…

RDS DB Instância

Ativa (Multi-AZ)

Availability Zone

ELB

Balancer

Amazon S3

Amazon

CloudFrontUsuário

ElastiCache DynamoDB

Instâncias Web

Amazon

Route 53

• Conteúdo estático no Amazon S3

e Amazon CloudFront

• session/estado para o Amazon

DynamoDB

• Cache dos dados no Amazon

ElastiCache

• Conteúdo dinâmico para o Cloud

Front

Agora que a camada web está

mais leve, vamos voltar ao

começo da nossa conversa…

Auto Scaling!

Redimencionamento automático da quantidade de servidores

Define o tamanho mínimo e máximo para a quantidade de servidores

Use as métricas do CloudWatch para ativar o redimencionamento

Use instâncias EC2 no modelo de On-demand ou Spot

aws autoscaling create-auto-scaling-group

--auto-scaling-group-name MeuGrupo

--launch-configuration-name MinhaConfig

--min-size 4

--max-size 200--availability-zones us-west-2c, us-west-2b

Auto Scaling

Domingo Segunda Terça Quarta Quinta Sexta Sábado

Típico tráfego semanal da Amazon.com

Domingo Segunda Terça Quarta Quinta Sexta Sábado

Capacidade Provisionada

Típico tráfego semanal da Amazon.com

Novembro

Tráfego em Novembro da Amazon.com

Capacidade Provisionada

Novembro

Tráfego em Novembro da Amazon.com

76%

24%Novembro

Capacidade Provisionada

Tráfego em Novembro da Amazon.com

Novembro

Tráfego em Novembro da Amazon.com

Com o Auto Scaling

você consegue isso!

= um usuário

= 100,000 usuários= 1,000,000 usuários

Usuários >500,000

Users > 500,000+

Availability Zone

Amazon

Route 53User

Amazon S3

Amazon

CloudFront

Availability Zone

ELB

Balancer

DynamoDB

RDS DB Instance

Read Replica

Web

Instance

Web

Instance

Web

Instance

ElastiCache RDS DB Instance

Read Replica

Web

InstanceWeb

Instance

Web

Instance

ElastiCacheRDS DB Instance

Standby (Multi-AZ)RDS DB Instance

Active (Multi-AZ)

Users > 500,000+

Availability Zone

Amazon

Route 53User

Amazon S3

Amazon

CloudFront

Availability Zone

ELB

Balancer

DynamoDB

RDS DB Instance

Read Replica

Web

Instance

Web

Instance

Web

Instance

ElastiCache RDS DB Instance

Read Replica

Web

InstanceWeb

Instance

Web

Instance

ElastiCacheRDS DB Instance

Standby (Multi-AZ)RDS DB Instance

Active (Multi-AZ)

Use automação

Gestão de aplicações com serviços da AWS

Conveniência Controle

Serviços de alto nível Faça você mesmo

AWS

Elastic Beanstalk

AWS

OpsWorks

AWS

CloudFormationAmazon EC2

AWS CodeDeploy

• Deploys seu código para uma “frota” de instâncias EC2

• 1 – 10,000s de instâncias

• Agenda updates automaticamente (múltipas AZs)

• Grupo de Deployment e Aplicação descritos em

arquivos no formato YAML

• Pode referencias Auto Scaling Groups

• Console de Gerenciamento da AWS, CLI, ou APIs

• Pode ser usado com receitas de Chef ou scripts Puppet

Usuários >500,000+

• Monitoramento, métricas e logs

• Se você não vai construir use de

terceiros (SaaS)

• O que os clientes estão dizendo?

• Tente obter o máximo de performance

de cada serviço ou componente

Métricas

Agregadas

Análise de

logs

Análise de

performance

externa

Métrica de

servidores

Ainda há mais melhorias

possíveis se quebrarmos a

aplicação em serviços

SOA

O que é isto?

Muita coisa para

ler!

Não é o lugar

para começar

Aqui é onde vc

deve começar!

Muita coisa para

ler!

Não é o lugar

para começar

SOAing

Mais serviços na mesma camada:

• Trate-os separadamente e

escale de maneira independente.

A Amazon e a AWS fazem isso o tempo

todo!

Oferece flexibilidade e mais compreensão

sobre cada componente.

Baixo acoplamento + SOA = vitória!

Mas não reinvente a roda

• Email

• Filas

• Transcodificação

• Busca

• Banco de dados

• Monitoração

• Métricas

• Logging

• Computação

Amazon

CloudSearchAmazon SQSAmazon SNS

Amazon Elastic

TranscoderAmazon SWFAmazon SES

AWS Lambda

• Confiável (Multi-AZ)

• Escalável (# mensages ilimitado)

• Seguro (autenticação por fila)

• Simples (APIs extremamente simples)

Application Services – Amazon SQS

SQS

messages

Get

Message

InstancePut

MessageInstance

Amazon SNS Topic

Publish

Notification

Queue Is Subscribed

to Topic

Compute / Platform – AWS Lambda

• Funções acionadas por

eventos

• JavaScript, Java… e Python

• Gerenciado pela AWS

• Escalabilidade implícita S3 Bucket

Lambda

Push: Event

Notification

DynamoDB

Pull: DynamoDB

Stream

Kinesis

Pull:

Kinesis Stream

Desacoplamento te liberta!

Quanto menos acoplamento, melhor eles escalam

• Componentes independentes

• Desenhe os componentes como caixa preta

• Desacople as interações

• Prefira o uso de serviços com tolerância e redundância

S3 Bucket

Lambda

Push: Event

Notification

DynamoDB

Pull: DynamoDB

Stream

Amazon

Kinesis

Pull:

DynamoDB Stream

SQS

messages

Get

Message

InstancePut

MessageInstance

Amazon SNS Topic

Publish

Notification

Queue Is Subscribed

to Topic

Usuários>1,000,000

Usuários >1 milhão+

Com um milhão de usuários vamos precisar de um poucode cada coisa:

• Multi-AZ

• Elastic Load Balancing entre camadas

• Auto Scaling

• Service Oriented Architecture

• Forneça conteúdo de maneira inteligente (Amazon S3/CloudFront )

• Adicionando um cache na frente do banco de dados

• Mova os estados das camadas de auto scaling

Users >1 million+

RDS DB Instance

Active (Multi-AZ)

Availability Zone

ELB

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

Instance Amazon SES

Lambda

O próximo grande passo

Usuários >10,000,000

Usuários >5 milhões - 10 milhões

Você deve começar a ter um gargalo no banco de dados, principalmente na escrita.

Como você resolve isso?• Federação — separe os bancos por função

• Sharding — separe um dataset entre vários servidores

• Mova algumas funcionalidades para outros tipos de banco (NoSQL, Graph)

Federação de BD

• Separe por função

• Mais difícil de fazer com queries cross-function

• E não funciona para tabelas gigantescas

Foruns DB

Usuários

DB

Produtos

DB

Escalabiliade com Shards• Mais complicado para a aplicação

• Sem limite para escalabilidade

• Complexidade na operação

• Shard por função ou por chaves

• RDBMS ou NoSQL

User ShardID

002345 A

002346 B

002347 C

002348 B

002349 A

CBA

Use NoSQL

• Mesma idéia da federação

• Use serviços gerenciados da AWS como o DynamoDB

Alguns casos de uso:• Placar de jogos online

• Ingestão de logs ou clickstream

• Dados temporários (carrinho de compras)

• Dados quentes

• Tabela para metadado ou pesquisa rápidaDynamoDB

Revisão rápida

Revisão

• Use Multi-AZ

• Faça uso de serviços que escalam — ELB, Amazon S3,

Amazon SNS, Amazon SQS, Amazon SWF, Amazon SES, e

outros.

• Redundância em todos os níveis.

• Comece com SQL. Sério!

• Faça cache dentro e fora da sua infra.

• Use ferramentas para automação.

Revisão

• Tenha boas métricas, monitoramento e logs

• Divida a mesma camada em serviços

• Use Auto Scaling quando sua aplicação estive pronta

• Não reinvente a roda

• Mova para NoSQL se e quando fizer sentido

Adotando estas práticas

devemos conseguir

facilmente atender mais de

11 milhões de usuários.

Escalar sem limites

• Plataforma de comércio eletrônico

SaaS.

• + 1000 lojas

• Estamos em 14 países

• + 12 milhões de pedidos em 2015

• + 2 bilhões de pageviews em 2015

“Vamos focar no

objetivo da nossa

empresa, nós

desenvolvemos

software.Infraestrutura não pode

gastar nosso tempo.”

- Marcelo Couto

O Desafio

• Ter um sistema com uma infra-estrutura escalável para atendertodos os clientes. SaaS.

• Transformar um sistema grande em microserviços

• Conseguir lançar versões sem downtime

• Fazer o lançamento de versões ser frequente.

Solução

• Mais de 40 serviços, cada um com a sua infraestrutura e repositórios de dados.

• Todos os ambientes monitorados e com alarmes criados.

• 1130 versões lançadas nosultimos 30 dias.

AWS Re-Invent 2015 GameDay

Para o infinito...

Usuários >11 milhões

Fazer iterações sobre os

padrões discutidos aqui lhe

dará capacidade para

crescer para mais de 100

milhões de usuários.

• Ajuste fino da sua aplicação

• Mais SOA

• Ampliando de Multi-AZ para multi-região

• Criar soluções mais personalizadas

• Análise profunda da pilha da sua aplicação

Usuários >11 milhões

Próximos passos?

Leia!

aws.amazon.com/documentation

aws.amazon.com/architecture

aws.amazon.com/start-ups

Comece a usar AWS agora!

aws.amazon.com/free/

Pergunte para:

forums.aws.amazon.com

aws.amazon.com/premiumsupport/

Sua representante dentro da AWS

A Solutions Architect

Remember to complete

your evaluations!Por favor, não se esqueça

de responder a pesquisa!

Thank You!