JBoss World Barcelona Template
Download
Report
Transcript JBoss World Barcelona Template
JBoss Clustering
An Overview
Bela Ban ([email protected])
Lead JGroups, Manager Clustering Group
© JBoss Inc. 2006
Topics
• What is clustering?
• JBoss/JEMS Clustering Components
JGroups, JBoss Cache, HA-JNDI, SLSBs,
SFSBs, HTTP session replication, Entity
beans, EJB3 and POJO Clustering
© JBoss Inc. 2006
2
Why JBoss Clustering?
• Transparent
No stub re-compiling!
Client doesn’t know about clustering
aspect
Cluster is maintained automatically
Modular/stack approach
• Open source
No extra cost to activate clustering
Fairly robust
24/7 production support
© JBoss Inc. 2006
3
Clustering Terminology
•
Scalability
•
High availability
•
A way to obtain high availability and better performance by
dispatching incoming requests to different servers
Session affinity (or stickiness)
Failover
•
Services are accessible with reasonable (and predictable)
response times at any time
E.g., 99.999 (5 Nines in Telco)
Load balancing
•
I want to handle x times the number of concurrent access
than what I have now
Process can continue when it is re-directed to a “backup” node
because the original one fails
State needs to be available on backup
Fault tolerance
A service that guarantees strictly correct behavior despite
system failure
© JBoss Inc. 2006
4
Clustering Overview
Failover
State
Replication
R1
Load
Balancer
R3
R2
R1
R3
R2
© JBoss Inc. 2006
5
JBoss Thin Client Clustering
• Front end load balancer
Software
• Apache httpd and JBossWeb
Apache with mod_jk/mod_proxy
JBossWeb (Tomcat on steroids)
Hardware
• F5 Big IP
© JBoss Inc. 2006
6
JBoss Fat Client Clustering
• Client uses smart proxy retrieved from
JNDI
• HA smart proxy
Based on Remoting (EJB3.0) or RMI (EJB2.1)
Has load balancing policy, e.g., Round-Robin
Has failover capability (sticky), e.g., detect call
failure
• HA smart proxy has logic inside
• Logic is pluggable, users can provide their
own
Failover policy
Load balancing, e.g. based on load or weight
© JBoss Inc. 2006
7
Running JBoss Cluster – Basic Steps
• Use JBoss’ “all” configuration
run.bat -c all
./run.sh -c all
• The “all” configuration contains everything
needed for clustering:
It has all the libraries for clustering
JGroups.jar, jboss-cache.jar
Clustered beans (cluster-service.xml)
HA-JNDI
HTTP session replications (tc5-clusterservice.xml)
Farming
HA-JMS
•
© JBoss Inc. 2006
8
Clustering divided in 3 parts
• Client-cluster communication
Formerly HA-RMI, no HA-Remoting
Load balancing and failover logic for fat
clients
• State replication (inside cluster)
JBoss Cache
• HTTP session, SFSBs, DistributedState
• Cluster communication (inside cluster)
Method calls across all cluster nodes
• Cache invalidation, HA-JNDI, Farming
© JBoss Inc. 2006
9
Clustering Stack
JBossCache
HARemoting
Farming
Messaging
Hibernate
Distributed
State
jBpm
Entity
SFSB
HTTP
HA-JNDI
Distributed
RPC,
Membership
HASingleton
DRM DRM
HAServices
JGroups
© JBoss Inc. 2006
10
What is JGroups?
• A reliable group messaging library
• Reliable messaging
Sequence ordering
• FIFO or total ordering
Flow control
Acknowledgement
Fragmentation
• Manage group membership
Join
Leave
Shun
© JBoss Inc. 2006
11
What is JBoss Cache?
• An in-memory, replicated,
transactional, persistent, and finegrained cache system
• Uses JGroups as the messaging layer
• Ideal for state replication
Transactional
Persistent (and passivation)
Fine-grained field-level replication
Sub-partitioning, Buddy Replication
© JBoss Inc. 2006
12
HA-JNDI
• Clustered JNDI
Partition "Main"
Node 1
Node 3
Node 2
HA-JNDI
HA-JNDI
HA-JNDI
JNDI
JNDI
JNDI
© JBoss Inc. 2006
13
HA Smart Proxies
Server JVM
Local client
Typed
Interface
Typed
Interface
Invocation
JBoss Remoting
011101
Client
Dispatcher
Client JVM
Port 3873
AOP Container
dynamicInvoke(Invocation)
Local proxies
•
localInvoke(Method, args)
Remoting
Connector
Remote Proxy
•
Local Proxy
Local proxies have direct reference to container
localInvoke() creates invocation in container
Remote proxies
Remote proxies create invocation on client (method, args,
ObjectName)
Communicate via Remoting framework
© JBoss Inc. 2006
14
JBoss Remoting
•
JBoss Remoting is a framework with a single, simple API
for making network based invocations and other network
related services.
•
•
Client – the external API access point for client code.
Client/Server Invoker – protocol specific implementation. For example,
SocketClientInvoker and SocketServerInvoker.
Invocation Handler – end target interface implemented by user that
receives the invocation from the client.
•
© JBoss Inc. 2006
15
SFSB Configuration in EJB 2
<enterprise-beans>
<session>
<ejb-name> ClusteredSessionBean </ejb-name>
<jndi-name> ClusteredSessionBean </jndi-name>
<clustered>True</clustered>
<cluster-config>
<partition-name>MyPartition</partition-name>
<home-load-balance-policy>
org.jboss.ha.framework.interfaces.RoundRobin
</home-load-balance-policy>
<bean-load-balance-policy>
org.jboss.ha.framework.interfaces.FirstAvailable
</bean-load-balance-policy>
</cluster-config>
</session>
© JBoss Inc. 2006
16
SFSB Configuration in EJB3
import org.jboss.ejb3.remoting.Clustered;
@Stateful
@Clustered (loadBalancePolicy = FirstAvailable.class, partition = ”MyPartition”)
public class ClusteredSessionBean implements ClusteredSession {
}
© JBoss Inc. 2006
17
Entities
• Use JBoss Cache as Hibernate’s 2nd level
cache
Default cache in ejb3-entity-cache-service.xml
jboss.cache:service=EJB3EntityTreeCache
Configure in META-INF/hibernate.cfg.xml per app
•
© JBoss Inc. 2006
18
Entities
<hibernate-configuration>
<session-factory>
<!-- Clustered cache with TreeCache -->
<property name="cache.provider_class">org.jboss.ejb3.entity.TreeCacheProviderHook</property>
<!– Object Name of cache to use -->
<property name="treecache.mbean.object_name">jboss.cache:service=EJB3EntityTreeCache</property>
<!-- Define cached entities and collections -->
<class-cache class="org.jboss.ejb3.tutorial.clusteredentity.bean.Customer" usage="transactional"/>
<class-cache class="org.jboss.ejb3.tutorial.clusteredentity.bean.Contact" usage="transactional"/>
<collection-cache collection="org.jboss.ejb3.tutorial.clusteredentity.bean.Customer.contacts"
usage="transactional"/>
</session-factory>
</hibernate-configuration>
© JBoss Inc. 2006
19
Future
@Entity
@Replicated(mode=asynchronous,type=BuddyReplication,BackupCopies=1)
public class Pojo {
@id
long key;
@transient
int cacheID;
}
• Common set of annotations
@Replicated, @Singleton, @N-lton, @Farmed,
@Remote
• Integration into EJB3 (detach and attach
extended to replication)
© JBoss Inc. 2006
20
HTTP Session Replication
• JBossWeb
• Replication granularity
Session
Modified attributes
Modified fields
• Implemented using JBoss Cache
© JBoss Inc. 2006
21
Granularity: SESSION
• Entire http session is replicated
• User defines whether getAttribute()
call marks a session as dirty
If attribute value is mutable, the
application can modify session state
without calling setAttribute()
Operates blindly (application may not
have changed the object)
After each HTTP request the entire
session is serialized and replicated
© JBoss Inc. 2006
22
Granularity: SESSION
// … if replication triggered by getAttribute() is disabled:
Pojo pojo = (Pojo)session.getAttribute(“pojo”);
pojo.setName(“Ben”);
session.setAttribute(“pojo”, pojo); // Done manually to replicate the session
// … if replication triggered by getAttribute() is enabled:
Pojo pojo = (Pojo)session.getAttribute(“pojo”); // Session will be replicated
return pojo.getName();
// Pojo was not actually changed
© JBoss Inc. 2006
23
Granularity: ATTRIBUTE
• Only attributes marked as dirty are
replicated.
More efficient than session granularity
User still needs to manage object
relationship
• Can still configure whether
getAttribute() marks the attribute as
dirty
Pojo pojo = (Pojo)session.getAttribute(“pojo”);
pojo.setName(“Ben”);
session.setAttribute(“pojo”, pojo); // Only attribute “pojo” gets replicated!
© JBoss Inc. 2006
24
Granularity: FIELD
• Replication is on Pojo field level where Pojo
has to be instrumented with AOP
Annotation or XML
• Object relationships are maintained
• Available beginning with JBoss 4.0.4
Person joe = (Person)session.getAttribute(“joe”);
joe.setName(“joe”); // Only this field gets replicated.
Person mary = (Person)session.getAttribute(“mary”);
mary.setAge(41); // Only this field gets replicated.
Address addr = new Address(“San Jose”, 95123);
joe.setAddress(addr);
mary.setAddress(addr); // addr only gets replicated once; shared ref is maintained
© JBoss Inc. 2006
25
Granularity: FIELD
• When a Pojo object size is huge, e.g.,
a long List of size 100K, field level
replication is efficient!
Subsription subs =
(Subscription)session.getAttribute(“subscription”);
// What if list is size of 100K?
List mailingList = (List)subs.getMailingList();
Person joe = findSubscriber(“joe”, mailingList);
joe.getAddress().setZip(94086); // Only replicates this field!!
© JBoss Inc. 2006
26
Clustering – Configuration
• Session replication is enabled per web
application in WEB-INF/web.xml
• Add <distributable/> to your webapp
• JBoss specific stuff (async vs sync
replication) goes into WEB-INF/jbossweb.xml
© JBoss Inc. 2006
27
Links
• Details on Clustering
Documentation
• http://docs.jboss.com
JBoss AS chapters 16 (Clustering) & 17
(JBossCache and JGroups)
http://www.jboss.com/products/jbosscache
http://www.jboss.com/products/jgroups
Webinars
• http://www.jboss.com/services/online_educ
ation
Training
• http://www.jboss.com/services/training/clu
stering (next: Berlin March 21-24) © JBoss Inc. 2006
28
Questions ?
© JBoss Inc. 2006