Orestes, Implementierung und Benchmarking

Felix;florian

PDF preview unavailable. Download the PDF instead.

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