Vendor Approaches to Load Distribution
Both Orbix and VisiBroker include the ability to distribute requests across multiple instances of an interface, albeit in very different fashions. VisiBroker supports request distribution through its Smart Agent architecture, while Orbix's ability relies on an extension to its Naming Service.
The VisiBroker Smart Agent architecture is implemented through the osagent, which, among other things, is a distributed directory service used by clients to locate needed implementations. When a client binds to an interface, the osagent selects from among all known implementations of that interface in a round-robin fashion.
Iona took a different approach by extending its Naming Service to include what it calls Object Groups. An Object Group is a set of objects sharing a common name in the Naming Service. When an application resolves that shared name, the Naming Service returns a reference to one of the objects within that group, based on the group's selection policy defined when the group was created. The only policies available are round robin and random.
Although implemented in decidedly different fashions, both of these mechanisms suffer from the same limitations: they are not portable, intelligent, or extensible. Orbix's Object Groups are not available under any other implementation of the Naming Service. Further, Object Groups require additional management by the application developer, since objects must be manually added to, and removed from, the group. And, in most cases, the developer must ensure that all objects within an Object Group implement the same interface.
That last restriction is difficult to enforce, since anyone can add an object to an Object Group. Smart Agent alleviates management problems associated with Object Groups by providing a dynamic directory service in which all globally scoped objects are automatically registered and unregistered with the osagent. Request distribution and fault tolerance facilities are available only when the application is using the non-portable _bind method to obtain an object reference.
While additional management requirements and lack of portability are concerns, in most situations the lack of control over the selection mechanism is considered the more severe limitation. This relates to a lack of intelligence in that neither VisiBroker nor Orbix take into account any sort of load in making the object selection. In their defense, trying to define a universally acceptable measure of load would be a futile task. The next best approach would be using the ability to customize their selection heuristics. Unfortunately, neither Object Groups nor Smart Agent allow this. Their mechanisms are fixed, and the developer has only limited ability to influence them and no ability to override them.