Title: Borland Load Distribution Submission
1BorlandLoad DistributionSubmission
- Dave Stringer
- dstringer_at_borland.com
- mars/2004-10-08
2Borland submission to the Load Distribution RFP
- Specifications and Products
- The Load Distribution Problem
- Extending the Naming Service
- Future Enhancements
3Specifications and Products
- Load distribution is part of many ORB products
- it has been part of VisiBroker for 10 years
- Load distribution is used by many ORB customers
- they havent been requesting this specification
- they expect any new specifications to protect
their investment or vendors to protect it - Specifications should be based on real technology
- Proof of concept !!
4Object Interactions in CORBA
NS
C
S
REF
1. Bind Name to Object Reference
2. Resolve Name for Object Reference
3. Bind Reference to Object
4. Invoke Operation on Object
. . . Invoke again
5The Load Distribution Problem
- Load Balancing who is responsible for achieving
balance? - heterogeneous systems measuring load
- stability of feed-back systems
- Skewed Distributions
- abnormal versus uniform units of work
- long lived clients
- When to take the load distribution decision
- at discovery, at binding or at invocation?
- how do applications influence the decision?
- Fail-over and Fault Tolerance
- not part of the RFP, should it be part of the
solution? - Load Re-distribution
- recovering a group member gives a skewed
distribution
6Naming Contexts and Object Clusters
- Object Clusters are bound in Naming Contexts
- just like ordinary Naming Contexts
- Object Clusters are transparent
- resolving the clusters name gives a bound object
reference - bindings within Object Clusters are not directly
accessible - The Name of an Object Cluster needs to have two
meanings - the name of the cluster and the name of a member
7Object Cluster in Name Service
S1
NS
C
S2
REF 2
1. Bind Name to Object Reference
and to another
2. Resolve Name for Object Reference
3. Bind Reference to Object
4. Invoke Operation on Object
8Explicit Clusters
- // Client.java
- . . .
- Object obj rootCtx.resolve(My_Server)
- Srvr sa SrvrHelper.narrow(obj)
- . . .
- obj rootCtx.resolve(My_Server)
- Srvr sb SrvrHelper.narrow(obj)
- . . .
- if (sa._is_equivalent(sb))
- System.out.println(
- distribution failed)
- // Server.java
- . . .
- Cluster cluster clusterMgr.create_cluster("RR")
- rootCtx.bind(My_Server", cluster)
- . . .
- Srvr s1 aPOA.create_reference( srvrRepId)
- cluster.bind(First_Member", s1)
- . . .
- Srvr s2 aPOA.create_reference( srvrRepId)
- cluster.bind(Second_Member",s2)
// Server.java . . . Cluster cluster
clusterMgr.create_cluster("RR")
rootCtx.bind(My_Server", cluster) . . . Srvr
s1 aPOA.create_reference( srvrRepId) cluster.bi
nd(First_Member", s1) . . . Srvr s2
aPOA.create_reference( srvrRepId) cluster.bind(S
econd_Member",s2)
// Client.java . . . Object obj
rootCtx.resolve(My_Server) Srvr sa
SrvrHelper.narrow(obj) . . . obj
rootCtx.resolve(My_Server) Srvr sb
SrvrHelper.narrow(obj) . . . if
(sa._is_equivalent(sb)) System.out.println(
distribution failed)
9Implicit Clusters
- // Client.java
- . . .
- Object obj rootCtx.resolve(My_Server)
- Srvr sa SrvrHelper.narrow(obj)
- . . .
- obj rootCtx.resolve(My_Server)
- Srvr sb SrvrHelper.narrow(obj)
- . . .
- if (sa._is_equivalent(sb))
- System.out.println(
- distribution failed)
- // Server.java
- . . .
- Srvr s1 aPOA.create_reference( srvrRepId)
- rootCtx.bind(My_Server", s1)
- . . .
- Srvr s2 aPOA.create_reference( srvrRepId)
- rootCtx.bind(My_Server", s2)
- // AlreadyBound will not be thrown
// Server.java . . . Srvr s1 aPOA.create_referen
ce( srvrRepId) rootCtx.bind(My_Server", s1) .
. . Srvr s2 aPOA.create_reference(
srvrRepId) rootCtx.bind(My_Server", s2) //
AlreadyBound will not be thrown
// Client.java . . . Object obj
rootCtx.resolve(My_Server) Srvr sa
SrvrHelper.narrow(obj) . . . obj
rootCtx.resolve(My_Server) Srvr sb
SrvrHelper.narrow(obj) . . . if
(sa._is_equivalent(sb)) System.out.println(
distribution failed)
10Cluster Interface
- Interface Cluster
- Object select()
- // cf. resolving the cluster name at the
parent context - void bind(in CosNamingNameComponent n, in
Object o) - void rebind( . . . )
- Object resolve(in CosNamingNameComponent n)
- void unbind( . . . )
- void destroy()
- void list(in unsigned long how_many, out . .
. bl, out . . . bi) -
11ClusterManager Interface
- Interface ClusterManager
- Cluster create_cluster(in string algorithm)
- Cluster find_cluster(in CosNamingNamingContex
t ctx, - in CosNamingName n)
- Cluster find_cluster_str(in CosNamingNamingCo
ntext ctx, - in string n)
- ClusterList clusters()
122 more (supporting) Interfaces
- Interface NamingContextExtExtended
- void unbind_from_cluster(in CosNamingName
cn, - in Object srvrRef)
- boolean is_ncluster_type(in CosNamingName n,
- out Object c)
-
- Interface NamingContextFactory
- CosNamingNamingContextExt create_context()
- oneway void shutdown()
- ClusterManager get_cluster_manager()
13Future Enhancements
- Consolidate interfaces into the CosNaming
interfaces - Cluster as an alternate implementation of
NamingContext - NamingCluster derived from NamingContext
- Clusters that combine Object References
- Obviates need to declare fail-over alternates at
POA - Federate NamingContexts to Clusters
- Improve scalability of Load Distribution
- Review outstanding RFP requirements
- . . .
14Thank You