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

Upload: per-fragemann

Post on 19-May-2015

2.995 views

Category:

Technology


4 download

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

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