Sep 08, 2012
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.
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. Monitoring
(munin, collectd)
Cluster & Cloud
Infrastructure
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
9. DRM Server
Mail Service
Products +
Warehouse
Reporting
Ordermgmt
Manage Warehouse Fullfillment
Giftcards
Braintree
Das Angry Birds Magento Universum
Storefronts
10. DRM Server
Mail Service
Products +
Warehouse
Reporting
Ordermgmt
Manage Warehouse Fullfillment
Giftcards
Braintree
Das Angry Birds Magento Universum
Storefronts
Shipwire
Findest das beste
„Paketrouting“
Verwaltet weltweite
Warenhäuser +
Bestand
14. 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
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
• min, max
• Votingrules for scale up/
down
•fehlerhafte Instanzen
ersetzen
• Provisionierungszeit und
Policies abstimmen
• „Calm time“
Traffic
FrontendArray
EC2EC2EC2
EC2EC2EC2
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. Selenium
Acceptance Tests
Commit
and Build
Build Downstream and Test Strategy
SVN
Backup
Storage
Unit Tests
Install on
„latest“
Performance
Tests
Angry Birds Deployment Pipeline
Feedback to Developers
46. Angry Birds Deployment Pipeline
Install on
Deployment
System
Copy to S3
Cloud
Deployment
Staging
Integration
Tests
AOE + Rovio
Cloud
deployment
production
47. Deployment „Version 89“
Varnish Array
Autoscaling
Frontend Array
Backend
Array
Worker
Array
Cloud Deployment
ELB
Deployment „Version 88“
Start new release by
✓ cloning old deployment
✓ adjusting release number
RDS
mySQL
S3
Varnish Array
Autoscaling
Frontend Array
Backend
Array
Worker
Array
ELB
WFE FE FE BE BE BE
V V VV V V
WFE FE FE BE BE BE
R53
DNS
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.“
„Cloud Sprint“
[ Dev + Ops and the Cloud ]
Infrastructure as a Code
[Provisioning with Chef]
http://www.agileweboperations.com/lean-agile-devops-related
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