JBoss企业级应用服务平台群集指南(五)-阿里云开发者社区

开发者社区> 科技小先锋> 正文

JBoss企业级应用服务平台群集指南(五)

简介:
+关注继续查看

1.3 群集Session EJBs

Session EJBs 提供远程的调用服务。它们按照客户端拦截器架构(client-side interceptor architecture)组成群集系统。群集的 session bean 的客户应用程序和非群集的版本是一模一样的,除了对启用 HA-JNDI 查找的java.naming.provider.url系统属性的少许改动。对于客户端来说,不需要任何的源码改动或重新编译。现在,让我们看看怎么分别在 EJB 2.x  EJB 3.0 服务器应用程序里配置群集的 session beans

1.3.1     EJB 2.x里的Stateless Session Bean

群集的 stateless session beans 有可能是最简单的:因为不涉及到状态,调用可以在群集里的任何节点(部署有这个 bean 的节点)上进行负载平衡。要群集一个 bean,你需要修改它的 jboss.xml 描述符,使它包含一个 <clustered> 标签。
 
bean配置里,只有 <clustered> 元素是强制性的它表明bean在集群里工作。The <cluster-config> 是可选的,以上的实例配置里面是它的属性的缺省值。下面是<cluster-config>元素的属性描述:
 
u  partition-name  指明bean所加入的集群的名字。默认值是DefaultPartition. 缺省的分区名也可以用 jboss.partition.name 系统属性跨系统地被指定。
u  home-load-balance-policy指出 home stub 所用来平衡节点上的调用的类。在缺省情况下,代理(proxy)会用 RoundRobin 方式平衡调用负载。你也可以实现自己的负载平衡策略类或持续使用所遇到的第一个可用节点直至其消亡的 FirstAvailable 类。
u  bean-load-balance-policy指出 home stub 所使用的平衡节点上的调用的类。对于home-load-balance-policy属性的注释也同样适用。
 
 JBoss 3.0.x 里,每个客户端 stub 都有自己的可用目标节点的列表。由此会产生某些副作用。例如,每次你需要进行一次调用时,你都为 stateless session bean(应用 Round-Robin 策略)缓存你的 home stub 并重新创建一个远程 stub,每次调用都会下载包含可用节点列表的新的远程 stub。因此,由于第一个目标节点总是列表里的第一项,而且不同的 stubs 之间并没有一个节点的使用记录,调用负载看起来并没有被平衡。在 JBoss 3.2+ 里,proxy families(也就是 "First AvailableIdenticalAllProxies" 负载平衡策略,见章节 1.3.2, JBoss AS 3.2+”) 消除了这个副作用,因为给定 EJB  home  remote stubs 分别在两个不同的族(familiy)里。

1.3.1.1 集群重启操作

我们已经在章节 1.2.1, Client-side interceptor.介绍了 HA smart client architecture。缺省的 HA smart proxy client 只能在群集里一个节点故障时进行失效切换(failover)。如果整个群集都关闭了,代理(proxy)将失去所有群集里可用节点的信息。在这种情况下,代理没有什么办法来恢复系统。当节点重启时,需要在 JNDI/HAJNDI 之外查找代理。
 
3.2.7+/4.0.2+ 版本包含了RetryInterceptor,它可以加入到代理客户端拦截器栈里,允许在这样的重启故障后进行透明恢复(transparent recovery)。为了启用这个机制,你可以设立包含RetryInterceptor invoker-proxy-binding。下面是jboss.xml 配置的一个示例。
 

1.3.2     EJB 2.x里的Stateful Session Bean

既然 JBoss 需要管理状态信息,群集 stateful session beans 就比群集 stateles ssession beans 更为复杂。当 stateful session beans 的状态改变时,所有状态在群集中复制和同步。JBoss AS 使用HASessionState MBean 来为群集的 EJB 2.x stateful session beans 管理分布式的会话状态。在这部分内容里,我们将介绍 session bean 的配置和HASessionState MBean 的配置。

1.3.2.1 配置EJB应用服务

 EJB 应用程序里,你需要为每个 stateful session bean 修改jboss.xml描述符文件并加入<clustered>标签。
 bean 的配置文件里,只有<clustered>标签是强制的,它指出 bean 处在群集系统里。<cluster-config>元素是可选的,我们在上面的配置文件样本里指出了它的缺省属性值。
 
<session-state-manager-jndi-name>标签用来说明这个 bean 所用的HASessionState服务的JNDI名字.
 
余下的标签的描述和 stateless session bean 的描述是一样的。群集的 stateful session bean 的主接口上的动作缺省是基于 round-robin 负载平衡策略的。一旦 bean  remote stub 对于客户可用时,调用将不会再进行负载平衡而""sticky)在列表里的第一个节点上。

1.3.2.2 优化复制状态

因为复制过程是很消耗资源的,为了优化这个过程,你可以选择性地在你的 bean 类里实现有下面的签名的方法:
在复制你的 bean 之前,容器(container)将检测 bean 是否实现了这个方法。如果是,容器会调用 isModified()方法并只在方法返回 true 时复制这个 bean。如果 bean 还没被更改(或者还不够来请求复制,这取决于你的喜好,你可以返回 false,这样复制就不会发生。
这个特性仅仅在JBoss AS 3.0.1+上是可用的。

1.3.2.3 HASessionState 服务配置

all/deploy/cluster-service.xml文件里定义了HASessionState服务 MBean
HASessionState MBean 里的配置属性如下所示:
 
u  JndiName 是一个可选属性,它指定这个HASessionState服务被绑定的 JNDI 名。它的缺省值是 /HAPartition/Default.
u  PartitionName 是一个可选属性,它指定了当前HASessionState协议所服务的群集名称。它的缺省值是 DefaultPartition.
u  BeanCleaningDelay是一个可选属性,它指定了一个状态在多久没有变化后HASessionState 服务就可以清除它,它的单位是毫秒。例如,如果拥有某一 bean 的节点崩溃了,它的兄弟节点将接管这个 bean。但是,这个兄弟节点的容器缓存并不会知道这个信息(因为之前并没有这个信息),也永远不会按照这个 bean 的清除设置来删除它。这就是为什么HASessionState服务需要来做这个清除工作。它的缺省值是 30*60*1000 毫秒(也就是 30 分钟)。

1.3.3     EJB 3.0里的Stateless Session Bean

要在 EJB 3.0 内群集一个 stateless session bean,你所需要做的就是用@Cluster注解来注解(annotatebean 类。你可以把负载平衡策略(load balance policy)和群集分区名当作参数传入这个注解。缺省的负载平衡策略是org.jboss.ha.framework.interfaces.RandomRobin,缺省的群集是DefaultPartition。下面是@Cluster注解的定义。
这里是一个群集的 EJB 3.0 stateless session bean 实现的例子。

1.3.4     EJB 3.0里的Stateful Session Bean

为了在 EJB 3.0 里群集 stateful session beans,你需要用@Cluster注解来标记 bean 实现类,就和我们之前对 EJB 3.0 stateless session bean 做的一样。
JBoss Cache  EJB 3.0 stateful session beans 提供会话状态复制服务(session state replication service)。deploy 目录下ejb3-clustered-sfsbcache-service.xml文件定义了相关的 MBean 服务。文件的内容如下:
PassivationTreeCache MBean 里的配置属性基本上和在章节 2, JBossCache  JGroups 服务 里讨论的标准 JBoss Cache TreeCache MBean 一样。我们再一次忽略了 ClusterConfig 属性(详情请参考部分 1, JGroups 配置” )的 JGroups 配置。


本文转自xudayu 51CTO博客,原文链接:http://blog.51cto.com/xudayu/66655,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重磅首发|如何构建Flutter企业级应用开发?闲鱼技术实战白皮书帮我解答
《Flutter企业级应用开发实战手册》重磅升级!本书由浅入深、娓娓道来地讲述 Flutter 核心知识点,更囊括进阶与深度内容。全书结合知识点,配以相关案例与实践进行讲解,通过思路引导,举一反三。
2309 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
9831 0
挑战未来:下一代企业级应用数据库系统
随着数据量以及数据类型的不断增多,业务需求逐渐从“大数据”转向“快数据”。数据库系统领域充满机遇,也布满挑战,越来越多的企业开始思考下一代数据库技术。在2019年杭州云栖大会开发者峰会上,阿里巴巴副总裁、阿里云智能数据库产品事业部总经理、高级研究员李飞飞就为大家分享了阿里云对于下一代企业级应用数据库系统的实践。
762 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
11591 0
《Spring Boot 实战开发》 —— 基于 Gradle + Kotlin的企业级应用开发最佳实践
第 I 部分 Spring Boot 框架基础 第1章 Spring Boot 简介 第2章 快速开始 HelloWorld 第3章 深入理解Spring Boot 自动配置 第 II 部分Spring Boot 项目综合实战 第4章 S...
1792 0
6967
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载