escalando para sus primeros 10 millones de usuarios

62
Escalando para sus primeros 10 Millones de usuarios Henry Alvarado Solutions Architect, AWS Colombia Experience Day Cali

Upload: amazon-web-services-latam

Post on 12-Apr-2017

10 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Escalando para sus primeros 10 millones de usuarios

Escalando para sus primeros 10 Millones de usuarios

Henry AlvaradoSolutions Architect, AWS Colombia

Experience Day Cali

Page 2: Escalando para sus primeros 10 millones de usuarios

Entonces, cómo escalo?

Page 3: Escalando para sus primeros 10 millones de usuarios
Page 4: Escalando para sus primeros 10 millones de usuarios

Demasiado para leer

Page 5: Escalando para sus primeros 10 millones de usuarios

No es aquí donde se quiere empezar

Demasiado para leer

Page 6: Escalando para sus primeros 10 millones de usuarios

Auto Scaling es una herramienta y un objetivo. No es una única cosa que

arregla todo.

Page 7: Escalando para sus primeros 10 millones de usuarios

Qué necesitamos primero?

Page 8: Escalando para sus primeros 10 millones de usuarios

Algunos conceptos básicos…

Page 9: Escalando para sus primeros 10 millones de usuarios

AWS Global Infrastructure

16 Regions42 Availability Zones70 Edge Locations

Page 10: Escalando para sus primeros 10 millones de usuarios

Service Breadth & DepthTECHNICAL &

BUSINESS SUPPORT

Account Management

Support

Professional Services

Solutions Architects

Training & Certification

Security & Pricing Reports

Partner Ecosystem

AWSMARKETPLACE

Backup

Big Data& HPC

Business Apps

Databases

Development

IndustrySolutions

Security

MANAGEMENTTOOLS

Queuing

Notifications

Search

Orchestration

Email

ENTERPRISEAPPS

VirtualDesktops

StorageGateway

Sharing &Collaboration

Email &Calendaring

Directories

HYBRID CLOUDMANAGEMENT

Backups

Deployment

DirectConnect

IdentityFederation

IntegratedManagement

SECURITY &MANAGEMENT

Virtual PrivateNetworks

Identity &Access

EncryptionKeys Configuration Monitoring Dedicated

INFRASTRUCTURESERVICES

Regions AvailabilityZones Compute

StorageO b j e c t s, B l o c k s , F i l e s

DatabasesSQL, NoSQL, Caching

CDNNetworking

PLATFORMSERVICES

App

Mobile & WebFront-end

Functions

Identity

Data Store

Real-time

Development

Containers

SourceCode

BuildTools

Deployment

DevOps

Mobile

Sync

Identity

PushNotifications

MobileAnalytics

MobileBackend

Analytics

DataWarehousing

Hadoop

Streaming

DataPipelines

MachineLearning

Page 11: Escalando para sus primeros 10 millones de usuarios

AWS building blocksServicios altamente disponibles y tolerante a fallas desde su concepción

Servicios altamente disponibles con una arquitectura correcta

Amazon CloudFront

Amazon Route53

Amazon S3

Amazon DynamoDB

Elastic Load Balancing

Amazon SQS

Amazon SNS

Amazon SES

Amazon SWF

Amazon EC2 Amazon Elastic Block Store Amazon RDS Amazon VPC

Page 12: Escalando para sus primeros 10 millones de usuarios

Entonces, empecemos desde el día 1 con el primer usuario

(usted)

Page 13: Escalando para sus primeros 10 millones de usuarios

Día 1, usuario 1

• Una única instancia Amazon EC2– El stack completo en este host

• Aplicación web• Base de datos• Administración• Entre otros…

• Una única IP pública• Amazon Route 53 para DNS

Amazon EC2 instance

Elastic IP

Amazon Route 53

User

Page 14: Escalando para sus primeros 10 millones de usuarios

“Vamos a necesitar una caja mas grande”

• Solución más simple• Posibilidad de usar PIOPS • Instancias para alto I/O• Instancias con alta memoria• Instancias con alto CPU• Instancias con alto

almacenamiento• Fácil cambio de tamaño de

instancia• Eventualmente llegará al límite

c3.8xlargem3.2xlarge

t2.micro

Page 15: Escalando para sus primeros 10 millones de usuarios

“Vamos a necesitar una caja mas grande”

c3.8xlargem3.2xlarge

t2.micro

• Solución más simple• Posibilidad de usar PIOPS • Instancias para alto I/O• Instancias con alta memoria• Instancias con alto CPU• Instancias con alto

almacenamiento• Fácil cambio de tamaño de

instancia• Eventualmente llegará al límite

Page 16: Escalando para sus primeros 10 millones de usuarios

Día 1, usuario 1

• Potencialmente podríamos atender de algunos cientos a algunos miles dependiendo de la complejidad de la aplicación

• No hay failover• No hay redundancia• Muchos huevos en la

misma canasta

EC2 Instance

Elastic IP

Amazon Route 53

User

Page 17: Escalando para sus primeros 10 millones de usuarios

Día 2, usuario > 1

Primero, separemos nuestro host único en más de uno• Web• Base de datos

– Usar un servicio de base de datos?

Web Instance

DatabaseInstance

Elastic IP

Amazon Route 53

User

Page 18: Escalando para sus primeros 10 millones de usuarios

No administrada Administrada

Base de datos en Amazon EC2

Su decisión de rodar la base de datos en

Amazon EC2

Traiga su propia licencia (BYOL)

Amazon DynamoDB

Servicio de base de datos NoSQL usando

almacenamiento SSD

Escalabilidad simple con cero administración

Amazon RDSMicrosoft SQL Server,

Oracle, MySQL, o PostgreSQL como servicio

administrado

Licenciamiento flexible:BYOL o licencia incluida

Amazon Redshift

Servicio de DW de gran escala,

masivamente paralelo.

Rápido, poderoso y fácil de escalar

Opciones de base de datos

Page 19: Escalando para sus primeros 10 millones de usuarios

Pero, como escojo la tecnología de DB que necesito? SQL?

NoSQL?

Page 20: Escalando para sus primeros 10 millones de usuarios

A algunos no les va a gustar esto, pero…

Page 21: Escalando para sus primeros 10 millones de usuarios

Inicie con bases de datos SQL

Page 22: Escalando para sus primeros 10 millones de usuarios

Por qué comenzar con SQL?

• Es una tecnología establecida y bien conocida• Existen cientos de libros, comunidades, herramientas,

código y más.• Patrones claros de escalabilidad.• Usted no va a derrumbar una BD SQL con sus primeros

10 millones de usuarios. No, en realidad no lo hará*

*A menos que usted esté haciendo algo MUY fuera de lo común o tenga cantidades MASIVAS de datos, pero inclusive así, SQL tendrá un espacio en su stack.

Page 23: Escalando para sus primeros 10 millones de usuarios

Ajá! Usted dijo “cantidades

masivas” y yo voy a tener cantidades

masivas!

Page 24: Escalando para sus primeros 10 millones de usuarios

Si su uso es tal que va a generar TB (> 5) de datos en su primer año, O va a tener un flujo

de trabajo de intensidad de datos increíbles, usted podría

entonces necesitar NoSQL

Page 25: Escalando para sus primeros 10 millones de usuarios

Por qué otras razones necesitaría NoSQL?

• Aplicaciones de muy baja latencia• Datasets basados en metadata• Data altamente no relacional• Necesidad de constructs de datos sin esquema*• Cantidades masivas de datos (de nuevo, en el orden de

TB)• Rápida ingestión de datos (miles de records/seg)

*Necesidad != “Es más fácil desarrollar sin esquemas”

Page 26: Escalando para sus primeros 10 millones de usuarios

Usuario > 100

Primero, separemos nuestro único host en más de uno:• Web• Base de datos

– Use Amazon RDS para hacer su vida más fácil

Web instance

Elastic IP

RDS DB instance

Amazon Route 53

User

Page 27: Escalando para sus primeros 10 millones de usuarios

Usuario > 1000

Después, vamos a atacar nuestra falta de failover y problemas de redundancia:• Elastic Load Balancing

(ELB)• Otra instancia web

– En otra zona de disponibilidad

• RDS Multi-AZ

Web Instance

RDS DB InstanceActive (Multi-AZ)Availability Zone Availability Zone

Web Instance

RDS DB Instance Standby (Multi-AZ)

ELB Balancer

Amazon Route 53User

Page 28: Escalando para sus primeros 10 millones de usuarios

Escalando esto horizontalmente y verticalmente nos va a llevar

bastante lejos:(decenas a cientos de miles)

Page 29: Escalando para sus primeros 10 millones de usuarios

Usuario > 10,000s–100,000s

RDS DB InstanceActive (Multi-AZ)

Availability Zone Availability Zone

RDS DB Instance Standby (Multi-AZ)

ELB 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

Page 30: Escalando para sus primeros 10 millones de usuarios

Esto nos llevará lejos, pero nos importa también el performance y la eficiencia, entonces vamos

a mejorarlo un poco más:

Page 31: Escalando para sus primeros 10 millones de usuarios

RDS DB InstanceActive (Multi-AZ)

Availability Zone

ELB Balancer

Amazon S3

Amazon CloudFront

Amazon Route 53

User

Vamos a aligerar la carga en nuestras instancias web y base de datos:• Mover el contenido estático

de la instancia web a Amazon S3 y Amazon CloudFront

• Mover la sesiones/estado y crear un caché para la base de datos usando Amazon ElastiCache o Amazon DynamoDB

Movamos las cargas

Web Instances

Page 32: Escalando para sus primeros 10 millones de usuarios

RDS DB InstanceActive (Multi-AZ)

Availability Zone

ELB Balancer

Amazon S3

Amazon CloudFront

Amazon Route 53

User

ElastiCache

DynamoDB

Web Instances

Vamos a aligerar la carga en nuestras instancias web y base de datos:• Mover el contenido estático de

la instancia web a Amazon S3 y Amazon CloudFront

• Mover la sesiones/estado y crear un caché para la base de datos usando Amazon ElastiCache o Amazon DynamoDB

Movamos las cargas

Page 33: Escalando para sus primeros 10 millones de usuarios

Vamos a aligerar la carga en nuestras instancias web y base de datos:• Mover el contenido estático de la instancia

web a Amazon S3 y Amazon CloudFront• Mover la sesiones/estado y crear un caché

para la base de datos usando Amazon ElastiCache o Amazon DynamoDB

• Mover el contenido dinámico del ELB a Amazon CloudFront

RDS DB InstanceActive (Multi-AZ)

Availability Zone

ELB Balancer

Amazon S3

Amazon CloudFront

Amazon Route 53

User

ElastiCache

DynamoDB

Web Instances

Movamos las cargas

Page 34: Escalando para sus primeros 10 millones de usuarios

Ahora que nuestra capa web es mucho más ligera, podemos

volver al inicio de nuestra charla…

Page 35: Escalando para sus primeros 10 millones de usuarios

Auto Scaling!

Page 36: Escalando para sus primeros 10 millones de usuarios

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

Tráfico típico semanal a Amazon.com

Page 37: Escalando para sus primeros 10 millones de usuarios

Sunday Monday Tuesday Wednesday Thursday Friday Saturday

Tráfico típico semanal a Amazon.com

Provisioned capacity

Page 38: Escalando para sus primeros 10 millones de usuarios

November

Tráfico en noviembre a Amazon.com

Page 39: Escalando para sus primeros 10 millones de usuarios

Provisioned capacity

November

Tráfico en noviembre a Amazon.com

Page 40: Escalando para sus primeros 10 millones de usuarios

Tráfico en noviembre a Amazon.com76%

24%

Provisioned capacity

November

Page 41: Escalando para sus primeros 10 millones de usuarios

Tráfico en noviembre a Amazon.com

November

Page 42: Escalando para sus primeros 10 millones de usuarios

Auto Scaling les permite hacer esto!

Page 43: Escalando para sus primeros 10 millones de usuarios

Usuario > 500,000+

Availability Zone

Amazon Route 53

User

Amazon S3

Amazon CloudFront

Availability Zone

ELB Balancer

DynamoDBRDS DB Instance

Read Replica

Web Instance

Web Instance

Web Instance

ElastiCache RDS DB Instance Read Replica

Web Instance

Web Instance

Web Instance

ElastiCacheRDS DB Instance Standby (Multi-AZ)

RDS DB InstanceActive (Multi-AZ)

Page 44: Escalando para sus primeros 10 millones de usuarios

Use automatización

Administrar su infraestructura va a ser cada día una parte más importante de su tiempo. Use herramientas de automatización para tareas repetitivas:• Herramientas para administrar sus recursos AWS• Herramientas para administrar el software y la

configuración en sus instancias.• Automatice el análisis de logs y acciones de los usuarios.

Page 45: Escalando para sus primeros 10 millones de usuarios

Soluciones de administración de aplicaciones AWS

Convenience Control

Servicios de alto nivel Hágalo usted mismo

AWSElastic Beanstalk

AWSOpsWorks

AWSCloudFormation Amazon EC2

Page 46: Escalando para sus primeros 10 millones de usuarios

Usuario > 500,000+

Potencialmente usted va a empezar a tener problemas con la velocidad y el performance de sus aplicaciones:• Asegúrese de tener monitoreo, métricas, alarmas y logs.

– Si no puede construir una solución interna, use un Third-party como Nagios, NewRelic, entre otros…

• Ponga atención a cuantos clientes hablan bien de su aplicación vs. cuantos no lo hacen y use esta información.

• Intente exprimir la mayor cantidad de performance de cada uno de los servicios o componentes que use.

Page 47: Escalando para sus primeros 10 millones de usuarios

Métricas a nivel de host

Métricas agregadas por

nivel

Performance externo del sitioAnálisis de log

Page 48: Escalando para sus primeros 10 millones de usuarios

Hay mejoras adicionales a ser realizadas al quebrar

su capa de web / aplicación

Page 49: Escalando para sus primeros 10 millones de usuarios

SOA (Service Oriented Architecture)

• Mover servicios a sus propias capas o módulos. Trate cada uno de ellos como piezas completamente separadas de su infraestructura y escálelas de forma independiente.

• Amazon.com y AWS hacen esto de forma extensiva! Ofrece flexibilidad y un mejor entendimiento de cada uno de los componentes.

Page 50: Escalando para sus primeros 10 millones de usuarios

Desacoplamiento + SOA = ganador

No reinvente la rueda.Ejemplos:• Email• Queuing• Transcoding• Search• Databases• Monitoring• Metrics• Logging• Compute

Amazon CloudSearch Amazon SQSAmazon SNS

Amazon Elastic Transcoder

Amazon SWFAmazon SES

Si alguien ya creó un servicio que cumple sus necesidades, úselo en vez de construirlo.

AWS Lambda

Page 51: Escalando para sus primeros 10 millones de usuarios

El desacoplamiento te libera!Entre más desacoplados, más escalan

– Componentes independientes– Diseñe todo como una caja negra– Desacople interacciones– Favorezca servicios que ya ofrecen redundancia y escalabilidad,

en vez de crear sus propios.

S3 Bucket Lambda

Push: Event

Notification

DynamoDB

Pull: DynamoDB Stream

Amazon Kinesis

Pull: DynamoDB Stream

SQS

messages

Get Message

Instance

Put MessageInstanc

e

Amazon SNS Topic

Publish Notification

Queue Is Subscribed to Topic

Page 52: Escalando para sus primeros 10 millones de usuarios

Usuario > 1 millón +

Llegar a millones y más, va a requerir un poco de todo lo que previamente hemos conversado:• Multi-AZ• Elastic Load Balancing entre capas• Auto Scaling• Service Oriented Architecture• Sirva contenido de forma inteligente (S3/CloudFront)• Caché de base de datos• Remueva el estado de capas que auto escalan

Page 53: Escalando para sus primeros 10 millones de usuarios

Usuario > 1 millón+

RDS DB InstanceActive (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 53

User

Amazon S3

Amazon CloudFront

DynamoDB

Amazon SQS

ElastiCache

WorkerInstance

WorkerInstance

Amazon CloudWatch

Internal AppInstance

Internal AppInstance Amazon SES

Lambda

Page 54: Escalando para sus primeros 10 millones de usuarios

Los siguientes grandes pasos

Page 55: Escalando para sus primeros 10 millones de usuarios

Usuario > 5 millones – 10 millones

Potencialmente en este punto comenzará a tener problemas con su base de datos sobre conexiones de escrita en la instancia master.Cómo lo puede resolver?• Federation — separar en múltiples BDs dependiendo de la función

(Foros, Usuarios, Productos.. )• Sharding — separar los datos en múltiples hosts• Mover algunas funcionalidades a otros tipos de bases de datos (NoSQL,

Grafos)

Page 56: Escalando para sus primeros 10 millones de usuarios

Un breve resumen

Page 57: Escalando para sus primeros 10 millones de usuarios

Resumen

• Infraestructura Multi-AZ• Use servicios que escalan por si solos – ELB, Amazon S3,

Amazon SNS, Amazon SQS, Amazon SWF, Amazon SES, entre otros.

• Construya con redundancia en todos los niveles.• Empiece con SQL. En serio!• Use caché de datos tanto dentro como fuera de su

infraestructura.• Use herramientas de automatización en su infraestructura.

Page 58: Escalando para sus primeros 10 millones de usuarios

Resumen

• Asegúrese de tener buenas herramientas para métricas/monitoreo/logs.

• Separe capas en servicios individuales (SOA).• Use Auto Scaling cuando esté listo para ello.• No intente reinventar la rueda.• Cámbiese a NoSQL siempre y cuando tenga

sentido.

Page 59: Escalando para sus primeros 10 millones de usuarios

Poner todo esto junto significa que podrá fácilmente ser capaz de manejar 10+ millones de usuarios!

Page 60: Escalando para sus primeros 10 millones de usuarios

Hasta el infinito...

Page 61: Escalando para sus primeros 10 millones de usuarios

Usuario > 10 millones

Iterando sobre estos patrones vistos aquí, podrá llevar su aplicación a más

de 100 millones de usuarios

Page 62: Escalando para sus primeros 10 millones de usuarios

Gracias!