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.
4. 100 6
PEOPLE
COUNTRIES
13
YEARS
2700%
GROWTH
CLIENTS Open
Source
COMMUNITY
5. 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?
6. Performance Bausteine
Applikations Cluster & Cloud
HTTP & Co
Architektur Infrastructure
HTTP Protocol Cache Strategy Provisionierung
Proxy Caches Algorithmen Autoscaling
Site Optimisation Services geteilte Resourcen
Besser werden und Bottlenecks finden...
User Monitoring & Profiling Monitoring Performance
Analytics (xdebug, newrelic) (munin, collectd) Tests
Stabil und schnell ausliefern mit....
Continuous Delivery
9. Das Angry Birds Magento Universum
DRM Server
Storefronts Reporting
Products +
Ordermgmt Mail Service
Warehouse
Giftcards
Manage Warehouse Fullfillment Braintree
10. Das Angry Birds Magento Universum
Sh ipw ire
eltw eite DRM Server
Reporting lt
rwa et w
Storefronts
Ve
äus er +
Products + War enh
Ordermgmt
Warehouse Mail Service
Bes tand
sb este
des t da
Fin Giftcards
out ing“
„Pa ketr
Manage Warehouse Fullfillment Braintree
14. Powerfull AWS Servicesq
e Re u irem ents
chite ctur r and
Ar le Failove
bar (M ultip
H ochv erfüg
balan cing) eiten
Load acken darb
EC2 S3 RDS d
nten und B Cloud Elastic ELB
F ro
trenn en Frontgrund asks
tCache
von H inter
Man agen
nittstellen
ig vo n Sch
nab häng
Amazon UWebservices & Amazon Console
& Sca lable
Fast Fast
Fast
Down time
keine
Rightscale Services
17. Cloud Front S3 R53 Cloud Front
CDN for Assets Assets Storage DNS CDN for Skin
ELB
„Deployment Definition“
+ Autoscaling API Monitoring
EC2 EC2
Varnish Array
EC2 EC2 EC2 EC2 EC2
Frontend Array Backend Array EC2 Worker Array
Elastic Cache S3
Cache Backend Deployment
RDS
RDS
18. Um zu Skalieren muss man den
Flaschenhals finden und
eliminieren
19. typische Flaschenhälse
Offloading, Optimisation,
CPU Caching, add more CPU (scale)...
Offloading, Optimisation,
Traffic Storage (DB) Scale Storage UP (H/V),
Replace Storage...
Offloading (CDN, Proxy)
Bandbreite Optimize Size of the Site
Scale Network IS...
24. Application Tuning braucht Profiling
1. Isoliertes Profiling
•XDebug + kcachegrind
•XHProf
2. Profiling unter Last
•jMeter
•IS Monitoring
•XDebug...
3.Profiling unter Echtlast
• Newrelic
25. 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
26. wichtige Cachingregeln
1. Ziel ist eine hohe Hitrate
2. Caches dürfen nicht geflutet werden
3. Cache Backend müssen „weise“ ausgewählt werden
4. Aufpassen den Cache nicht auf einmal zu verlieren.
5. Cachen ist einfach. Aber wichtig ist die caches gut
aufzuräumen
6. Einzelne Cacheeinträge mussen „on-demand“
aktualisiert oder gelöscht werden
27. Andere Tipps
1. System und Versionsabhängigen Cacheprefix einführen
2. Cache Warmup Script haben und im Deployment nutzen
3. E-Mail Service für das (Massen) versenden von Mails
verwenden
4. „Design for the Cloud“
• Immer im Kopf haben das man einen Cluster hat
• Sinnvolles Handling von gemeinsamen Resourcen
(Assets, Cachebackend)
• Plan for Failover...
29. Autoscaling
•Gruppen mit Policys
Frontend Array
• min, max
• Votingrules for scale up/
down
Traffic
•fehlerhafte Instanzen
ersetzen
EC2
EC2
• Provisionierungszeit und
EC2
EC2
EC2
Policies abstimmen
EC2
• „Calm time“
30. (AWS) Lessons learned
1. 404s können sehr teuer sein
• Lasttest mit accesslog
•Cachen oder Weiterleiten
2. Cloudfront mit S3 backend
kann kein GZIP
3.Festes ELB timeout von 60sec :-(
4.Man kann nicht alles vorhersehen!
=> Aber man kann vorbereitet sein Probleme schnell zu fixen
=> continuous deployment
37. 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?
44. Angry Birds Deployment Pipeline
Backup
SVN
Storage
Commit Install on Selenium Performance
Unit Tests
and Build „latest“ Acceptance Tests Tests
Build Downstream and Test Strategy
Feedback to Developers
46. Angry Birds Deployment Pipeline
Install on Cloud Integration Cloud
Deployment Copy to S3 Deployment Tests deployment
System Staging AOE + Rovio production
47. Cloud Deployment
R53
Deployment „Version 88“ DNS Deployment „Version 89“
Varnish Array Start new Varnish Array by
release
ELB V V V ELB V V V
✓ cloning old deployment
✓ adjusting release number
Autoscaling Backend Worker Autoscaling Backend Worker
Frontend Array Array Array Frontend Array Array Array
FE FE FE BE BE BE W FE FE FE BE BE BE W
RDS
mySQL
S3
49. Don‘t be scared of
Es geht nicht nur um den Quellcode!
releasing to
production
50. Configuration
Data
Environment
Deployment Source Code
51.
52. 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.“
http://www.agileweboperations.com/lean-agile-devops-related
„Cloud Sprint“
[ Dev + Ops and the Cloud ]
Infrastructure as a Code
[Provisioning with Chef]
53. Beispiel: Provisionierung einer Varnish Instanz
1. 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