Scaling on AWS for the First 10 Million Users

banken. Anwendungsdienste. Bereitstellung & Verwaltung. Netzwerk. Amazon. CloudSearch .... Starten in wenigen Minuten. • Abrechnung in AWS-Konto.
3MB Größe 2 Downloads 226 Ansichten
Von 1 auf 10 Millionen: Skalieren mit AWS Matthias Jung, Solutions Architect AWS AWS Summit Berlin, 15.Mai 2014 © 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.

Wie funktioniert das also mit dem Skalieren?

eine Menge Ergebnisse

nicht der richtige Startpunk

Zunächst ein paar Grundlagen…

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

CHINA (Beijing) ASIA PAC (Tokyo)

AWS GovCloud (US)

US-EAST (Virginia) ASIA PAC (Sydney) US-WEST (N. California)

ASIA PAC (Singapore) SOUTH AMERICA (Sao Paulo)

Verfügbarkeitszonen (AZs) EU-WEST (Ireland) US-WEST (Oregon)

CHINA (Beijing) ASIA PAC (Tokyo)

AWS GovCloud (US)

US-EAST (Virginia) ASIA PAC (Sydney) US-WEST (N. California)

ASIA PAC (Singapore) SOUTH AMERICA (Sao Paulo)

Edge-Standorte

AWS OpsWorks

Amazon SNS

Amazon SES

Amazon CloudSearch

Amazon SWF

Amazon SQS

Amazon Amazon Elastic AWS AWS IAM CloudWatch Beanstalk CloudFormation

Amazon EMR

Amazon Route 53

Amazon RDS Amazon RedShift

Anwendungsdienste

Amazon Elastic Transcoder

Speicherung & Bereitstellung

Datenbanken

Amazon S3 Amazon CloudFront

AWS Storage Gateway

Amazon VPC

AWS Direct Connect

Amazon ElastiCache Amazon DynamoDB

Netzwerk Amazon Kinesis

AWS CloudTrail

Bereitstellung & Verwaltung

DV Amazon EC2

AWS Data Pipeline

AWS Globale Infrastruktur

Amazon Glacier

1 (Sie selbst)

1.Tag, 1 Anwender • Eine einzige EC2-Instanz

Amazon Route 53

Anwender

– mit komplettem Stack • • • •

Web-App Datenbank Verwaltungswerkzeuge usw.

• Elastic IP Address • Amazon Route 53 für DNS

Elastic IP Address

EC2Instanz

“Wir brauchen eine grössere Kiste” • • • • •

Wechseln der Instanz-Grösse Wechseln des Instanz-Typen EBS mit PIOPS konfigurieren Ziemlich unkompliziert Mehrere Tausend Anwender möglich

i2.4xlarge m3.xlarge m1.small

“Wir brauchen eine grössere Kiste” • • • • •

Wechseln der Instanz-Grösse Wechseln des Instanz-Typen EBS mit PIOPS konfigurieren Ziemlich unkompliziert Mehrere Tausend Anwender möglich • Funktioniert nicht unendlich

i2.4xlarge m3.xlarge m1.small

Erste Schritte • Keine Ausfallsicherheit • Keine Redundanz • Keine Risikostreuung

Amazon Route 53

Anwender

Elastic IP Address

EC2 Instanz

1000

1000 Anwender und mehr Anwender

Trennen von Datenbank und Web-Anwendung

Datenbank-Dienst statt Selbst-Verwaltung?

Amazon Route 53

Elastic IP Address

WebInstanz

DatenbankInstanz

Datenbank-Optionen Datenbank-Dienste

Selbst-Verwaltung

Datenbank auf Amazon EC2

Amazon RDS

Amazon DynamoDB

Amazon Redshift

Wahl der Software und Version

Microsoft SQL, Oracle, Postgre & MySQL als Dienst

NoSQL-Dienst mit SSD-Speicher

Data-WarehouseDienst (SQL)

Nahtlose Skalierung, kein Betriebsaufwand

Massiv parallel, hohe Skalierbarkeit, schneller Zugriff

Eigene Lizenz (BYOL)

Lizenz inkludiert oder BYOL

Welche DatenbankTechnologie?

Warum eine SQL-Datenbank? • • • •

Weit verbreitet und bestens verstanden Tausende Werkzeuge, Code, Communities, Bücher, … Erprobte Skalierungsmuster und –rezepte Schafft auch 10 Millionen Anwender*

* Ausser bei extrem vielen Schreib-Operationen auf riesigen Datenmengen. Und selbst dann gibt es einen Platz für SQL-Datenbank in Ihrem Stack.

Wann passt NoSQL besser? • • • • • • •

Riesige Datenmengen (im TB-Bereich) Tausende von Schreib- und Update-Operationen Unstrukturierte Daten, keine festen Tabellen Daten mit losen Beziehungsstrukturen Speichern von Meta-Daten Anwendungen mit Anforderungen an geringe Latenz Erfahrung und Kompetenz im Team

Amazon DynamoDB • Vollständig verwalteter Dienst

• Hohe und berechenbare Leistung

Konfigurierbarer und konstanter Durchsatz

• Vollständig verteilte und

Automatische Skalierung von Tabellen

fehlertolerante Architektur

Integrierte Fehlertoleranz

Starke Konsistenz und atomare Zähler Integriertes Monitoring Hohe Sicherheit Integration mit Amazon EMR

Mehr als 1000 Anwender Anwender

Trennen von Datenbank und Web-Anwendung

Datenbank-Dienst RDS statt Selbst-Verwaltung

Amazon Route 53

Elastic IP Address

WebInstanz

RDS DatenbankInstanz

10,000

10000 Anwender und mehr

Amazon Route 53

Anwender

Ausfallsicherheit und Redundanz • Verteilung auf Verfügbarkeitszonen • Elastic Load Balancing • Amazon RDS Multi-AZ

Elastic Load Balancing

WebInstanz

Amazon RDS DB-Instanz mit aktiviertem Multi-AZ Verfügbarkeitszone A

WebInstanz

Amazon RDS DB-Instanz in Bereitschaft (Multi-AZ) Verfügbarkeitszone B

Elastic Load Balancing • Für fehlertolerante und hochskalierbare Anwendungen Hochverfügbar und Elastisch Zustandsprüfungen Lastverteilung auf Layer 4 und 7 SSL-Unterstützung und -Auslagerung Integriertes Monitoring Protokollierung IPv6-Unterstützung

Elastic Load Balancing

500,000

Horizontales Skalieren Anwender

Amazon Route 53

Elastic Load Balancing

WebInstanz

WebInstanz

WebInstanz

RDS DB-Instanz RDS DB-Instanz Lese-Replica Lese-Replica

WebInstanz

RDS DB-Instanz Master (Multi-AZ)

Verfügbarkeitszone A

WebInstanz

RDS DB-Instanz Standby (Multi-AZ)

WebInstanz

WebInstanz

RDS DB-Instanz Lese-Replica Verfügbarkeitszone B

WebInstanz

RDS DB-Instanz Lese-Replica

Entlasten… Anwender

Von Web-Servern und Datenbank • Statische Inhalte auf S3 speichern • Statische (und dynamische) Inhalte über CloudFront ausliefern • Datenbank-Abfragen in ElastiCache cachen • Session-Zustände auf ElastiCache oder DynamoDB auslagern

Amazon Route 53

Amazon CloudFront

Elastic Load Balancing

Amazon S3

WebInstanz ElastiCache

RDS DB-Instanz Master (Multi-AZ) Verfügbarkeitszone

Amazon DynamoDB

Zugriffe im November auf Amazon.com

November

Zugriffe im November auf Amazon.com 76%

Bereitgestellte Kapazitäten

November

24%

Zugriffe im November auf Amazon.com

November

Auto Scaling Automatische Anpassung

Auslösen von Auto-Scaling Policy

Amazon CloudWatch

der Kapazitäten an die Last • Integration mit Amazon CloudWatch

• Integration mit Elastic Load Balancing • Für Skalierung und Verfügbarkeit

as-create-auto-scaling-group MyGroup --launch-configuration MyConfig --availability-zones us-east-1a --min-size 4 --max-size 200

500 Tsd Anwender

Anwender

Amazon Route 53

Amazon CloudFront

Elastic Load Balancing

WebInstanz

WebInstanz

RDS DB-Instanz Master (Multi-AZ)

WebInstanz

RDS DB Instanz Lese-Replica Availability Zone

Amazon S3

WebInstanz

ElastiCache

WebInstanz

WebInstanz

RDS DB-Instanz RDS DB-Instanz Standby (Multi-AZ) Lese-Replica Availability Zone

ElastiCache

Amazon DynamoDB

Automatisierung

AWS Elastic Beanstalk Bequemlichkeit

AWS OpsWorks

AWS CloudFormation

Amazon EC2

Kontrolle

SERVER METRIKEN

AGGREGIERTE METRIKEN

LOG ANALYSE

EXTERNE MESSUNGEN

AWS Marketplace & Partners • Suche und Kauf von vorinstallierten SoftwareLösungen • Verbrauchsorientierte Abrechnung • Starten in wenigen Minuten • Abrechnung in AWS-Konto integriert • Mehr als 1300 Produkte und 20 Kategorien Learn more at: aws.amazon.com/marketplace

1,000,000

Komponenten entkoppeln • Entkoppeln hilft beim Skalieren und Optimieren – – – –

Unabhängige Komponenten Konzeption als Blackbox Klare Schnittstellen Interaktionen entkoppeln

Komponenten entkoppeln Vorher

Controller A

Loose coupling

Q

Controller B

Amazon SQS als Puffer

Nachher

Q

Q Controller A

Controller B

In Diensten denken • Monolytische Blöcke in feingranulare Dienste teilen • Dienste in eigene Module packen • Jeden Dienst als 100% unabhängige Komponente betrachten • Jeden Dienst unabhängig skalieren

In Diensten denken • Monolytische Blöcke in feingranulare Dienste teilen • Dienste in eigene Module packen • Jeden Dienst als 100% unabhängige Komponente betrachten • Jeden Dienst unabhängig skalieren

= Grundprinzip von AWS und Amazon.com

Das Rad nicht neu erfinden Wenn ein passender Dienst bereits existiert, warum selbst einen eigenen bauen? Beispiele • Benachrichtigungen • E-Mail • Suche • Workflows • Queuing • Transcoding • Monitoring

Amazon SNS

Amazon CloudSearch

Amazon SQS

Amazon SES

Amazon SWF

Amazon Elastic Transcoder

1 Mio Anwender und mehr Anwender

Amazon Route 53

Amazon CloudFron t

Elastic Load Balancing Amazon SQS WebInstanz

WebInstanz

WebInstanz

WebInstanz

WorkerInstanz

WorkerInstanz Amazon DynamoDB

ElastiCache

RDS DB-Instanz RDS DB-Instanz Lese-Replica Lese-Replica Verfügbarkeitszone

RDS DB-Instanz Master (Multi-AZ)

Amazon S3

Interner Interner App-Server App-Server

Amazon CloudWatch

Amazon SES

10,000,000

Zwischen 5-10 Mio Anwendern Schreiben in die Datenbank wird zum Flaschenhals Lösungen • Federation: Verteilen der Datenbank-Struktur auf mehrere Datenbank-Systeme nach Funktion • Sharding: Verteilen der Daten auf mehrere DatenbankSysteme (z.B. Anwender nach Region) • NoSQL: Auslagerung von bestimmten Daten auf NoSQLDatenbanken

Auslagerung in eine NoSQL-DB • Beispiele – Punktestände und Leaderboards – Clickstream oder Log-Daten – Zwischenspeicherung • (z.B. Einkaufswagen, Session-Informationen)

– Extrem populäre Daten – Meta-Daten

Amazon DynamoDB

…und so sind wir bei 10 Millionen Anwendern

Von 1 auf 10 Millionen Anwender • Wahl der passenden DB zum passenden Usecase • Komplette Infrastruktur auf Verfügbarkeitszonen verteilen (Multi-AZ) • Caching, caching, caching • Entkoppeln und in Diensten denken (SOA) • Das Rad nicht neu erfinden – Elastic Load Balancing, Amazon S3, Amazon SNS, Amazon SQS, Amazon SWF, Amazon SES, ...

• Auto-Scaling (wenn die Grundlagen dafür gelegt wurden) • Monitoring auf allen Ebenen • Automatisierung des Betriebs

100,000,000?

10-100 Millionen Anwender • Noch mehr und spezielle fein-granulare Dienste • Noch mehr Leistungsoptimierung durch genaue Vermessung des gesamten Stacks • Von Multi-AZ zu Multi-Region • Mehr individuelle Lösungen

Nächste Schritte? Lesen? • aws.amazon.com/de/documentation • aws.amazon.com/de/architecture • aws.amazon.com/de/start-ups Hören? • Motain - Onefootball

From 1 to 10 Millions Jonathan Lavigne 15/05/2014

© 2014 Amazon.com, Inc. and its affiliates. All rights reserved. May not be copied, modified, or distributed in whole or in part without the express consent of Amazon.com, Inc.

Today •Jonathan Lavigne, CTO/CPO, Onefootball •What we’ll talk about: –From a German iPhone app to a multi-countries success –How we use AWS –Lessons learned while growing –Our TODOs for the next evolution of our infrastructure

We fuel people’s addictions

It’s a team effort •Balancing new feature development, performance, monitoring, quality, process management •All while avoiding silos, delays, systems being down, unhappy users Thanks to my team!

The initial infrastructure

The initial infrastructure •Classic infrastructure •1 server to produce content, 4 servers to deliver it –Very big servers: 2 x Xeon CPU w/ 16 cores, 48GB RAM, SSD –Central NAS w/ 1TB space over a 1GB/s connection –1 DB master and 4 DB slaves on each frontend server –2 load balancers (1 active, 1 hot stand-by)

•Very predictable metrics •Worked well for a long time

The initial infrastructure

Until… Euro 2012

Until… Euro 2012 •From 1 to 2 millions users in 2 weeks •International traffic: everybody follows the same games •Servers start to send warnings, we NEED to do something

Until… Euro 2012 •Monolith = not easy to scale •Fast code optimizations only get you so far •Solution: CloudFront and S3 to the rescue •Lessons learned –Think early of systems –Shift load to CDN or other services (S3, etc..)

Post Euro 2012 - Optimizations •From 2 to 4 million users •Refine CDN caching and invalidation rules •Move static assets to S3 (images, static files) •Optimize code, services and infrastructure •Admit when optimization effort costs more than benefits

Small change, big difference

Time for elasticity - AWS •Difficult to do quickly •Software too tightly coupled •Internal resources busy with other projects •Step-by-step •Evaluate performance hot-spots •Create a plan to decouple software •Choose the setup for YOUR needs

Our score architecture today

Technologies we use •EC2 •RabbitMQ and HAProxy •PHP & Go Stack •RDS and Elastic Cache •ELB and Route 53 •OpsWork •Deployment with Chef •VPC

RabbitMQ •OpsWork handles clustering with Chef •Queues are mirrored across the instances •HAProxy used to connect on EC2 instances which connect to Rabbit •Balancing between various Rabbit hosts •Don‘t change anything in the software •10000 messages/second on a C3.large instance

OpsWorks •Facilitates for any engineer to manage the infrastructure •Integrates with Chef out of the box •Allows us to layer the infrastructure and optimize accordingly •Benefit from time based scaling since usage patterns are predictable (football matches) •Allows load-base scaling if required

Monitoring •Amazon •Basic CPU and Load usage •Monitoring the ELBs •Copper Egg •Monitors instances, helps determine instance size and optimize/improve

The future •Fine tune auto-scaling rules •Move more of our infrastructure to OpsWorks •Unify databases •Deploy to multiple AWS regions •Continue move to Go •Leverage more AWS technologies such as RedShift and Elastic MapReduce

THANK YOU