cloud deployment und (auto)scaling am beispiel von angrybird

63
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird Presented by Daniel Pötzinger Developer Conference Hamburg 2012:

Upload: aoe

Post on 04-Dec-2014

3.351 views

Category:

Technology


0 download

DESCRIPTION

Continuous Delivery und Autoscaling von Enterprise Web-Applicationen in der Amazon Cloud In diesem Vortrag zeigen wir am Beispiel des neuen Angrybird-Onlineshops, der zu Spitzenzeiten bis zu 10 Bestellungen pro Sekunde aufnehmen kann und dabei hochverfügbar ist, wie eine automatisch skalierende Cloud Infrastruktur sowie die nötigen Konzepte aussehen können. Wir beschreiben die Herausforderungen und unsere Lösungen, um den Shop für ein Multi-Server-Setup vorzubereiten und zu betreiben. Spezielle Anforderungen an eine solche Architektur sowie die Integration von Reverse Proxies (Varnish), die Nutzung eines CDNs, verschiedene Cache-Strategien und weitere Optimierung sind ebenfalls Bestandteil dieses Vortrags. Außerdem stellen wir unsere automatisierte Cloud-Deployment-Strategien vor, angefangen von den Entwicklungsumgebungen, über den continuous Integration Server und unser Testing Framework bis hin zum A/B-Deployment in der Cloud.

TRANSCRIPT

Page 1: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird

Presented byDaniel Pötzinger

Developer Conference Hamburg 2012:

Page 2: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 3: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

CIO AOE media

„Agilist“

Open Source

Developer

Page 4: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

100 PEOPLE 6

COUNTRIES

13 YEARS

2700% GROWTH

Open SourceCOMMUNITY

CLIENTS

Page 5: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Und Sie?

• Wer betreibt einen Magento Shop?• Wer hat Erfahrung mit cloud hosting/ AWS?• Wer betreibt eine Seite mit mehr als 100 Seitenaufrufen / Sekunde?•mehr als 1000 Seiten/Sekunde?

Page 6: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Monitoring (munin, collectd)

Cluster & CloudInfrastructure

Provisionierung

Autoscaling

geteilte Resourcen

Applikations Architektur

Cache Strategy

Algorithmen

Services

HTTP & Co

HTTP Protocol

Proxy Caches

Site Optimisation

User Monitoring & Analytics

Besser werden und Bottlenecks finden...

Profiling (xdebug, newrelic)

Performance Bausteine

Stabil und schnell ausliefern mit....

Continuous Delivery

Performance Tests

Page 7: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 8: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Irregular Traffic Behaviour

Page 9: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

DRM Server

Mail ServiceProducts + Warehouse

Reporting

Ordermgmt

Manage Warehouse Fullfillment

Giftcards

Braintree

Das Angry Birds Magento Universum

Storefronts

Page 10: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

DRM Server

Mail ServiceProducts + Warehouse

Reporting

Ordermgmt

Manage Warehouse Fullfillment

Giftcards

Braintree

Das Angry Birds Magento Universum

Storefronts

Shipwire

Findest das beste

„Paketrouting“

Verwaltet weltweite

Warenhäuser +

Bestand

Page 11: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Why Amazon Cloud ?

Page 12: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

✓Scales quickly on demand

✓Pay only what you need

Page 13: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Powerfull AWS Services

Rightscale Services

Amazon Webservices & Amazon Console

Cloud Front

Elastic Cache

S3EC2 RDS ELB R53

Page 14: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Powerfull AWS Services

Rightscale Services

Amazon Webservices & Amazon Console

Cloud Front

Elastic Cache

S3EC2 RDS ELB

Architecture Requirements

Hochverfügbar (Multiple Failover and

Loadbalancing)

Frontend und Backendarbeiten

trennen

Managen von Hintergrundtasks

Unabhängig von Schnittstellen

Fast Fast Fast & Scalable

keine Downtime

Page 15: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 16: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Cloud Architecture

Page 17: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

RDS

„Deployment Definition“ + Autoscaling

Varnish Array

Frontend Array Backend Array Worker Array

Cloud FrontCDN for Skin

ELB

R53DNS

RDSS3

Deployment

Elastic CacheCache Backend

Cloud FrontCDN for Assets

S3Assets Storage

EC2 EC2EC2

EC2 EC2 EC2

EC2 EC2MonitoringAPI

Page 18: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Um zu Skalieren muss man den Flaschenhals finden und

eliminieren

Page 19: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

CPU

Bandbreite

Storage (DB)Traffic

typische FlaschenhälseOffloading, Optimisation, Caching, add more CPU (scale)...

Offloading, Optimisation, Scale Storage UP (H/V), Replace Storage...

Offloading (CDN, Proxy)Optimize Size of the SiteScale Network IS...

Page 20: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

HTTP Caching

Fron

tend

(M

agen

to)

Varnish (Reverse Proxy) Traffic

Offload expensive requests

Traffic

CDN

Bro

wse

r

TrafficPurging

Page 21: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

HTTP Caching

1. Seiten cachebar machen• HTTP Cache Header verstehen und Browser Cache nutzen•Reverse Proxy Cache nutzen

2. Dynamic zum Client verschieben3. Ajax oder ESI für dynamische / personalisierte Teile verwenden4. JS und CSS packen und minifizieren + Timestamp5. CDN für statische Assets verwenden6.Website performance Optimierungen (YSlow und Co)

Page 22: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

10.000+MÖGLICHE Seiten / Sekunde aus ELB + Varnish

Page 23: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Application Tuning ist gaaanz Individuell!

Page 24: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Application Tuning braucht Profiling

1. Isoliertes Profiling•XDebug + kcachegrind •XHProf

2. Profiling unter Last•jMeter•IS Monitoring•XDebug...

3.Profiling unter Echtlast• Newrelic

Page 25: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Application Tuning - Beispiele

• Loglevel reduzieren und Logging deaktivieren• Viele Datenbank Abfragen optimiert • Cleanup Cronjobs (Order, Logs, Sessions, Baskets...)• Session Storage durch Memcache ersetzen• Datenbank Locks und Deadlocks vermeiden:

• Read Slaves für Reportgenerierung• Queueing: Syncrone zu Asyncronen Prozessen machen• Replace Search by SOLR / Searchperience

•Richtiger Umgang mit Caches

Page 26: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

wichtige Cachingregeln

1. Ziel ist eine hohe Hitrate 2. Caches dürfen nicht geflutet werden3. Cache Backend müssen „weise“ ausgewählt werden4. Aufpassen den Cache nicht auf einmal zu verlieren. 5. Cachen ist einfach. Aber wichtig ist die caches gut aufzuräumen6. Einzelne Cacheeinträge mussen „on-demand“ aktualisiert oder gelöscht werden

Page 27: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Andere Tipps

1. System und Versionsabhängigen Cacheprefix einführen2. Cache Warmup Script haben und im Deployment nutzen3. E-Mail Service für das (Massen) versenden von Mails verwenden4. „Design for the Cloud“

• Immer im Kopf haben das man einen Cluster hat• Sinnvolles Handling von gemeinsamen Resourcen (Assets, Cachebackend)• Plan for Failover...

Page 28: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

10.000MÖGLICHE Bestellungen pro Stunde

Page 29: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Autoscaling

•Gruppen mit Policys

• min, max

• Votingrules for scale up/down

•fehlerhafte Instanzen ersetzen

• Provisionierungszeit und Policies abstimmen

• „Calm time“

Traffic

Fron

tend

Arr

ay

EC2

EC2

EC2

EC2

EC2

EC2

Page 30: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

(AWS) Lessons learned

1. 404s können sehr teuer sein• Lasttest mit accesslog •Cachen oder Weiterleiten

2. Cloudfront mit S3 backend kann kein GZIP3.Festes ELB timeout von 60sec :-(4.Man kann nicht alles vorhersehen! => Aber man kann vorbereitet sein Probleme schnell zu fixen

=> continuous deployment

Page 31: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 32: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Continuous Deployment

Page 33: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 34: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Don‘t be scared of releasing to production

Page 35: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

late night bugfixing?

Page 36: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

So muss ein Deployment aussehen

Page 37: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Und Sie?

• Wer macht Continuous Integration?• Wer Scrum, Kanban oder XP?• Wer automatisiert Akzeptanztest?

• Bei wem sind diese grün?• Wer macht Continuous Deployment?• Continuos Delivery?• DevOps?

Page 38: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Definition Continuous Deployment

We want on-demand deploymentof tested features and fixesin a quick and reliable way

Page 39: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Alles zu automatisieren

Wir erreichen das durch

BuildTesting

Deployment

Page 40: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

das alles häufig ausführen

..und

flickr deploys 3 times a day...

Page 41: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 42: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

The Deployment Pipeline

Page 43: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 44: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Selenium Acceptance Tests

Commitand Build

Build Downstream and Test Strategy

SVN Backup Storage

Unit TestsInstall on „latest“

Performance Tests

Angry Birds Deployment Pipeline

Feedback to Developers

Page 45: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

‣ Filesystem‣ Database‣ Install Binaries‣ settings.php

Magento Installation Package

‣ htdocs [Magento Source]

‣ media

‣ .modman [Custom Packages]

‣ changelog.txt

1.set maintenance mode

2.Delta Package prepare

3.apply Database

4.sync files

5.run modman deploy-all

6.adjust Settings

7.Post install:fix p. / cache clean / ...

Page 46: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Angry Birds Deployment Pipeline

Install on Deployment

SystemCopy to S3

Cloud Deployment

Staging

Integration Tests

AOE + Rovio

Cloud deployment production

Page 47: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Deployment „Version 89“

Varnish Array

AutoscalingFrontend Array

Backend Array

Worker Array

Cloud Deployment

ELB

Deployment „Version 88“

Start new release by✓ cloning old deployment✓ adjusting release number

RDSmySQL S3

Varnish Array

AutoscalingFrontend Array

Backend Array

Worker Array

ELB

WFE FE FE BE BE BE

V V VV V V

WFE FE FE BE BE BE

R53DNS

Page 48: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

0Sekunden Downtime

Page 49: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Don‘t be scared of releasing to production

Es geht nicht nur um den Quellcode!

Page 50: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Environment

Configuration

Source Code

Data

Deployment

Page 51: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 52: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

DevOps?

„the cultural aspect of concentrating on business results rather than technical details. Devops incorporates a lot of lean principles, focusing on improving the collaboration between developers and operations folks.“

„Cloud Sprint“[ Dev + Ops and the Cloud ]

Infrastructure as a Code[Provisioning with Chef]

http://www.agileweboperations.com/lean-agile-devops-related

Page 53: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Beispiel: Provisionierung einer Varnish Instanz1. EC2 Instanz von „nackter“ AIM starten

2.Infrastruktur Installieren:

1. RS Logging und Monitoring (syslog-ng, collectd)

2.Tags bekommen

3.Varnish installieren

4. Monitoring (Collectd) Installieren

3. Infrastruktur konfigurieren:

1. aktuelle Varnish Konfiguration aus Deployment einrichten

2. Cronjob für die Aktualisierung der Backends und ACLs installieren (Script fragt regelmäßig die Right-Scale API nach aktiven EC2 Instancen im aktuellem Deployment mit dem richtigem Tag )

3. Instanz beim richtigem ELB registrieren

Page 54: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 55: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

The real life

Page 56: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 57: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Day 1 - Release 1

Page 58: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Day 2 - Release 2 - „get ready for Space“

Page 59: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

New release deployed

Space game launched

Array scales up

USA wakes up

Day 3 - „People want it so badly“

Page 60: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

40% average CPU usage.

1-2 FE Servers are enough

Day 4 - Release 3 „Performance Improvement“

Page 61: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

5000(echte) Besucher gleichzeitig

Page 62: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird
Page 63: Cloud Deployment und (Auto)Scaling  am Beispiel von Angrybird

Danke fürs zuhören!

Fragen?

Follow us on Twitter:

AOE: @aoemediaDaniel P: @danpoetz