
Orestes, Implementierung und Benchmarking
Felix;florian
wjax-2012 Why latency kills Database-as-a-Service and how to overcome it
W-JAX 2012
Felix Gessert, Florian Bücklers
DBaaS Probleme: Latenz & Skalierung Orestes
Live Demo
DBaaS
Backend
HTML5 Killer App
DBaaS
Cloud
Cloudstack
SQL Azure Amazon RDS
Xeround
Database.com S3, SimpleDB, ...
Database-asa-Service
...
Software-asa-Service
Platform-as-a-Service
Infrastructure-as-a-Service
Ein Beispiel
bietet an
as-a-Service
1. Anmelden
2. DB starten
3. Killer App entwickeln
4. Grübeln
Hohe Latenz
Dagegen Google
Unverschämt schnell
Wie macht Google das?
Content Delivery Network ,,Google Global Cache"
DNS
Web Cache
Backend
ISP
Google
Was wenn...
auch
Datenbanken
die
Web-Caching
Infrastruktur
? nutzen könnten
Dazu müsste...
Die Datenbank REST/HTTP sprechen
HTTP
HTTP
Dazu müsste...
Web-Caching & Load-Balancing unterstützen
Web Cache LB
Web Cache
Web Caching
Client
Web-Cache
GET Objekt aus Cache
Origin Server
GET Weiterleitung
Weiterleitung Objekt
Bearbeitung
Web Caching
Expiration
Server bestimmt ,,Verfallsdatum"
Revalidation
Etwaige Änderungen erfragen
Web Caches
ForwCaarcdhPeISroPxy
Web Proxy Cache
Peering
RIeSvPerse Proxy
Cache
Client Cache
Clients
Server Cache
Server
Load Balancing
In HW / SW
z.B. Amazon ELB
Load Balancer
Server
HTTP
Überall Caches
MMAMoAoApbopbppibplipeliele Cache
BBrBAroAroAwpowppwpspsepsererr
Browser Cache
Cache
CDN
Load Balancing HTTP
Web Cache Web Cache
DBaaS
Web Cache Web Cache
IaaS Cloud
Daten
Web Cache Analytics
Private Cloud
Überall Latenz
MMAoASoApbhpbppioplipelpe
BBrWAroASowpehwpbpsopssepeirtre
Asynchrone Tasks
PaaS Cloud
E-Commerce Daten
IaaS Cloud
ERP
Analytics
Private Cloud
Orestes
Ein RESTful HTTP Layer für Datenbanken
Horizontale Skalierbarkeit
Transparente und intuitive Datenbankschnittstelle
Unterstützung von Polyglot Persistence
Nutzung von Web Standards
Web Caching
REST/HTTP Verschiedene
Backends JSON
Orestes
Ein RESTful HTTP Layer für Datenbanken
Webbasiertes Monitoring, Deployment, Administrieren
Zugriff mit niedriger Netzwerklatenz
Transaktionen und starke Konsistenz als Option
Web Interface
CDNs & Web Caches
ACID Transactions
Gibt es das nicht schon?
Database-as-a-Service
SQL Azure Amazon RDS
Xeround
Database.com S3
SimpleDB
Azure Tables DynamoDB MongoHQ
Probleme: · Kein REST · Hohe Latenz · Schwere horizontale Skalierung
Gibt es das nicht schon?
CouchDB OrientDB
Riak
NoSQL + REST API
HBase Stargate S3
Azure Tables
SimpleDB InfoGrid ArangoDB
Probleme: · Hohe Latenz · Web-Infrastruktur · Transaktionen & Concurrency
Gibt es das nicht schon?
123 Database APIs:
GeoNames, Freebase and Yahoo Query Language
Mai 2012
Gibt es das nicht schon?
2% 1% 2% 2% 5%
27% 61%
REST SOAP JavaScript Andere GET POST XML-RPC
Probleme: · Keine universelle API
Orestes: Ansatz
Client
Server
Persistence API
Load-Balancing &
Orestes Web-Caching Datenbank
Aufrufe
Wrapper
Database Interface
REST Protocol
REST Protocol
REST Protokoll
Modell: Objektorientierte Persistenz Java: JPA 2
factory = Persistence.createEntityManagerFactory(PU_NAME); EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); Coffee c = new Coffee(); c.setName("Robusta Brasilian Premium."); em.persist(todo); em.getTransaction().commit();
REST Protokoll
Modell: Objektorientierte Persistenz Java: JPA 2
Query q = em.createQuery("select c from Coffee c"); List<Coffee> coffeeList = q.getResultList(); for (Coffee c : coffeeList) {
System.out.println(c); }
REST Protokoll
em.getTransaction().begin();
> POST transaction < 201 Created < Location: /transaction/1
JPA REST
REST Protokoll
JPA
em.persist(coffee); em.flush();
> PUT /db/test.persistent/Coffee/1125899906869258
> If-Match: "2"
{ "_objectInfo": { "oid": "/db/test.persistent/Coffee/1125899906869258", "class": "/db/test.persistent/Coffee", "version": "2" }, "/db/test.persistent/Coffee": { "caffeine": true, "name": "Robusta Brasilian Selection", "countryCode": 15, "parent": null }
}
REST
data /db
namespace /simulation.classes
class /Person
Ressourcen
Orestes server http://orestes.info
transactions /transaction
running TA /8
changes /changeset
Ressourcen
data /db
namespace /simulation.classes
class /Person
Orestes server http://orestes.info
{ "_objectInfo": { "class": "/db/test.persistent/Coffee", "oid": "/db/test.persistent/Coffee/1128", "version": "2" }, "/db/test.persistent/Coffee": { "parent": "/db/test.persistent/Coffee/3917" "caffeine": true, "name": "Robusta Brasilian Selection", "countryCode": 15, }
}
Database Object
transactions /transaction
running TA /8
changes /changeset
Ressourcen
Orestes server http://orestes.info
data /db
Metadaten
transactions /transaction
{
namespace /simulation.classes
"_objectInfo": { "class": "/db/test.persistent/Coffee",
""oviedrs"i:on""/:db"/t2e"st.persistent/Coffee/1128R"e, ssourcen
running TA /8
},
class /Person
"/db/test.persistent/Coffee": { "parent": "/db/test.persistent/Coffee/3917" "caffeine": true,
changes /changeset
references
"name": "Robusta Brasilian Selection", "countryCode": 15,
}
}
changed
references
Database Object
GET PUT POST DELETE
HTTP Interface
matched query
Beispiel
Lade die neuste Version eines Objektes
pm.makePersistent(obj) pm.getObjectById(id) pm.newQuery(qry)
em.persist(obj) em.find(cls,id) em.createQuery(qry,cls)
Java Data Objects
Java
JavaScript Persistence
API
JavaScript
HTTP
Persistence API
GET /db/sim.clas If-None-Match: " Cache-Control: m Accept: applicat
Beispiel
ata cts
a
a ence ort
ript
HTTP
Content Delivery
Networks (CDNs)
20
GET /db/sim.classes/Person/2258
Ca
If-None-Match: "2"
Cache-Control: max-age=0
Co
Accept: application/json
Web Cache
ET
J
Web Cache Cluster
Orestes Protokoll
Internet
Beispiel
GET /db/sim.classes/Person/2258 If-None-Match: "2" Cache-Control: max-age=0 Accept: application/json
Content Delivery Networks (CDNs)
Web Cache
Web Cache Cluster
200 OK Cache-Control:publ
maxContent-Type: appl ETag: "3"
JSON Object
Orestes Protokoll
Internet
Or
Beispiel
Wrapper
ntrol:public, max-age=1209600
Type: application/json "
ct
Orestes Protokoll
HTTP
Versant Object Database
db4o
Wrapper
Database
Beispiel
Wrapper
Wrapper
Content Delivery Networks (CDNs)
258
Web Cache
200 OK Cache-Control:public,
max-age=3600 Content-Type: application/json ETag: "3"
JSON Object
Web Cache Cluster
Internet
Orestes Protokoll
HTTP
Skalierung
Klassische Technik:
Replikation
Master
Slave Slave
Skalierung
Klassische Technik:
Partitionierung (,,Sharding")
Shard 1
FPreatnerz
[G-O]
Shard 2
Shard 3
Skalierung: Web-Caches
LoadBalancer
Cache Cache Cache
RLoeapd lbiaklaantciinogn
Caching Proxy
Cache
Cache
Cache
Cache
Cache
Cache
Sharding
Cache Array Routing Protocol
Cache Cache
Cache Cache Cache
QuerRy-ebpasleidkhaietriaorcnhies
Cache
Cache
Cache
Cache
Replikation GlobualncdontSenhtadrisdtriibnugtion
Skalierung: Web-Caches
...machen es wie Datenbanken
nur ohne Cache Kohärenz und ohne eigene Logik
Aber...
Orestes Orestes
nein
GET /db/ns/42
Cache Hit?
Object, TTL=x
GET /db/ns/42
ja
Object
revalidate
fresh? nein
ja
App
Web Cache
DB
Was ist mit ,,Stale Reads"?
Transaktionen
NoSQL Datenbanken:
,,Transaktionen sind zu aufwendig"
[Stonebraker]
Transaktionen in Orestes
Optimistische Transaktionen:
Kein Locking
Web Caches
Transaction T
Read Phase
Stale Reads?
Validation Phase
Write Phase
Transaktionen in Orestes
Optimistische Transaktionen:
Kein Locking
Start
Transaktionale Operationen
T GET /db/...
PUT /transaction Client: update Read-Set
Versionen überprüfen
PUT /transaction/committed Body: Read-Set
Lost Update
Dirty Read
Nonrepeatable Reads
Phantome
Immer aktuell
Mit Bloom Filtern
App
App
Cache
purge(obj)
hashA(oid)
hashB(oid)
hashA(oid)
hashB(oid)
01 1 1 1
Optimized(BloomFilter)
0 23 1 4 01
Implementierung
Bisher:
Java JDO
Orestes
JavaScript JPA Orestes
APIs
REST
Orestes Orestes
DB4O VOD
DB
Implementierung
In Arbeit:
JavJaPAJDO
Orestes
JavJaCScarciphteJPA Orestes
Orestes DBR4eOdis Orestes MVoOnDgoDB
APIs
REST
DB
Und Open-Source sobald wie möglich.
Benchmark
Launcher Orestes
API: JDO, Modell: Social Network, TCP vs Orestes
WebFronted
WebFronted
WebFronted
Benchmark Instance
Benchmark
...Instance
Benchmark Instance
Squid Web Cache
Internet
Versant Object Database
Amazon EC2 Ireland
165ms
Amazon EC2 California
Run
Run
0
Ergebnis 3
2
1
3
0
2
50
100
150
200
250
Time [s]
Orestes (Squid 3 patched)
reads writes querys other (e.g. transactions)
VOD (client cache)
50
100
150
200
250
Time [s]
1
0
50
100
150
200
250
Time [s]
30.000 DB Objekte, 300 Ops, Lese/Schreib Verhältnis 10/1 Orestes (Squid 3 patched)
Run
0
2
Erg1ebnis
3
0
50
2
50
100
150
200
250
Time [s]
Orestes (Squid 3 patched)
100
150
Time [s]
reads
w2ri0te0s
250
querys
other (e.g. transactions)
Run
1 Orestes (Squid 3 patched)
3
0
50
100 reads 150
200
250
Twirmitees[s]
querys
2
other (e.g. transactions)
Run
1
0
50
100
150
200
250
Time [s]
30.000 DB Objekte, 300 Ops, Lese/Schreib Verhältnis 10/1
Future Work
,,Clientseitige Persistenz"
HTML5 LocalStorage
MMoobbiliele AAAppppp
Browser / Device ofnfline
Orestes REST
DBaaS
Cloud
Zusammenfassung
DBaaS hat 2 besonders große Probleme: Netzwerklatenz
Orestes Orestes
Cache Cache Cache
Internet
Zusammenfassung
DBaaS hat 2 besonders große Probleme: Elastische Skalierung
Orestes Orestes
Internet
LoadBalancer
Cache Cache Cache Cache
Live-Demo
try.orestes.info
NoSQL
Definition nach Edlich et al.
DocumenKtriteriKuemy-Value Column
OGrreaspthes
1. Nicht-relational
Ja
ObjectOriented
CCoouucchh2SbD.kaIaBmslie/eDrbeasrigkDneiytauanufashmgoeroliezgotntaleBigTable Ja (fNüreRoe4aJds)
db4o
3. Open-Source/offen
Mong4o. DScBhemalosiRgkiaeikt
5. Unterstützung von
Hadoop DatenreHplBikaasteion
bald
NeIinnfoGrid
bald
OrientDB
6. Einfache (REST) API
7. EventuaVl oClodnesmistoenrcty
Cassandra
Ja AllegroJa (WGerba-pChaches)
Orestes
Redis
SimpleDB
DEX
Microsoft PowerPoint 2010 Microsoft PowerPoint 2010