Java User Group Berlin: Zwei Jahre Produktiveinsatz mit Google App Engine. Ein Abriss über App Engine, Stärken und Schwächen, und Empfehlungen für wen sich App Engine lohnt.
1. 2 Jahre mit Google App Engine
Erfahrungen und Probleme, Stärken und Schwächen. Ein Praxisbericht.
Per Fragemann, Java User Group Berlin, Dezember 2012
Mittwoch, 19. Dezember 12
7. 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
8. 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
9. Prinzipieller Aufbau
Application
Application
Application
Version A
Version B Version C
(default)
Fi A1 Fi A2 ... Fi An
Mittwoch, 19. Dezember 12
10. 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
11. 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
12. Unser Setup Demo time!
Mittwoch, 19. Dezember 12
14. Datastore
• NoSQL:
• Perfekt für große Datenmengen
• Sehr einfach änderbar
• Bis vor kurzem einzige Persistenz-
Lösung
Mittwoch, 19. Dezember 12
15. 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
16. Beispiel
• Alle Nerd-Shirts von “Per”, sortiert nach
Firmenname
Mittwoch, 19. Dezember 12
17. Beispiel
• Alle Nerd-Shirts von “Per”, sortiert nach
Firmenname
Company Nerd-Shirt User
ID ID ID
name userID name
country companyID coding skills
userName
companyName
Mittwoch, 19. Dezember 12
18. Eventual Consistency
• Objekt wird gespeichert.
• Objekt wird aber erst nach einigen
Sekunden lesbar
• Problem: Denormalisierung vs Eventual
Consistency
Mittwoch, 19. Dezember 12
19. 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
24. 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
25. 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
26. 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
27. Data Caching
1 2 3 ... n
Instance-cache &
Request-cache
Memcache
Data Store
Mittwoch, 19. Dezember 12
28. 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
29. 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
33. 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
34. 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
35. 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
36. Latenzzeit
• Keine Garantien!
Mittwoch, 19. Dezember 12
37. Latenzzeit
• Keine Garantien!
Mittwoch, 19. Dezember 12
38. 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
39. 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
40. 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
41. Fortschritte in 2012
• HTTPS on custom domains
• Cloud SQL
• Starke Verschlüsselung (z.B. BouncyCastle)
• Eigene Threads
• Volltextsuche
• Backup/Restore
• Traffic Splitting
• Page Speed
Mittwoch, 19. Dezember 12
43. Insgesamt sehr
positiv
• Sehr robuste Administration
• Sehr hohe Verfügbarkeit
• Gute Performance
• Skalierbarkeit
Mittwoch, 19. Dezember 12
44. 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
45. Perfekt für: Finger weg:
• Startups in B2B • Risikoaverse Firmen
• “Dev-Startups” • Sehr komplexe
Applikationen
• Prototypen
• Sehr langfristige Projekte
Geeignet für: Kritisch evaluieren
• Startups in B2C (Kosten • Kernprodukt einer
bedenken) bestehenden Firma
• Nicht-kritische Projekte, • >99.9 Uptime
auch in traditionelleren
Firmen
Mittwoch, 19. Dezember 12