动态组件分布的方法和系统的制作方法

文档序号:7721087阅读:176来源:国知局
专利名称:动态组件分布的方法和系统的制作方法
技术领域
本发明涉及负载均衡技术,具体而言,涉及动态的组件分布方法和系统。
背景技术
在企业应用的计算模型中,应用系统所建模和开发的组件具有不同的运算特征和 QOS(Quality of Service)的要求,比如报表组件重在数据的分析和展现,对内存的要求比 较高,成本计算的组建计算密集,对CPU的要求比较高,有些组件适合在后台悄悄地运行而 又不能影响联机交互的响应能力,有些组件是关键的组件,服务首先要得到满足,需要分配 更好更多的资源,有些系统需要按照领域产品进行硬件资源的规划和分配,而不需要调整 代码等等。 企业应用系统中运算类型的多样性和复杂性,考虑到系统的效率、可靠性、稳定性
等因素,按照组件的特征和资源配置情况进行资源分配,是一种经济和高效的方式。 在传统的J2EE的组件模型中,分布式的环境一般通过集群进行定义,集群中各个
部分的组件都是对等的,没有能力根据组件的运算特征和资源情况进行动态的分配指定。 现有的一些解决方案也是从应用层次上进行解决,这要求系统从应用模型上就需
要关系系统的部署方式,导致应用系统需要关心系统的资源配置的拓扑结构,开发配置复
杂,业务逻辑和系统的分布式不能很好分离,系统容易出错。 产品的模块化和组件化、服务化的发展,对组件的分布式部署模型提出了更多的 要求。云计算对传统的集群计算模型和模式提出了新的要求,能够在云中动态透明的划分 组件也是未来的一个发展趋势。无论从哪方面来说都需要一个基础架构技术进行支撑,而 不是简单的从应用提供方案。

发明内容
为解决上述问题,本发明提供了一种动态的组件分布方法,用于在集群中为其管 理的组件动态的分配服务器,所述服务器都分别具有组件名称服务单元、资源分配单元、负 载均衡单元以及路由通信单元,所述方法包括在接收到来自组件请求者的组件请求时,所 述组件名称服务单元根据所述组件请求中的组件名称来创建代理组件并将所述代理组件 返回给所述组件请求者;以及所述组件请求者向所述代理组件发送调用组件请求,所述代 理组件根据所述调用组件请求进行选择以确定最终服务器,并将所述调用组件请求转发至 所述最终服务器。 在上述技术方案中,所述代理组件根据所述调用组件请求进行选择以确定最终服 务器进一步包括所述代理组件请求所述资源分配单元以确定集群中运行对应于所述组件 请求的组件的所有可能的服务器;以及所述资源分配单元根据对应于所述组件请求的所述 组件的负载属性来确定所述最终服务器。 在上述技术方案中,所述负载属性进一步包括本地服务器优先、强制负载均衡、 循环热备、单点以及所述所有服务器全服务。
在上述技术方案中,进一步包括,当所述负载属性不是所述本地服务器优先时,所
述代理组件将所述所有服务器的信息发送给负载均衡单元,所述负载均衡单元根据所述服 务器的信息,按照预定负载均衡策略选择所述最终服务器。 在上述技术方案中,进一步包括,所述预定负载均衡策略为所述负载均衡单元根
据所述所有服务器中每个服务器的负载权重和当前实际运行负载以及组件所声明的负载 属性来确定所述最终服务器。 在上述技术方案中,进一步包括,当所述最终服务器不是本地服务器时,所述代理 组件通过路由通信单元将所述组件请求转发给所述最终服务器。 在上述技术方案中,进一步包括,所述集群中的所有服务器中的各个组件名称服 务单元、资源分配单元以及负载均衡单元中的内容保持同步。 本发明还提供一种动态分布组件的系统,所述系统中的所有服务器上都分别包括 组件名称服务单元、资源分配单元以及路由通信单元,其中所述名称服务单元,用于在接 收到来自服务请求者的组件请求之后,根据所述组件请求中的组件名称来创建代理组件并 将所述代理组件返回给所述组件请求者;所述资源分配单元,用于在接收来自所述组件请 求者的服务请求之后,确定集群中运行对应于所述组件请求的组件的所有服务器,以及根 据对应于所述组件请求的所述组件的负载属性来确定所述最终服务器;以及所述路由通信 单元,用于在所述最终服务器不是本地服务器的情况下,将所述组件请求转发给所述最终 服务器。 在上述技术方案中,所述负载属性包括本地服务器优先、强制负载均衡、循环热 备、单点以及所述所有服务器全服务。 在上述技术方案中,进一步包括负载均衡单元,用于在所述负载属性不是所述本 地服务器优先时,接收来自所述代理组件的所述所有服务器的信息,并根据所述服务器的 信息,按照预定负载均衡策略选择所述最终服务器。 在上述技术方案中,进一步包括,所述系统中的所有服务器中的各个组件名称服 务单元、资源分配单元以及负载均衡单元中的内容保持同步。 通过上述技术方案,采用本发明提供的技术,通过声明和配置的方法,规划不同的 组件的运行环境,使组件之间在交互透明的基础上又能保持运算隔离,消除了彼此对资源 消耗的相互影响。 通过本发明,丰富和扩展了传统的组件分布的模型和调用的模型,例如对开发透 明的方式实现组件master-slave的集群模型、集群单点模型等等,按照资源消耗的程度, 能够把一些计算按照特征分布在不同配置的服务器上如把报表计算分离、把后台调度的任 务分离,这样在不仅不影响联机交易的系统的稳定性的同时,还提高了系统的运行效率。


图1是根据本发明的动态分配组件的方法的流程图;
图2是根据本发明的动态分配组件的系统中服务器的框图;
图3是根据本发明的一个实施例的主要逻辑单元的分布的示意图;
图4是根据本发明的一个实施例的各设计单元的工作过程的示意图。
具体实施例方式
下面将详细参考本发明的优选实施例,根据附图来描述优选实施例的示例。
图1是根据本发明的动态分配组件的方法的流程图。 如图1所示,本发明提供了一种动态分配组件的方法,用于在集群中的服务器上 动态分配组件,所述服务器都分别具有组件名称服务单元、资源分配单元、负载均衡单元以 及路由通信单元,所述方法包括步骤100,在接收到来自组件请求者的组件请求时,所述 组件名称服务单元根据所述组件请求中的组件名称来创建代理组件并将所述代理组件返 回给所述组件请求者;以及步骤102,所述组件请求者向所述代理组件发送调用组件请求, 所述代理组件根据所述调用组件请求进行选择以确定最终服务器,并将所述调用组件请求 转发至所述最终服务器。 在上述技术方案中,所述代理组件根据所述调用组件请求进行选择以确定最终服 务器进一步包括所述代理组件请求所述资源分配单元以确定集群中运行对应于所述组件 请求的组件的所有可能的服务器;以及所述资源分配单元根据对应于所述组件请求的所述 组件的负载属性来确定所述最终服务器。 在上述技术方案中,所述负载属性进一步包括本地服务器优先、强制负载均衡、 循环热备、单点以及所述所有服务器全服务。 在上述技术方案中,进一步包括,当所述负载属性不是所述本地服务器优先时,所 述代理组件将所述所有服务器的信息发送给负载均衡单元,所述负载均衡单元根据所述服 务器的信息,按照预定负载均衡策略选择所述最终服务器。 在上述技术方案中,进一步包括,所述预定负载均衡策略为所述负载均衡单元根 据所述所有服务器中每个服务器的负载权重和当前实际运行负载以及组件所声明的负载 属性来确定所述最终服务器。 在上述技术方案中,进一步包括,当所述最终服务器不是本地服务器时,所述代理 组件通过路由通信单元将所述组件请求转发给所述最终服务器。 在上述技术方案中,进一步包括,所述集群中的所有服务器中的各个组件名称服
务单元、资源分配单元以及负载均衡单元中的内容保持同步。
图2是根据本发明的动态分配组件的系统中服务器的框图。 如图2所示,本发明还提供一种动态分布组件的系统,所述系统中的所有服务器 上都分别包括组件名称服务单元200、资源分配单元202以及路由通信单元204,其中所 述名称服务单元200,用于在接收到来自服务请求者的组件请求之后,根据所述组件请求中 的组件名称来创建代理组件并将所述代理组件返回给所述组件请求者;所述资源分配单元 202,用于在接收来自所述组件请求者的服务请求之后,确定集群中运行对应于所述组件请 求的组件的所有服务器,以及根据对应于所述组件请求的所述组件的负载属性来确定所述 最终服务器;以及所述路由通信单元204,用于在所述最终服务器不是本地服务器的情况 下,将所述组件请求转发给所述最终服务器。 在上述技术方案中,所述负载属性进一步包括本地服务器优先、强制负载均衡、 循环热备、单点以及所述所有服务器全服务。 在上述技术方案中,进一步包括负载均衡单元,用于在所述负载属性为所述强制 负载均衡时,接收来自所述代理组件的所述所有服务器的信息,并根据所述服务器的信息,按照预定策略选择所述最终服务器。 在上述技术方案中,进一步包括,所述系统中的所有服务器中的各个组件名称服 务单元200、资源分配单元202以及负载均衡单元中的内容保持同步。 以下,对根据本发明的一个实施例进行具体说明。其中,主要的设计单元包括组 件名称服务单元、资源分配单元、路由通信单元、负载均衡单元、组件、代理组件、组件服务器。 组件名称服务单元它维护了系统中组件的元数据信息,提供组件的查找和创建 服务。应用通过它请求进行服务的组件。应用在请求该组件时不用关心组件部署的物理拓 扑,只需要组件的名称。其所获得的组件在进行服务时,能够依托下层基础架构的支持进行 通信。 资源分配单元一种通过配置进行组件在服务器中的分布的配置装置,他维护了 一个表格,声明了组件和服务器之间的分配关系。资源分配单元可以动态的配置和修改。
路由通信单元组件之间进行通信的装置,负责处理服务器之间的通信行为。
负载均衡单元当一个组件运行在多个的服务器上时,按照负载均衡的策略进行 组件服务的负载均衡,它维护了服务器的负载权重和服务器的当前负载等信息,为组件分 布提供了动态性支持。 组件服务器一种物理的服务器,组件驻留其上面,提供组件的运行的资源环境。
组件提供服务的最小单元,运行于组件服务器上。 代理组件它和其代理的组件具有同样的外观界面,它把资源分配单元、路由通信 单元和负载均衡单元的逻辑进行组织,最终代理到运行于特定服务器的组件上,从而外部 系统不用关心服务组件的分布情况。 各个单元在各个物理服务器上分布如图3所示,由图3可以看出在集群中,各单元 在代理服务器和组件服务器的分布情况 组件服务器A、 B…具有组件名称服务单元、负载均衡单元、路由通信单元和资源 分配单元。在集群中的所有组件服务器,各设计单元是对等的,信息完全保持一致。
服务组件在个服务器上的分布是由资源分配单元配置指定的,服务组件在集群中 的运行是不对等的。
图4示出了根据图3所示的配置系统的工作过程。如图4所示 1.在需要一个组件服务时,服务请求者需要向名称服务单元为请求一个组件进行
服务; 2.名称服务单元,根据系统维护的组件的元数据信息,创建一个代理组件返回给 请求服务者; 3.服务请求向代理组件请求一个服务调用; 4.代理组件向资源分配单元请求组件运行所在的服务器信息;
5.资源分配单元返回所请求组件运行所在的服务器信息; 6.代理组件根据组件运行的服务器信息,向负载均衡器请求在其中分配一个服务 器; 7.负载均衡单元根据返回的服务器信息,按照负载均衡的策略选择一个服务器;
8.代理组件通过路由通信单元把请求转发给组件运行的最终服务器,最终由组件
7提供服务。 其中,技术的主要关键点 通过名称获得的代理组件与组件具有同样的外观界面,它提供组件动态分布的基 础架构性支持,从而不会影响到组件的开发模式,因此实现了开发模式对应用的透明
所有服务器上的组件名称服务单元是一致的,所有服务器上提供同样的组件查找 创建服务,实现了组件的物理拓扑分布对应用透明。 所有服务器上的资源分配单元是同步的,对资源分布单元信息的任何修改都会在 集群中进行同步。 其中,资源分配单元维护一个表格,该表格是个三元组(组件名称,服务器,负载 属性),这些信息充分地描述了特定组件运行的一个或者一组服务器,负载分格具有五个 值, 一个值表示本地优先, 一个值表示强制负载均衡, 一个值表示循环热备, 一个值表示单 点一个值表示全服务。 本地优先是指如果服务请求者和组件运行于同一服务器,直接由本服务器提供 服务,不需要通过路由通信单元; 强制负载均衡是指无论组件是否运行于本地服务器,都需要进行负载均衡以选 择适当的服务器进行服务; 循环热备是指组件是否运行于一组本地服务器,对任何服务器上该组件的请求 都会负载均衡,且产生一个进行互相备份的指令; 单点是指组件只能由特定的一台服务器提供服务,其他部署该组件的服务器对 该组件来说处于非激活状态; 全服务对所有服务器进行轮番的服务请求。
负载属性是个可选的信息,默认为本地优先。 负载均衡单元在实践中,负载均衡单元维护了一个三元组(服务器,权重,当前 负载),表示了一个服务器在负载均衡中的权重和当前负载,这个实现中负载均衡单元维护 的信息是在所有服务器上同步的。负载均衡的任何其他实现,都要求负载均衡信息在所有 服务器上保持一致。 下面在以简单的例子来描述本发明的实现。 假设要设计一个组件ComponentA,它在集群中只能运行于特定的服务器,假设为 服务器ServerA,在开发组件的时候,集群中有ServerA, ServerB, ServerC等多个服务器, 开发不需要任何特别的考虑
public class ComponentA(
...


... }
} 在环境配置和实施时,可以通过一个配置声明该组件所运行的服务器(默认情况 下都是本地服务器优先),如
public String getServerName()
〃获取当前服务器的名称0080]
0081]
0082]
0083]
0084]
0085]
0086]
0087] lookup(
0088]
0089]
0090]
0091]
0092]
0093]
0094]
0095]
0096]
0097]
0098] ServerB
0099]
0100]
0101]
0102]
0103]
0104]
0105] ServerB
0106]
0107]
0108]
0109]
0110]
〈rimAt>
〈component>ComponentA〈/component> 〈server>ServerA〈/server> 〈rimAt>
这样服务请求者请求该服务时,最终提供服务的服务器为ServerA。 ComponentA test = NamingService. getlnstacne()
"ComponentA");
String str = test.getServerName0 str值永远返回ServerA。
类似的措施,可以把ComponentA分配到多台服务器中 〈r皿At〉
〈component〉ComponentA〈/component〉 〈server〉ServerA〈/server〉 〈server〉ServerB〈/server〉 〈r皿At〉
这样服务请求者请求该服务时,最终提供服务的服务器可能为ServerA也可能为 根据服务器的实际运行负载决定。
还可以指定特定的负载属性,负载属性通过cluster属性指定,例如指明为热备 〈r皿At cluster =,,hotbakup,,〉
〈component〉ComponentA〈/component〉 〈server〉ServerA〈/server〉 〈server〉ServerB〈/server〉 〈r皿At〉
这样服务请求者请求该服务时,最终提供服务的服务器可能为ServerA也可能为 但是在ServerA和ServerB之间会产生一个备份协同的动作。 如果指定负载属性为单点, 〈r皿At cluster = ,, SP,, >
〈component>ComponentA〈/component> 〈server>ServerA〈/server〉 〈server>ServerB〈/server> 0川] 〈進At〉
0112] 这样服务请求者请求该服务时,最终提供服务的服务器为ServerA,当ServerA不 存在的时候才会请求到达ServerB,服务器之间不会产生互相备份的动作。
通过上面结合附图对本发明的实施例的描述,可以清楚的理解,根据本发明的动 态分配组件的方法和系统可以通过声明配置,指定系统中的模块或者组件在集群环境中的
9具体分布,实现按照组件的不同特征进行资源分配的能力。同时组件和组件之间的相互交 互,对应用完全透明,对其而言集群中的资源是对等的,不用关心组件在集群中分布的拓扑 结构,可以解决的主要问题包括 动态的声明某个组件或者模块运行所在的一个服务器或者一组服务器;
负责分布在不同服务器上的组件之间通信,并且对应用透明;
系统内部组件进行通信使处理服务器之间的路由负载均衡;
系统对外服务时的组件通信的路由和负载均衡。 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种动态的组件分布方法,其特征在于,用于在集群中为其管理的组件动态分配服务器,所述服务器都分别具有组件名称服务单元、资源分配单元、负载均衡单元以及路由通信单元,所述方法包括在接收到来自组件请求者的组件请求时,所述组件名称服务单元根据所述组件请求中的组件名称来创建代理组件并将所述代理组件返回给所述组件请求者;以及所述组件请求者向所述代理组件发送调用组件请求,所述代理组件根据所述调用组件请求进行选择以确定最终服务器,并将所述调用组件请求转发至所述最终服务器。
2. 根据权利要求1所述的方法,其特征在于,所述代理组件根据所述调用组件请求进 行选择以确定最终服务器包括所述代理组件请求所述资源分配单元以确定集群中运行对应于所述组件请求的组件 的所有可能的服务器;以及所述资源分配单元根据对应于所述组件请求的所述组件的负载属性来确定所述最终 服务器。
3. 根据权利要求2所述的方法,其特征在于,所述负载属性包括本地服务器优先、强 制负载均衡、循环热备、单点以及所述所有服务器全服务。
4. 根据权利要求3所述的方法,其特征在于,还包括当所述负载属性不是所述本地服 务器优先时,所述代理组件将所述所有服务器的信息发送给负载均衡单元,所述负载均衡 单元根据所述服务器的信息,按照预定负载均衡策略选择所述最终服务器。
5. 根据权利要求4所述的方法,其特征在于,所述预定负载均衡策略为所述负载均衡 单元根据所述所有服务器中每个服务器的负载权重和当前实际运行负载以及组件所声明 的负载属性来确定所述最终服务器。
6. 根据权利要求3所述的方法,其特征在于,还包括当所述最终服务器不是本地服务 器时,所述代理组件通过路由通信单元将所述组件请求转发给所述最终服务器。
7. 根据权利要求1至6中任一项所述的方法,其特征在于,所述集群中的所有服务器中 的各个组件名称服务单元、资源分配单元以及负载均衡单元中的内容保持同步。
8. —种动态分配组件的系统,其特征在于,所述系统中的所有服务器上都分别包括组件名称服务单元、资源分配单元以及路由通信单元,其中所述名称服务单元,用于在接收到来自服务请求者的组件请求之后,根据所述组件请 求中的组件名称来创建代理组件并将所述代理组件返回给所述组件请求者;所述资源分配单元,用于在接收来自所述组件请求者的服务请求之后,确定集群中运 行对应于所述组件请求的组件的所有服务器,以及根据对应于所述组件请求的所述组件的 负载属性来确定所述最终服务器;以及所述路由通信单元,用于在所述最终服务器不是本地服务器的情况下,将所述组件请 求转发给所述最终服务器。
9. 根据权利要求8所述的系统,其特征在于,所述负载属性包括本地服务器优先、强 制负载均衡、循环热备、单点以及所述所有服务器全服务。
10. 根据权利要求9所述的系统,其特征在于,还包括负载均衡单元,用于在所述负载 属性不是所述本地服务器优先时,接收来自所述代理组件的所述所有服务器的信息,并根 据所述服务器的信息,按照预定负载均衡策略选择所述最终服务器。
11.根据权利要求8至10中任一项所述的系统,其特征在于,所述系统中的所有服务器 中的各个组件名称服务单元、资源分配单元以及负载均衡单元中的内容保持同步。
全文摘要
本发明提供一种动态的组件分布方法,用于在集群中为其管理的组件动态的分配服务器,所述服务器都分别具有组件名称服务单元、资源分配单元、负载均衡单元以及路由通信单元,所述方法包括所述组件名称服务单元根据所述组件请求中的组件名称来创建代理组件并将所述代理组件返回给所述组件请求者;所述代理组件根据所述调用组件请求进行选择以确定最终服务器,并将所述调用组件请求转发至所述最终服务器。从而,使组件之间在交互透明的基础上又能保持运算隔离,消除了彼此对资源消耗的相互影响。
文档编号H04L12/24GK101753359SQ20091024307
公开日2010年6月23日 申请日期2009年12月25日 优先权日2009年12月25日
发明者何冠宇 申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1