[omniORB] Real-time problem with CORBA ?

Stephen Crawley crawley@dstc.edu.au
Tue, 29 May 2001 09:53:08 +1000


>       Now I'm developing an application with CORBA.The client and server 
> must exchange about ten thousand messages per second through LAN. Does 
> omniORB or any
> other CORBA product meet ths requirement?  

That sounds a bit steep to me.  If the client is single threaded, you are 
talking about an average round trip time of 100 msecs ... including all
application-level processing of the messages.

Ultimately, whether it will works will depend on how powerful the client
and server hardware is, how much network bandwidth is available, how
much application level processing each message requires, and so on.
You'd need to do some benchmarking for your network / hardware / OS / ORB
setup to determine maximum throughput for your

> If it doesn't ,what should I do?

Basically you need to restructure your architecture to cut down on the
number of messages required; e.g.

  *  Put more information into each messages; e.g. rather than call N
     operations N attribute values, combine them into a single operation
     that returns all N values in one go.

  *  If your application is sending a stream of data items, aggregate
     the items into sequences rather than sending them one at a time.
     Or consider using the new Asynchronous Messaging Interface.

  *  If you have lots of clients talking to one server, consider
     replicating the server.  Or place a number of proxy servers
     between the client and server that aggregate the traffic.

  *  Consider moving some of the client logic/state into the server, or
     some of the server logic/state into the client, to reduce the need 
     to exchange messages.  A common trick is to have the client cache
     the results of previous calls; e.g. using so-called "smart" proxies.

Get hold of a copy of Henning and Vinoski's "Advanced CORBA Programming
with C++".  They've got lots of good stuff on performance.

-- Steve