An application I am working on will need to be clustered and implements the following:
a. Each JBoss instance (3.0.4-r2) will contain multiple pools of TCP/IP sockets.
b. Each node of the cluster will have will have the same number TCP/IP pools. Each TCP/IP pool will be have connections to a different host.
c. The client is using JNDI for lookup (RMI/IIOP for communication). This requirement is flexible.
d. State is not maintained for each request.
e. Fail-over is not necessary since the state of the transaction is based on the connection that was used.
f. There is no replication across the cluster.
Requests in the cluster will need to be balanced across
a. The cluster nodes
b. The TCP/IP pools
Each request the cluster receives will be need to be sent to a particular host. Each host will have N connections that are split up across the cluster and are pooled on each cluster.
As such distribution is really across the pools which will fulfill load-balancing requests across the cluster.
Is JBoss capable of analyzing the type of the request, which host is the request going to, and then balancing the requests across the cluster according to which node of the cluster has the least number of active transactions for the particular host? If so what should I take a look at ? I am guessing that I would need to write some custom load code. What are the performance implications of adding this kind of logic into the JBoss clustering implementation ?
Currently we are thinking of using a load balancing appliance such as the BIG-IP. We can setup the BIG-IP to allow us to fulfill our load-balancing requirements. The only issue we have run into is that the JNDI lookup embeds the real IP of the JBoss node. Is it possible to force the JBoss instance to return an IP address that is not bound to the box, such as the Virtual IP address of the BIG-IP ?
Will the use of sub-partitions (is this feature available ?) and smart proxies with HA-RMI a better solution?
Any help will be greatly appreciated.