Date post: | 04-Dec-2014 |
Category: |
Technology |
Upload: | aoe |
View: | 3,349 times |
Download: | 0 times |
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