Google App Engine. Zwei Jahre im Produktiveinsatz

46
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

description

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.

Transcript of Google App Engine. Zwei Jahre im Produktiveinsatz

Page 1: Google App Engine. Zwei Jahre im Produktiveinsatz

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

Tagesordnung1. Motivation2. Technischer Überblick3. Datenbank4. Services5. Betrieb & Lessons learned6. Bewertung & Diskussion

Mittwoch, 19. Dezember 12

Page 3: Google App Engine. Zwei Jahre im Produktiveinsatz

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

Unsere Kunden

Mittwoch, 19. Dezember 12

Page 5: Google App Engine. Zwei Jahre im Produktiveinsatz

Tools

Mittwoch, 19. Dezember 12

Page 6: Google App Engine. Zwei Jahre im Produktiveinsatz

2: ÜBERBLICKMittwoch, 19. Dezember 12

Page 7: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

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

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

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

Unser Setup Demo time!

Mittwoch, 19. Dezember 12

Page 13: Google App Engine. Zwei Jahre im Produktiveinsatz

3: DATENBANKMittwoch, 19. Dezember 12

Page 14: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

Beispiel• Alle Nerd-Shirts von “Per”, sortiert nach

Firmenname

Mittwoch, 19. Dezember 12

Page 17: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

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

Low Level API

ARGH!

Mittwoch, 19. Dezember 12

Page 21: Google App Engine. Zwei Jahre im Produktiveinsatz

JDO/JPA

ARGH!

Mittwoch, 19. Dezember 12

Page 22: Google App Engine. Zwei Jahre im Produktiveinsatz

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

4: SERVICESMittwoch, 19. Dezember 12

Page 24: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

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

Data Caching

Data Store

Memcache

2 n3 ...1Instance-cache &Request-cache

Mittwoch, 19. Dezember 12

Page 28: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

Easy deployment

• “ant update”

Mittwoch, 19. Dezember 12

Page 31: Google App Engine. Zwei Jahre im Produktiveinsatz

Appstats

Mittwoch, 19. Dezember 12

Page 32: Google App Engine. Zwei Jahre im Produktiveinsatz

5. BETRIEB

Mittwoch, 19. Dezember 12

Page 33: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

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

Latenzzeit

• Keine Garantien!

Mittwoch, 19. Dezember 12

Page 37: Google App Engine. Zwei Jahre im Produktiveinsatz

Latenzzeit

• Keine Garantien!

Mittwoch, 19. Dezember 12

Page 38: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

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

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

6: Bewertung

Mittwoch, 19. Dezember 12

Page 43: Google App Engine. Zwei Jahre im Produktiveinsatz

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

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

• 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

Habe fertig!

We’re hiring.500€ Refer-a-friend Bonus!

Mittwoch, 19. Dezember 12