Google App Engine. Zwei Jahre im Produktiveinsatz

Preview:

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.

Citation preview

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

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

Mittwoch, 19. Dezember 12

Software as a Service

Erster Prototyp 2010, direkt auf GAE

5 Mitarbeiter

Über uns

Mittwoch, 19. Dezember 12

Unsere Kunden

Mittwoch, 19. Dezember 12

Tools

Mittwoch, 19. Dezember 12

2: ÜBERBLICKMittwoch, 19. Dezember 12

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

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

Prinzipieller AufbauApplication

Version A (default)

Fi A1 Fi A2 ... Fi An

Version CVersion B

ApplicationApplication

Mittwoch, 19. Dezember 12

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

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

Unser Setup Demo time!

Mittwoch, 19. Dezember 12

3: DATENBANKMittwoch, 19. Dezember 12

Datastore

• NoSQL:• Perfekt für große Datenmengen• Sehr einfach änderbar

• Bis vor kurzem einzige Persistenz-Lösung

Mittwoch, 19. Dezember 12

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

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

Firmenname

Mittwoch, 19. Dezember 12

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

Firmenname

Nerd-ShirtID

userID companyIDuserName

companyName

UserID

namecoding skills

CompanyID

namecountry

Mittwoch, 19. Dezember 12

Eventual Consistency

• Objekt wird gespeichert.• Objekt wird aber erst nach einigen

Sekunden lesbar• Problem: Denormalisierung vs Eventual

Consistency

Mittwoch, 19. Dezember 12

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

Low Level API

ARGH!

Mittwoch, 19. Dezember 12

JDO/JPA

ARGH!

Mittwoch, 19. Dezember 12

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

4: SERVICESMittwoch, 19. Dezember 12

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

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

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

Data Caching

Data Store

Memcache

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

Mittwoch, 19. Dezember 12

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

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

Easy deployment

• “ant update”

Mittwoch, 19. Dezember 12

Appstats

Mittwoch, 19. Dezember 12

5. BETRIEB

Mittwoch, 19. Dezember 12

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

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

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

Latenzzeit

• Keine Garantien!

Mittwoch, 19. Dezember 12

Latenzzeit

• Keine Garantien!

Mittwoch, 19. Dezember 12

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

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

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

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

6: Bewertung

Mittwoch, 19. Dezember 12

Insgesamt sehr positiv

• Sehr robuste Administration • Sehr hohe Verfügbarkeit• Gute Performance• Skalierbarkeit

Mittwoch, 19. Dezember 12

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

• 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

Habe fertig!

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

Mittwoch, 19. Dezember 12

Recommended