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

本文详细介绍了如何在EJB2.x和EJB3.0中配置群集的SessionBeans,包括无状态和有状态会话Bean的配置方法。文中还讲解了如何通过修改jboss.xml文件或使用@Cluster注解来进行配置,并提供了关于负载均衡策略和状态复制优化的具体指导。

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 配置。
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值