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