Batches: Unifying RPC, WS and Database access
Transcript of Batches: Unifying RPC, WS and Database access
![Page 1: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/1.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
Batches:Unifying RPC, WS
and Database access
William R. CookUniversity of Texas at Austin
withEli Tilevich, Yang Jiao, Virginia Tech
Ali Ibrahim, Ben Wiedermann, UT Austin
![Page 2: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/2.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
2
Typical Approach to Distribution/DB
1. Design a programming languageFinalize specification, then...
2. Implement distribution/queries as libraryRPC library, stub generatorSQL libraryWeb Service library, wrapper generator
![Page 3: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/3.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
3
Typical Approach to Distribution/DB
1. Design a programming languageFinalize specification, then...
2. Implement distribution/queries as libraryRPC library, stub generatorSQL libraryWeb Service library, wrapper generator
3. Rejected and ignored by communityCORBA, DCOM, RMI are complete disaster
![Page 4: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/4.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
4
Using a Mail Service
int limit = 500;for ( Message m : mailer.Messages ) if ( m.Size > limit ) { print( m.Subject + “: “ + m.Sender.Name); m.delete(); }
![Page 5: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/5.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
5
Using a Mail Service
int limit = 500;for ( Message m : mailer.Messages ) if ( m.Size > limit ) { print( m.Subject + “: “ + m.Sender.Name); m.delete(); } Works great if mailer is a
local object, but is terrible if mailer is remote
![Page 6: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/6.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
6
Goals: Why not Have it All?Low latency One round trip
Stateless No Proxies
Platform independent No Serialization
Clean Server APIs No Data Transfer ObjectNo Server FacadeNo Superclass/type (e.g. java.rmi.Remote)
A Note on Distributed Computing
![Page 7: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/7.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
7
Using a Mail Service
int limit = 500;for ( Message m : mailer.Messages ) if ( m.Size > limit ) { print( m.Subject + “: “ + m.Sender.Name); m.delete(); } Separate local
and remote code!
![Page 8: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/8.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
8
Remote<Mailer> connection = ....;Forest in = new Forest(“A”, limit);Forest mailer = connection.execute(script, in);for (m : mailer.getIteration(“m”)) print(m.getStr(“B”) + “: ” + m.getStr(“C”) );
int limit = 500;Remote<Mailer> connection = ....;batch (Mailer mailer : connection) { for ( Message m : mailer.Messages ) if ( m.Size > limit ) { print( m.Subject + “: “ + m.Sender.Name); m.delete(); }}
for (m : ROOT.Messages) { if (m.Size > In(“A”)) { OUT(“B”, m.Subject);
OUT(“C”, m.Sender.Name); m.delete(); }
B C
RE: testing Will Cook
JVM Summit Dan Smith
... ...
Run remote
script first
![Page 9: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/9.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
9
Batch Pattern
Execution model: Batch Command Pattern1. Client sends script to the server
(Creates Remote Façade on the fly)
2. Server executes the script3. Server returns results in bulk (name, size)
(Creates Data Transfer Objects on the fly)
4. Client runs the local code (print statements)
![Page 10: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/10.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
10
Batch Script to SQL
SELECT m.Subject as B, u.Name as CFROM Message m INER JOIN User u ON m.Sender = User.IDWHERE m.Size > ?
DELETE FROM MessageWHERE m.Size > ?
for (m : ROOT.Messages) { if (m.Size > In(“A”)) { out(“B”, m.Subject); out(“C”, m.Sender.Name); m.delete(); }
Always constant number of queries
![Page 11: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/11.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
11
Batch Script(Subset of JavaScript)
s ::= <literal> variables, constants | e.x fields | e.m(e, ..., e) method call | e = e assignment | e ⊕ e | !e | e ? e : e primitive operators | if (e) { e } [else { e }] conditionals | for (x in e) { e } loops | var x = e; e binding | OUTPUT(label, e) outputs | INPUT(label) inputs | function(x) { e } functions⊕ = + - * / % < <= == => > && || ;
![Page 12: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/12.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
12
ExecuteA
TCPSend
A
TCPReceive
B
?B
DBSQLGen
A
Batch Providers
Forwarder:
Execution:
![Page 13: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/13.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
13
ExecuteA
TCPSend
A
TCPReceive
B
?B
DBSQLGen
A
Batch Providers
Forwarder:
Execution: 568 LOC in Java
XML, JSON, ...(no fetish about
transport)
![Page 14: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/14.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
14
Combining Batch Providers
TCPSend
(Python)
TCPReceive(Java)
Execute(Java)
TCPSend(JS)
TCPReceive(Java)
DBSQLGen
(Java)
Traditional RPC:
Database Connection:
![Page 15: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/15.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
15
I = Local1O = Execute(Remote, I)Local2(O)
The Hard Part
Add Batch Statement to your favorite languageJavaScript, Python, ML, F#, Scala, etc
(More difficult in dynamic languages)
Batch (x) {...} Script + Other
Partition(x)
LangToScript
Local1 Remote(no other)
Local2ScriptToLang
This is the part that needs to be written
![Page 16: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/16.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
16
Batch Summary
ClientBatch statement: compiles to Local/Remote/LocalWorks in any language (e.g. Java, Python, JavaScript)
Completely cross-language and cross-platform
ServerSmall engine to execute scripts
Call only public methods/fields (safe as RPC)
Stateless, no remote pointers (aka proxies)
CommunicationForests (trees) of primitive values (no serialization)
Efficient and portable
![Page 17: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/17.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
17
Batch = One Round Trip
Clean, simple performance model
Some batches would require more round tripsbatch (..) { if (AskUser(“Delete ” + msg.Subject + “?”) msg.delete();}
Pattern of executionOK: Local → Remote → Local Error: Remote → Local → Remote
Can't just mark everything as a batch!
![Page 18: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/18.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
18
What about Object Serialization?
Batch only transfers primitive values, not objectsBut they work with any object, not just remotable ones
Send a local set to the server?java.util.Set<String> local = … ;batch ( mail : server ) { mail.sendMessage( local, subject, body); // compiler error sending local to remote method}
![Page 19: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/19.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
19
Serialization by Public Interfacesjava.util.Set<String> local = … ;batch ( mail : server ) { service.Set recipients = mail.makeSet(); for (String addr : local ) recipients.add( addr ); mail.sendMessage( recipients, subject, body);}
Sends list of addresses with the batchConstructors set on server and populates itWorks between different languages
![Page 20: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/20.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
20
Interprocedural Batches
Reusable serialization [email protected] send(Mail server, local.Set<String> local) { service.Set remote = server.makeSet(); for (String addr : local ) remote.add( addr ); return remote;}
Main programbatch ( mail : server ) { remote.Set recipients = send( localNames );
![Page 21: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/21.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
21
Exceptions
Server ExceptionsTerminate the batchReturn exception in forestException is raised in client at same point as on server
Client ExceptionsBe careful!Batch has already been fully processed on serverClient may terminate without handling all results locally
![Page 22: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/22.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
22
Transactions and Partial Failure
Batches are not necessarily transactionalBut they do facilitate transactionsServer can execute transactionally
Batches reduce the chances for partial failureFewer round tripsServer operations are sent in groups
![Page 23: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/23.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
23
Order of Execution Preserved
All local and remote code runs in correct orderbatch ( remote : service ) { print( remote.updateA( local.getA() )); // getA, print print( remote.updateB( local.getB() )); // getB, print}
Partitions to:input.put(“X”, local.getA() ); // getAinput.put(“Y”, local.getB() ); // getB.... execute updates on serverprint( result.get(“A) ); // printprint( result.get(“B”) ); // print
Compiler Error!
![Page 24: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/24.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
24
Lambdasfor (InfoSchema db : connection) for (Group<Category, Product> g : db.Products.groupBy(Product.byCategory)) print("Category={0}\t ProductCount={1}", g.Key.CategoryName, g.Items.count());
Fun<Product, Category> byCategory = new Fun<Product, Category>() {
public Category apply(Product p) {return p.Category;
}};
![Page 25: Batches: Unifying RPC, WS and Database access](https://reader030.fdocuments.us/reader030/viewer/2022032710/623be06ffddd00333a5a82bb/html5/thumbnails/25.jpg)
The
Univ
ersi
ty o
f Te
xas
at A
ust
inJV
M S
um
mit 2
012
25
Available Now...
Batch Java100% compatible with Java 1.7 (OpenJDK)Transport: XML, JSON, easy to add moreAvailable now (alpha)
Batch statement as “for”for (RootInterface r : serviceConenction) { ... }
Full SQL generation and ORMSelect/Insert/Delete/Update, aggregate, group, sorting