Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird

Post on 04-Dec-2014

3.352 views 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 of 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:

CIO AOE media

„Agilist“

Open Source

Developer

100 PEOPLE 6

COUNTRIES

13 YEARS

2700% GROWTH

Open SourceCOMMUNITY

CLIENTS

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?

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

Irregular Traffic Behaviour

DRM Server

Mail ServiceProducts + Warehouse

Reporting

Ordermgmt

Manage Warehouse Fullfillment

Giftcards

Braintree

Das Angry Birds Magento Universum

Storefronts

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

Why Amazon Cloud ?

✓Scales quickly on demand

✓Pay only what you need

Powerfull AWS Services

Rightscale Services

Amazon Webservices & Amazon Console

Cloud Front

Elastic Cache

S3EC2 RDS ELB R53

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

Cloud Architecture

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

Um zu Skalieren muss man den Flaschenhals finden und

eliminieren

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...

HTTP Caching

Fron

tend

(M

agen

to)

Varnish (Reverse Proxy) Traffic

Offload expensive requests

Traffic

CDN

Bro

wse

r

TrafficPurging

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)

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

Application Tuning ist gaaanz Individuell!

Application Tuning braucht Profiling

1. Isoliertes Profiling•XDebug + kcachegrind •XHProf

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

3.Profiling unter Echtlast• Newrelic

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

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

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...

10.000MÖGLICHE Bestellungen pro Stunde

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

(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

Continuous Deployment

Don‘t be scared of releasing to production

late night bugfixing?

So muss ein Deployment aussehen

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?

Definition Continuous Deployment

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

Alles zu automatisieren

Wir erreichen das durch

BuildTesting

Deployment

das alles häufig ausführen

..und

flickr deploys 3 times a day...

The Deployment Pipeline

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

‣ 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 / ...

Angry Birds Deployment Pipeline

Install on Deployment

SystemCopy to S3

Cloud Deployment

Staging

Integration Tests

AOE + Rovio

Cloud deployment production

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

0Sekunden Downtime

Don‘t be scared of releasing to production

Es geht nicht nur um den Quellcode!

Environment

Configuration

Source Code

Data

Deployment

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

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

The real life

Day 1 - Release 1

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

New release deployed

Space game launched

Array scales up

USA wakes up

Day 3 - „People want it so badly“

40% average CPU usage.

1-2 FE Servers are enough

Day 4 - Release 3 „Performance Improvement“

5000(echte) Besucher gleichzeitig

Danke fürs zuhören!

Fragen?

Follow us on Twitter:

AOE: @aoemediaDaniel P: @danpoetz