Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhões de usuários

Post on 18-Dec-2014

981 views 5 download

description

Link para o vídeo gravado do webinar: https://vimeo.com/68720156

Transcript of Escalabilidade para sua solução na Nuvem da AWS de um para centenas de milhões de usuários

José Papo

AWS Tech Evangelist

@josepapo

Então, como ter escalabilidade na Nuvem?

Auto-Scaling???

Começando pelo básico primeiro

US-WEST (Oregon) EU-WEST (Ireland)

ASIA PAC (Tokyo)

US-WEST (N. California)

SOUTH AMERICA (Sao Paulo)

US-EAST (Virginia)

AWS GovCloud (US)

ASIA PAC

(Sydney)

Regiões

ASIA PAC

(Singapore)

US-WEST (Oregon) EU-WEST (Ireland)

ASIA PAC (Tokyo)

US-WEST (N. California)

SOUTH AMERICA (Sao Paulo)

US-EAST (Virginia)

AWS GovCloud (US)

ASIA PAC

(Sydney)

Zonas de Disponibilidade

ASIA PAC

(Singapore)

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Compute Storage

AWS Global Infrastructure

Database

App Services

Deployment & Administration

Networking

Amazon

CloudWatch AWS IAM AWS

CloudFormation

Amazon Elastic

Beanstalk AWS

Data

Pipeline

AWS

OpsWorks

Amazon

CloudSearch Amazon SQS Amazon

SNS

Amazon

Elastic

Transcoder

Amazon SWF Amazon SES

Amazon

DynamoDB

Amazon RDS

Amazon

ElastiCache

Amazon

RedShift

AWS Storage

Gateway

Amazon S3

Amazon

Glacier

Amazon

CloudFront Amazon

EC2

Amazon

EMR Amazon

VPC

Amazon

Route 53 AWS

Direct

Connect

Vamos então começar pelo dia

um, um usuário ( você! ):

Dia Um, Um Usuário

• Uma instancia EC2

– Stack completo • Aplicação Web

• Banco de Dados

• Gestão

• Etc.

• Um Elastic IP

• Route53 para DNS

EC2

Instance

Elastic IP

Amazon

Route 53 User

“Precisamos de uma máquina maior”

• Modo mais simples

• Pode alavancar uso de PIOPs

• Instancias High I/O

• Instancias High Memory

• Instancias High CPU

• Instancias High Storage

• Fácil de mudar tamanhos de

instancias

• Vai eventualmente ter limitações

hi1.4xlarge

m2.4xlarge

m1.small

“Precisamos de uma máquina maior”

• Modo mais simples

• Pode alavancar uso de PIOPs

• Instancias High I/O

• Instancias High Memory

• Instancias High CPU

• Instancias High Storage

• Fácil de mudar tamanhos de

instancias

• Vai eventualmente ter limitações

hi1.4xlarge

m2.4xlarge

m1.small

Dia Um, Um Usuário:

• Pode potencialmente atender

algumas centenas até alguns

milhares de usuários

dependendo da instancia,

complexidade da app e

tráfego

• Não tem failover

• Não tem redundância

• Todos os ovos no mesmo cesto

EC2

Instance

Elastic IP

Amazon

Route 53 User

Dia Um, Um Usuário:

• Pode potencialmente atender

algumas centenas até alguns

milhares de usuários

dependendo da instancia,

complexidade da app e

tráfego

• Não tem failover

• Não tem redundância

• Todos os ovos no mesmo cesto

EC2

Instance

Elastic IP

Amazon

Route 53 User

Dia Dois, Usuário >1:

Vamos primeiro

separar os recursos em

mais de uma instancia.

• Instancia Web

• Instancia de Banco Web

Instance

Database

Instance

Elastic IP

Amazon

Route 53 User

Gestão Própria Serviço Gerenciado

Banco de Dados

no Amazon EC2

Sua escolha de BD

no Amazon EC2

Bring Your Own

License (BYOL)

Amazon

DynamoDB

Serviço gerenciado

de BD NoSQL que

usa storage SSD

Amazon RDS

MS SQL Server,

Oracle ou MySQL

as a service

BYOL ou Licença

Incluída

Amazon

Redshift

Data Warehouse as

a service

distribuído e com

escala de petabytes

Opções de Bases de Dados

Que tecnologia usar?

SQL? NoSQL?

Depende do seu caso

de uso, mas…

Comece com aquilo que for

mais simples para você

Vamos começar com o

Amazon RDS nesse exemplo

Usuários >100:

Web

Instance

Elastic IP

RDS DB

Instance

Amazon

Route 53 User

Vamos primeiro separar

os recursos em mais de

uma instancia.

• Instancia Web

• Instancia de Banco

– Use o RDS para ter uma

vida mais simples!

Usuários > 1000:

Agora vamos endereçar

a falta de failover e

redundancia: • Elastic Load Balancer

• Mais uma Instancia Web

– Em outra Zona de Disponibilidade

• Habilitar RDS Multi-AZ

Web

Instance

RDS DB Instance

Active (Multi-AZ)

Availability Zone Availability Zone

Web

Instance

RDS DB Instance

Standby (Multi-AZ)

Elastic Load

Balancer

Amazon

Route 53 User

Escalando

horizontalmente e

verticalmente podemos

chegar bem longe ( 10s-100s de milhares )

Usuários >10ks-100ks:

RDS DB Instance

Active (Multi-AZ)

Availability Zone Availability Zone

RDS DB Instance

Standby (Multi-AZ)

Elastic Load

Balancer

RDS DB Instance

Read Replica

RDS DB Instance

Read Replica

RDS DB Instance

Read Replica

RDS DB Instance

Read Replica

Web

Instance

Web

Instance

Web

Instance

Web

Instance

Web

Instance

Web

Instance

Web

Instance

Web

Instance

Amazon

Route 53 User

Isso realmente nos levará

longe, mas queremos

também performance e

eficiência. Vamos limpar um

pouco mais

Mova a carga:

Diminua a carga nas

instancias Web e BD:

• Mova conteúdo estático da

instancia Web para o S3 e

CloudFront

• Mova estado/sessões e faça

cache do BD com ElastiCache

e/ou DynamoDB

Web

Instance

RDS DB Instance

Active (Multi-AZ)

Availability Zone

Elastic Load

Balancer

Amazon S3

Amazon

Cloudfront Amazon

Cloudfront Amazon

Cloudfront Amazon

Cloudfront Amazon

Cloudfront

Amazon

Cloudfront

Amazon

Route 53 User

ElastiCache

Cache Node ElastiCache

Cache Node ElastiCache

Cache Node

ElastiCache

DynamoDB

Agora que nossas camadas

Web e de BD estão mais

leves vamos voltar ao início

da nossa discussão…

Auto-Scaling!!!

Escalabilidade automática de

instancias de acordo com políticas

definidas

Trigger auto-scaling

policy

as-create-auto-scaling-group MyGroup

--launch-configuration MyConfig

--availability-zones us-east-1a

--min-size 4

--max-size 200

Auto-Scaling

Amazon

CloudWatch

Tráfego em Novembro na Amazon.com

November

Provisioned capacity

November

Tráfego em Novembro na Amazon.com

76%

24%

Provisioned capacity

November

Tráfego em Novembro na Amazon.com

November

Tráfego em Novembro na Amazon.com

Auto Scaling

É possível fazer ainda mais

melhorias deixando suas

camadas ainda mais leves e

orientadas a serviços

SOA = Service Oriented Architecture

Baixo acoplamente te liberta!

• Reduza o acoplamento para escalar ainda mais

– Componentes independentes

– Projete-os como uma caixa preta

– Desacople as integrações

– Prefira serviços já construídos com redundancia e

escalabilidade ao invés de contruir novamente

Controller A Controller B

Controller A Controller B

Q Q

Alto acomplamento

Use Amazon SQS como Buffers

Baixo acoplamento

Baixo acoplamento + SOA = Win!

Exemplos:

• Email

• Filas

• Transcoding de Vídeos

• Busca

• Bancos de Dados

• Monitoramento

• Métricas

• Logs

Amazon

CloudSearch Amazon SQS Amazon SNS

Amazon Elastic

Transcoder Amazon SWF

Amazon SES

Não reinvente a roda!

Baixo acoplamento + SOA

Exemplo

Imagine um site/app para

upload e compartilhamento

de fotos entre usuários

Exemplo usando filas de

mensagem SQS

S3 Bucket

For Ingest

User

SNS Topic

RRS S3

Bucket to

Serve

content to

CloudFront

S3 Bucket

For

originals

CloudFront

Download

Distribution

SQS Queue

Size for Thumbnail

SQS Queue

Size Image for

Mobile

SQS Queue

Size Image for Web

Auto scaling

Group

Instances

Auto scaling

Group

Instances

Auto scaling

Group

Instances

Exemplo usando serviço

Simple Workflow (SWF)

S3 Bucket

For Ingest

User

RRS S3

Bucket to

Serve

content to

CloudFront

S3 Bucket

For

originals

CloudFront

Download

Distribution

Auto scaling

Group

Instances

Auto scaling

Group

Instances

Auto scaling

Group

Instances

SWF

Instance running

decider

Usuários >1milhão+:

Chegar em um milhão e além requer uma arquitetura que utilize os recursos vistos anteriormente:

• Multi-AZ

• Elastic Load Balancer entre as camadas

• Auto-Scaling

• Service oriented architecture

• Servir conteúdo estático com as soluções certas ( S3/CloudFront )

• Cache e réplicas de bases de dados

• Mover estado para fora das camadas com auto-scaling

Usuários >1milhão+:

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

Próximos passos

Usuários > 10milhões+:

Você provavelmente encontrará dificuldades com sua

base de dados nas escritas no BD Master.

Como resolver?

• Sharding ( separar conjuntos de dados em mais de

uma base de dados )

• Mover funcionalidades para outros tipos de BDs (

NoSQL )

Sharding

• Mais complexo para a

camada de aplicação

• Complexidade

operacional

• Shard por função ou

chave

User ShardID

002345 A

002346 B

002347 C

002348 B

002349 A

A

B

C

Mover funcionalidades para NoSQL

• Soluções NoSQL usualmente possuem

escalabilidade horizontal transparente

• Use serviços gerenciados como o

DynamoDB

DynamoDB

Você também poderá ter problemas relacionados a

velocidade ou performance.

• Tenha soluções de monitoração/métricas/logs

– Se possível, use soluções prontas! ( SaaS )

• Preste atenção no que seus usuários estão dizendo

• Verifique a performance de cada serviço/componente

Usuários > 10milhões+:

HOST

LEVEL

METRICS

AGGREGATE

LEVEL

METRICS

LOG

ANALYSIS

EXTERNAL

SITE

PERFORMANCE

AWS Marketplace & Partners AWS podem ajudar

Saiba mais em: aws.amazon.com/marketplace

Usuários > 10 milhões+:

Gerenciar sua infraestrutura será fundamental com

número de instancias e recursos utilizados em

crescimento. Use ferramentas para automatizar tarefas.

• Ferramentas da AWS

• Ferramentas de gestão de configuração

• Análise automatizada de logs e ações de usuários

Soluções de Gestão de Aplicações da AWS

Elastic Beanstalk OpsWorks CloudFormation EC2

Conveniência Controle

Serviços de Alto Nível Faça você mesmo

Host Based Configuration Management

Dois grandes players: – Opscode Chef

– PuppetLabs Puppet

• São parecidos em recursos

• Use HBCM junto com uma das soluções da AWS (OpsWorks integra com Chef e CloudFormation com Chef ou Puppet)

• Mais difícil gerenciar muitos recursos computacionais sem HBCM

Breve revisão sobre

escalabilidade

Pense em redundância em

todas as camadas

Multi-AZ na sua infraestrutura

Faça uso de serviços prontos

( ELB, S3, SNS, SQS, SWF,

SES, etc )

Use SQL ou NoSQL de

acordo com os requisitos de

seu negócio

Crie uma arquitetura

orientada a serviços ( SOA )

Use Auto-scaling quando

precisar crescer ou diminuir

automaticamente

Use ferramentas de automação

sempre que possível

Tenha soluções de

métricas/monitoração/logs

Não reinvente a roda!

Pensando nesses elementos

você certamente poderá

atender dezenas e até centenas

de milhões de usuários!

aws.amazon.com/pt/architecture

Saiba mais em…

RECURSOS TÉCNICOS

awshub.com.br

OBRIGADO! aws.typepad.com/brasil

slideshare.net/AmazonWebServicesLATAM

José Papo

AWS Tech Evangelist

@josepapo