Performance

CORBA hat teilweise noch den Ruf, mächtig, aber langsam zu sein. Dies scheint unter anderem auch daran zu liegen, dass bekannte CORBA-Anbieter neben ihrem ORB vor allem auch ganze Applikationsserver mit Transaktionsmonitoren anbieten. Offenbar läßt sich eine reine CORBA-Implementierung nicht mehr gut verkaufen (es sei denn, die Implementierung ist speziell auf embedded Systeme zugeschnitten oder erfüllt besondere Eigenschaften wie Realtime-Fähigkeit). Ein Grund dafür dürfte wohl auch die Konkurrenz der Open Source CORBA-Implementierung sein, die mittlerweile qualitativ hochwertig sind, sich aber auf den eigentlichen Kernbereich beschränken.

Um die Interoperabilität verschiedener Implementierungen zu gewährleisten, spezifiziert CORBA das auf TCP/IP basierende IIOP (Internet Inter-ORB Protocol), das jede konforme Implementierung unterstützen muss. Darüber hinaus können Implementierungen auch noch eigene Protokolle implementieren. Da TCP/IP vor allem für den Netzwerkbereich entwickelt wurde, kann es sinnvoll sein, für die lokale Kommunikation (dh auf einen Rechner beschränkt) ein auf shared-memory basierendes Protokoll zu verwenden, um etwas bessere Performance zu erzielen.

minimumCORBA

Durch den bereits recht großen Umfang der CORBA-Spezifikation ist es nicht mehr möglich, eine vollständige Implementierung auf schwächeren bzw. embedded Geräten zu realisieren. Hier gibt die minimumCORBA-Spezifikation (siehe [21]) vor, was mindestens zu implementieren ist und welche Funktionalitäten weggelassen werden können. Die Spezifikation macht keine Einschränkungen bei der IDL, sodass eine Interoperabilität mit vollständigen CORBA-Implementierungen gewährleistet ist. Weniger häufig benötigte Features wie das Dynamic Invocation Interface und das Dynamic Skeleton Interface sowie die meisten POA-Policies läßt sie weg.

Interface Design

Ein wichtiger Punkt, der die Performance entscheidend beeinflussen kann, ist das Interface Design. Durch das Verteilen der Objekte auf mehrere Rechner und Prozesse ergibt sich zwangsläufig ein größerer Overhead bei einem Methodenaufruf. Daher sollte beim Design darauf geachtet werden, die Anzahl der Methodenaufrufe zu minimieren. Folgendes Beispiel soll verdeutlichen, wie die Performance eines Systems durch Minimierung der notwendigen Methodenaufrufe gesteigert werden kann.

Beispiel 7. IDL mit vielen set- und get-Methoden

interface Intf1
{
  void setA(in long A);
  void setB(in string B);

  long doSomething();

  string getC();
};

Beispiel 8. Zusammenfassen der get- und set-Methoden in einen einzigen Methodenaufruf

interface Intf2
{
  long doSomething(in long A, in string B, out string C);
};