![Page 1: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/1.jpg)
2 Jahre mit Google App EngineErfahrungen und Probleme, Stärken und Schwächen. Ein Praxisbericht.
Per Fragemann, Java User Group Berlin, Dezember 2012
Mittwoch, 19. Dezember 12
![Page 2: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/2.jpg)
Tagesordnung1. Motivation2. Technischer Überblick3. Datenbank4. Services5. Betrieb & Lessons learned6. Bewertung & Diskussion
Mittwoch, 19. Dezember 12
![Page 3: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/3.jpg)
Software as a Service
Erster Prototyp 2010, direkt auf GAE
5 Mitarbeiter
Über uns
Mittwoch, 19. Dezember 12
![Page 4: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/4.jpg)
Unsere Kunden
Mittwoch, 19. Dezember 12
![Page 5: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/5.jpg)
Tools
Mittwoch, 19. Dezember 12
![Page 6: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/6.jpg)
2: ÜBERBLICKMittwoch, 19. Dezember 12
![Page 7: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/7.jpg)
GAE ist performant
• Innerhalb eines SDKs programmieren, JAR hochladen, fertig
• Automatische Skalierung: Manche haben 1 Server-Instanz, andere haben 2000
• Kein Admin notwendig
Mittwoch, 19. Dezember 12
![Page 8: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/8.jpg)
GAE ist PAAS
• Jetty, Datastore, Services & APIs• Sehr mächtige Admin Console• Kein direkter Zugriff auf Server oder
VMs!
PAAS != IAAS
Mittwoch, 19. Dezember 12
![Page 9: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/9.jpg)
Prinzipieller AufbauApplication
Version A (default)
Fi A1 Fi A2 ... Fi An
Version CVersion B
ApplicationApplication
Mittwoch, 19. Dezember 12
![Page 10: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/10.jpg)
Instances: Frontends• Optimiert für Web Requests• 3 Leistungsstufen F1, F2, F4• Automatisches Skalieren:
• Keine Sticky Sessions• 30-Sekunden-Limit• Gemeinsamer Zugriff auf DB & Services
Mittwoch, 19. Dezember 12
![Page 11: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/11.jpg)
Instances: Backends
• Optimiert für längere Aufgaben• 4 Leistungsstufen B1 - B4• Extern adressierbar• Skalieren nicht, man bucht sie nach
Bedarf
Mittwoch, 19. Dezember 12
![Page 12: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/12.jpg)
Unser Setup Demo time!
Mittwoch, 19. Dezember 12
![Page 13: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/13.jpg)
3: DATENBANKMittwoch, 19. Dezember 12
![Page 14: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/14.jpg)
Datastore
• NoSQL:• Perfekt für große Datenmengen• Sehr einfach änderbar
• Bis vor kurzem einzige Persistenz-Lösung
Mittwoch, 19. Dezember 12
![Page 15: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/15.jpg)
It’s not SQL!• Keine Joins• Stark begrenzte Queries
• kein OR, kein NOT, ineffizientes IN • keine functions wie count oder avg()
• Transaktionen nur auf sog. Entity-Groups
Mittwoch, 19. Dezember 12
![Page 16: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/16.jpg)
Beispiel• Alle Nerd-Shirts von “Per”, sortiert nach
Firmenname
Mittwoch, 19. Dezember 12
![Page 17: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/17.jpg)
Beispiel• Alle Nerd-Shirts von “Per”, sortiert nach
Firmenname
Nerd-ShirtID
userID companyIDuserName
companyName
UserID
namecoding skills
CompanyID
namecountry
Mittwoch, 19. Dezember 12
![Page 18: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/18.jpg)
Eventual Consistency
• Objekt wird gespeichert.• Objekt wird aber erst nach einigen
Sekunden lesbar• Problem: Denormalisierung vs Eventual
Consistency
Mittwoch, 19. Dezember 12
![Page 19: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/19.jpg)
Datastore (2)• Eigentlich ist Datastore für uns zu groß• Latenzzeit höher als bei typischer DB• Vorteil: Programmierung für Datastore
sehr gut abschätzbar. • Keine Überraschungen wie Deadlocks,
Performance Degradation etc
Mittwoch, 19. Dezember 12
![Page 20: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/20.jpg)
Low Level API
ARGH!
Mittwoch, 19. Dezember 12
![Page 21: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/21.jpg)
JDO/JPA
ARGH!
Mittwoch, 19. Dezember 12
![Page 22: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/22.jpg)
Objectify
Objectify ofy = ObjectifyService.begin();Query<User> userQuery = ofy.query(User.class)
.filter("boss", viewedUser)
.filter("isActive",true);List<User> teamMembers = userQuery.list();
Easy! And has caching!
Mittwoch, 19. Dezember 12
![Page 23: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/23.jpg)
4: SERVICESMittwoch, 19. Dezember 12
![Page 24: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/24.jpg)
Push Queue
• Web Hooks: URL verzögert aufrufen• Queues haben Durchsatz-Limits, Retry-
Regeln• Man umgeht 30-Sekunden Limit• Last-Steuerung• Gut kombinierbar mit Cron Jobs
Mittwoch, 19. Dezember 12
![Page 25: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/25.jpg)
Pull Queue
• Eigene Applikation muss sich um Abarbeitung kümmern
• Feinere Steuerung möglich• Queue kann auch mit REST abgefragt
werden
Mittwoch, 19. Dezember 12
![Page 26: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/26.jpg)
Memcache• Zugriff auf DB ist langsam• Je weniger Zugriffe pro Request desto
besser• Alles wichtige immer in Memcache
speichern• Memcache ist Instanz-übergreifend
Mittwoch, 19. Dezember 12
![Page 27: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/27.jpg)
Data Caching
Data Store
Memcache
2 n3 ...1Instance-cache &Request-cache
Mittwoch, 19. Dezember 12
![Page 28: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/28.jpg)
PageSpeed Service
• Optimiert vollautomatisch das Frontend• JS minification & combination• Image optimization• CSS inlining
• Regeln frei wählbar
https://developers.google.com/speed/docs/mod_pagespeed/config_filters
Mittwoch, 19. Dezember 12
![Page 29: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/29.jpg)
MapReduce• Parallele Bearbeitung großer
Datenmengen• Nicht auf GAE beschränkt• Aber GAE sehr gut geeignet• Terabytes von Daten, Hunderte von
Servern? Kein Problem.
http://www.youtube.com/watch?v=EIxelKcyCC0
Mittwoch, 19. Dezember 12
![Page 30: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/30.jpg)
Easy deployment
• “ant update”
Mittwoch, 19. Dezember 12
![Page 31: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/31.jpg)
Appstats
Mittwoch, 19. Dezember 12
![Page 32: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/32.jpg)
5. BETRIEB
Mittwoch, 19. Dezember 12
![Page 33: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/33.jpg)
Unerklärliche Fehler• Es können auch jederzeit einfach so
Fehler auftreten, z.B. “bei 5% aller Requests”
• Man kann dies im Forum und im Issue Tracker melden. Und dann beten.
• Meistens werden sie innerhalb einiger Stunden bis Tage gelöst.
Mittwoch, 19. Dezember 12
![Page 34: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/34.jpg)
Uptime
• Komplettausfälle sind extrem selten. 2 Mal in den letzten zwei Jahren• 3 Stunden Ende Oktober• 20 Minuten Mitte November
Mittwoch, 19. Dezember 12
![Page 35: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/35.jpg)
Uptime
• Komplettausfälle sind extrem selten. 2 Mal in den letzten zwei Jahren• 3 Stunden Ende Oktober• 20 Minuten Mitte November
Mittwoch, 19. Dezember 12
![Page 36: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/36.jpg)
Latenzzeit
• Keine Garantien!
Mittwoch, 19. Dezember 12
![Page 37: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/37.jpg)
Latenzzeit
• Keine Garantien!
Mittwoch, 19. Dezember 12
![Page 38: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/38.jpg)
Startup Time• Kein Request darf mehr als 30
Sekunden dauern• Oft genug drückt App Engine ein Auge
zu• Aber nicht immer! • Manchmal ist 10s das Limit!
Mittwoch, 19. Dezember 12
![Page 39: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/39.jpg)
Startup Time (2)• Application Startup muss schnell
gehen! • besser kein Spring benutzen..• Abhängigkeiten gering halten• Classloading verschieben• Lazy Initialisation (“is
loadingRequest?”)• .. und allgemeines Performance Tuning
Mittwoch, 19. Dezember 12
![Page 40: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/40.jpg)
Drum prüfe wer sich ewig bindet...
• Nicht alle Libraries/Tools unterstützt• Teilweise vorher klar, teilweise aber
auch nicht• z.B. starke Verschlüsselung
Mittwoch, 19. Dezember 12
![Page 41: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/41.jpg)
Fortschritte in 2012• HTTPS on custom domains
• Cloud SQL
• Starke Verschlüsselung (z.B. BouncyCastle)
• Eigene Threads
• Volltextsuche
• Backup/Restore
• Traffic Splitting
• Page SpeedMittwoch, 19. Dezember 12
![Page 42: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/42.jpg)
6: Bewertung
Mittwoch, 19. Dezember 12
![Page 43: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/43.jpg)
Insgesamt sehr positiv
• Sehr robuste Administration • Sehr hohe Verfügbarkeit• Gute Performance• Skalierbarkeit
Mittwoch, 19. Dezember 12
![Page 44: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/44.jpg)
Kosten• Pro Lese & Schreibzugriff• Pro gespeichterten Daten• Pro CPU Time• In 2011 überraschend stark gestiegen• Google’s Kommunikation nicht ideal• Aber man spart immer noch deutlich
Personalkosten
Mittwoch, 19. Dezember 12
![Page 45: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/45.jpg)
• Startups in B2B
• “Dev-Startups”
• Prototypen
• Risikoaverse Firmen
• Sehr komplexe Applikationen
• Sehr langfristige Projekte
Perfekt für: Finger weg:
Geeignet für: Kritisch evaluieren• Startups in B2C (Kosten
bedenken)
• Nicht-kritische Projekte, auch in traditionelleren Firmen
• Kernprodukt einer bestehenden Firma
• >99.9 Uptime
Mittwoch, 19. Dezember 12
![Page 46: Google App Engine. Zwei Jahre im Produktiveinsatz](https://reader033.vdokument.com/reader033/viewer/2022052321/555a8f49d8b42a991b8b47f3/html5/thumbnails/46.jpg)
Habe fertig!
We’re hiring.500€ Refer-a-friend Bonus!
Mittwoch, 19. Dezember 12