Web Services, Java RMI, and CORBA
Download
Report
Transcript Web Services, Java RMI, and CORBA
Web Services, Java RMI, and CORBA
N.A.B. Gray
University of Wollongong
Motivation for study
Increasingly seeing WebServices extolled as
replacement for distributed object systems.
? !
RPC reincarnated; message oriented API.
Images of inefficient protocols and large text transfers.
Reports from previous studies indicating performance hits
as great as 400:1 partially ameliorated by hacking java.net
But wait --- there are new releases!
Have the newer implementations of WS made
things better?
Web Service APIs
Earlier Java (Apache SOAP) implementation rather
unattractive
Construct Message objects
Dispatch Message objects
Unpack results
Current JAXRPC (similar now to .Net) works with
auto-generated client stubs
Program development process and programming
style now very similar for WS, RMI, or CORBA
Web Service ~ stateless server singleton in RMI/CORBA
Development
Web Service
CORBA
WSDL
-----
IDL
-----
wsdl processing
Java-RMI
Java
remote
---
idl compiler
Server (base)class
or interface
Implementation
client
stub
POA
skeleton
client
stub
Implementation
Implementation
rmic
client
stub
Coding
Very similar for WS (JAXRPC), Java-RMI, CORBA
(at least for stateless singleton server)
Client
Obtains proxy stub for remote service
~6 lines of code, differing for implementation
Invokes operations via stub
Server
Implementation class
Instantiated in some “container”
Servlet engine, RMI-process, CORBA/POA framework
Tradeoffs
Development mechanism, and code
complexity essentially the same for all.
Expected Tradeoffs
Supposed higher performance for RMI/CORBA
Greater interoperability for WebService
WebServices might have advantages when clients
and servers in differing organizations,
but can they handle intranet apps.
Scope of study
Freeware only
Sun reference implementations
Ethereal traffic analysis
Hardware
Numerous Sun-5 workstations for concurrent
clients
Sun v480 server
100Mb ethernet
Conditions
Preliminary experiments
Increase number of concurrent clients until see
server saturated and degradation of performance
Run actual trials at much lighter loads where
server still has significant idle time
Aspects
HTTP
Problems of using a hypertext file transfer protocol instead of some
more optimized network protocol
Additional costs
Message traffic
Processing time
Memory
Overall performance
Programming paradigms
What about state?
Deployment – an emergent aspect
My tests …
Three “services”
“calculator” –
“small data”
Stateful!
Minimal data transfers – one integer argument, one integer
response
Stateless server, string argument – small struct as result
“large data”
Simplified model of typical RMI or CORBA intranet application
with client using middleware to access database
Simple requests, variable sometimes large responses.
IDL – see the printed version
interface Demo {
long long clear();
long long add(
in long long val);
…
};
// Factory component only
// relevant in RMI and
// CORBA implementations
interface DemoFactory {
Demo createDemo();
};
typedef sequence<string>
strings;
…
struct Data2 {
string
title;
strings
authors;
…
};
typedef sequence<Data2>
Data2Seq;
interface Demo {
Data2Seq search(
in string request);
};
HTTP – surely not
HTTP protocol
Advantages
Ubiquitous
Tunnels through firewalls
Disadvantages
Stateless
TCP/IP connect; a request; a response; disconnect
Text
Need to buffer messages
HTTP header and message body in different packets
REAL BAD performance in previous studies
First though –
a preliminary check
Main interest is in performance where client
making many requests on service.
But often Web Service examples framed around a
single request
Single shot request similar in all technologies
Establish TCP/IP connection
Submit request
Get response
Web Services the winner
Technology
Time (seconds)
Total Packets
Total data transfer bytes
JAXRPC
0.11
16
3338
CORBA
0.48
8
1111
CORBA with
name server
0.86
24
3340
Java RMI
0.32
48
7670
Single requests
WebService
Single TCP/IP connection
Data transfers not wildly efficient
CORBA
With “stringified IOR” – single TCP/IP connection, efficient, but
slow handling of request
With NameService – extra TCP/IP connection
RMI
Extra connection to rmiregistry
Extra connection to class file server
Stub download cost
Real applications
Remainder of study used clients that
Connect
Submit large numbers of requests (5,000 or
50,000)
Set up costs amortised over many business
requests
HTTP-1.0 (earlier WebService)
Major Problems
Studies by Elfwing, R et al. & Davis, D., et al.
WebService implementations with HTTP-1.0 not
using “keep-alive” – every invocation required
establishment and tear-down of TCP/IP connection
Disconnect by server – with significant time delay
HTTP-1.0 requires Content-length header in
responses => buffering of complete response in
server
HTTP 1.1 – fixed it!
Current implementations use HTTP 1.1
Fix many of problems reported earlier
Gains
Keep-alive:
Provided client submits follow up request within designated
period (default 60s) the TCP/IP connection is kept open and
reused
Client “reset” closedown – no need to hack java.net
Chunked response – no need to buffer entire response
just to send a HTTP 1.0 Content-length: header
Multipart responses
Needed whenever response too large for one
message
WebService – maximally efficient 1460 byte
continuation parts
CORBA – IIOP segmented message (1024 byte
segments)
RMI – weird, multipart response with smallish
arbitrary sized parts (~350 bytes)
Extra costs : data
Example
Technology
Calculator
Data struct
Large data
Packets
Bytes
Ratio
WS
48,931
10,360,814
10.2
CORBA
10,007
1,400,851
1.4
Java-RMI
10,098
1,017,477
1
WS
55,617
16,053,312
7.2
CORBA
10,007
2,236,661
1
Java-RMI
10,050
2,451,790
1.1
1,143,608 1,134,974,047
3.3
WS
CORBA
JAVA-RMI
475,235
344,363,683
1
1,354,377
449,330,931
1.3
Extra costs : time
Calculator
Technology
WS
Client
Data
Large data
Server Client Server
Client
Server
15.0
6
22.8
8.4
1087 551 (436)
CORBA
3
1.9
3.6
2.1
54.2 250 (136)
Java-RMI
2
0.8
4
1.1
148
212 (97)
Extra costs: space
Measured (approximately) only for client
Java system calls to get estimate of memory
usage
Large data example:
CORBA: just under 2Mbyte
Java-RMI: ~2.1Mbyte
WS: 4.6Mbyte (Sax parser so doesn’t create a
parse tree)
Extra costs
Data traffic
WS can generate as much as 10x traffic
But on more realistic examples differences less marked
Traffic may not be too great an issue for intranet applications where
have high bandwidth local connections
Processing
Client-side: maybe 6x cost of Java-RMI client; but client process
probably lightweight thing dominated by GUI and network wait
times.
Server side: similar excess cost, but difference less marked in
realistic application
Memory
Shouldn’t really be an issue
Server Throughput
Server impacted
7 x CPU load
6 x traffic
Limit number of concurrent clients handled on
particular hardware
Brief study using increasing numbers of clients,
measuring point where server “fully loaded”
Number of clients
Approximate number of requests per second
Throughputs
calculator
clients
time
data
Ops/s
clients
time
Large data
Ops/s
clients
time
Ops/s
WS
~6
32
940
~5
39
640
3
208
7
CORBA
~7
6.5
>5,000
~6
7.8 >3,500
2
50
20
4 >12,500
>10
8 >6,000
2
45
22
JavaRMI
>10
Some tradeoffs
Server throughput
Java RMI can be up to 10x greater than a webservice implementation in Tomcat
Difference declines with more realistic
application involving significant data transfers
Dual solution?
Java-RMI, and JAXRPC/Tomcat (WS)
Server code essentially identical
Java class implementing Remote interface
Develop once, two deployments
WebService in Tomcat for internet clients
Java-RMI for intranet clients
State
WS; State; HTTP-cookies
WWW-services needed state support for their
shopping carts etc
Netscape hacked stateless HTTP protocol via
introduction of “cookies”
Normal use: cookie is identifier key, state held in
a “session” storage object on server side
Same hack works for WS deployed using
HTTP as communications protocol
Configuring stateful service
Deployment switches for .Net, Apache
SOAP, and JAXRPC systems – both client
and server side.
With JAXRPC server in Tomcat
Implementation class supports second interface
which has hook functions allowing access to
Tomcat’s servlet session variables
Stateful web service
Session context provides hash-map like structure
for storing named data objects
“Calculator” illustrative example in paper
Code
Ugly if actually store state variable in “session context”
Cleaner if actual implementation object (and its internal
state) are stored as session state for a Web Service object
that acts as a proxy
Analogies
WS implementation like CORBA “tie” class
Possibly better analogy with CORBA POAlocator
Session key (from cookie) acting as object-id
WS class locates instances of corresponding
business object and invokes method
Stateful iterator
Typical CORBA usage wouldn’t return large
sequence like that needed for “large data” example
– instead would have reference to stateful iterator
returned.
Easy to implement a WS analogy with simple
stateful iterator as session variable
One practical effect – WS client no longer more
memory demanding than CORBA client
Deployment
Deployment and stability
Not initially one of aspects to explore
Possibly the best reason to swap to a Web
Service style implementation!
Web Service
Service packaged as servlet to run in Tomcat or
similar
Auto-generation of all web.xml deployment files
Tomcat
Easy to administer
Persistent configuration and deployment data
Auto-restart
Hot substitution and addition of code
Lots of experienced administrators
CORBA – 2nd
CORBA daemon (e.g. orbd)
Persistent name service
Restarts servers when required
Relatively easy to use
Less likely to have experienced administrator
Java RMI
Server side:
rmiregistry
HTTP server handling class file distribution
Services must be pre-launched
Alternatively, even more complexity with rmid
No persistent configuration data
Fragile
Complicated (rules regarding location of .class files etc)
Conclusions
Web Services viable
Processing time and data traffic costs are
significantly higher
But:
Buy a faster CPU, it is cheaper than employing a
programmer and systems administrator capable of
handling RMI
Intranet style applications – likely to have adequate
bandwidth
Performance differences less marked for more realistic
applications than for toys like “calculator”
Tradeoffs: deployment
For many organizations, most important
factor likely to be greater stability and ease
of deployment of Web Service solution