- 浏览: 318545 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
完善自我:
支持一下!
揭秘IT人才特点:中美印日四国程序员比较 -
悲剧了:
好文,看玩thinking in java的提到的异常处理,看 ...
高效的Java异常处理框架(转) -
yin_bp:
开源框架bbossgroups页支持组件异步方法调用哦,详情请 ...
Spring 3中异步方法调用 -
flyjava:
sun的悲哀
Apache怒了,威胁说要离开JCP
集群系统在企业 IT 应用中的部署越来越广泛,基于某个具体业务的应用级集群服务系统也越来越得到重视,围绕这个主题,本文简要地探讨了应用级集群一般性的设计思路,重点针对分层业务资源、业务资源监测器、负载均衡器和故障转移管理器等四部分。
按集群系统的应用范围,大体可分为操作系统级集群和业务应用级集群。通常,操作系统级集群作为底层基础集群架构为业务应用级集群提供操作系统级的集群服务;而业务应用级集群则作为操作系统级集群的子集群,部署在操作系统级集群之上,完成特定业务的集群服务。
Linux 下主要的几个操作系统集群:
- LSF:通过网络将多个异构的集群体系相联系,共享计算资源 ,而用户则以透明的方式来访问这些资源。
- TurboCluster:是一个企业级软件集群系统解决方案,支持异构的网络环境。有较强的可用性和可扩展性。
- Linux Virtual Server:LVS 项目是国内章文嵩博士领导开发的 Linux 服务集群系统,它集合了集群技术和 Linux 操作系统内核实现了一个具有高伸缩性、高可靠性和高可管理性的集群解决方案,同时也为完成大访问量、可灵活部署、高可用的企业级集群系统的开发提供了一个完美的架构。LSF、TurboCluster 和 LVS 三者类似,在体系中都部署了一个负责完成平衡访问负载的主控制机,由它来根据环境数据决定负载均衡策略完成整个访问请求的转发,内部核心处理部分基本上是对外端客户完全透明的。
- MOSIX:与前三者对比有很大的不同,它没有一个单独的专用部件来完成访问请求的负载均衡,所有的服务器节点是都平等的和完全分布的。
- EDDIE:它由 HTTP 网关和特殊的 DNS 服务器组成,共同构成了一个分布式的 WEB 服务集群。
操作系统集群具备的基本特点:
- 提供强大的计算处理能力
- 提供高可用性的应用
- 提供可伸缩的软件硬件部署
- 提供对系统资源强大全面的调度与管理
业务应用级集群在继承操作系统级集群特性的基础上,重点集中在自身所支持的业务特性,也有自身的特点。
业务应用级集群基于具体的业务规则,它将关注焦点放在框架内运行的各个业务资源,以及资源内部或资源之间的业务数据流,结合事先定制的业务策略,进而做出符合业务的管理操作。
业务应用级集群对资源的管理与调度范围相对有限,局限于框架内部的组件;而对于框架之外的组件无能为力,须借助于底层的操作系统级集群的功能进行间接的管理。
业务应用级集群运行在操作系统集群之上作为其子部分,要接受操作系统集群的监管。
本文中讨论的内容就是基于 LVS 体系架构的业务应用级集群的开发。它提供针对对象生命周期的管理、差错检测、自我修复和自我迁移等功能。以下的章节介绍业务应用集群软件框架 BRMF(Business Resource Management Framework,业务资源管理框架)的设计。
分析大多数的业务系统,我们都可以将其业务资源分为两类:形成业务特征的逻辑业务资源和最终执行业务服务运行的物理业务资源。对于这两类资源,往往又以“部分”从属于“整体”的树形层次结构来展现,物理业务资源从属于逻辑业务资源,“从属”的关系决定了二者已具有功能上的一致性。其中,划分粒度的最细单位为 BRU(Business Resource Unit,业务资源单元);若干的 BRU 可以组成 BRG(Business Resource Group,业务资源组),每一个 BRG 就代表了一个完整的业务处理服务过程;若干个 BRG 可以组成一个 BRC(Business Resource Container,业务资源容器),形成一个服务节点。其中,BRU 属于物理业务资源,BRG 和 BRC 属于逻辑业务资源。
BRMF 框架采用严格的分层管理机制,至上而下来看,当前业务资源层只能对下一层的业务资源进行管理;至下而上来看,当前层业务资源层只能接受上一层的管理。总之,只能在相邻的上下两层之间产生管理与被管理的关系,不允许纵向跨层管理,例如 BRC 不能对 BRU 直接进行管理;类似的,也不允许横向上的平层管理,即处于同一层次的业务资源不能相互管理,它们之间是平行且独立的关系,例如从属于 BRC_A 的 BRG_A 不能对从属于 BRC_B 的 BR_B 直接进行管理。如果 BRC 需要对 BRU 实施管理操作,BRC 就必須通过 BRU 所属的 BRG 进行管理指令的下达;对于 BRU 的回馈信息也只能层层上报,即 BRC 只能通过 BRG 才能了解相关的 BRU 的信息。如 表 1 所示为 BRMF 框架中业务资源部署结构。
BRMF 框架业务资源层次部署结构 |
— BRC_1(物理节点,IP: xxx.xxx.xxx.n) |
— BRG_1 |
— BRU_1 |
— BRU_2 |
— BRG_2 |
— BRU_1 |
— BRU_2 |
— BRC_2(物理节点,IP: xxx.xxx.xxx.n+1,RC1 的冗余部署) |
— BRG_1 |
— BRU_1 |
— BRU_2 |
— BRG_2 |
— BRU_1 |
— BRU_2 |
— BRC_3(物理节点,IP: xxx.xxx.xxx.n+2) |
— BRG_1 |
— BRU_1 |
— BRU_2 |
BRU 表示处理业务服务的最细节过程,它是业务服务的直接载体,它与真实的业务之间表现为两种映射关系:
- 一对一关系,即一个 BRU 映射一个业务功能,它能独立的表示某个完整业务生命周期。这种关系下的 BRU 一般只能处理简单的业务服务。
- 多对一关系,这种关系下单一 BRU 只代表业务过程的一个片段,多个 BRU 之间相互依存,并协同处理某个复杂度较高的业务。
通过 BRU,我们可以看到真实的业务规则实施和业务数据流。每一个 BRU 都只从属某一个 BRG,接受 BRG 的管理。
BRG 实现了某个完整的业务生命周期。BRG 由若干 BRU 组合的方式来表现,这种方式更多的是体现出实际业务的逻辑性上,它是若干 BRU 业务逻辑集合的反映,与完整的真实业务功能呈现一对一的关系。BRG 的集合粒度可根据软硬件技术因素和业务规则等因素进行集合或拆分,可分为两种:
- 一般而言,简单的 BRG 体现出了 BRU 与业务之间的一对一关系,即一个 BRG 只集合了一个 BRU,此 BRG 负责处理某个较简单的业务;稍微复杂的 BRG 集合了若干(大于 1)个 BRU 协调处理较复杂的业务服务;
- 特殊情况下,若干 BRG 可以再次被集合形成一个体积更大功能含盖范围更广层次更高的 BRG,以便于表示更加复杂的业务。不过这种情况增加了业务资源的管理复杂度,特别是在发生故障需要做迁移操作时,所以不建议采用。为了在不影响业务服务的前提下,避免这种情况的发生,可考虑重新选择业务资源的粒度进行划分。
在 BRG 的属性中,包括了对 BRU 组成的业务链的定义,从起始输入点,中间过程处理点,到最终输出点。
从逻辑上引入 BRG 的概念,还有一个更重要的原因,就是为了划定出在集群应用系统中故障管理情况下最小的逻辑迁移单元,因此,BRG 还需要具有集群特性 ---- BRG 中所有的 BRU 必須作为一个完整的实体存在,任何一个 BRU 运行失败都代表所属的整个 BRG 运行的失败。在故障转移发生的情况下,BRG 只能做整体性操作,包括重启和迁移等。每一个 BRG 都只从属某一个 BRC,接受 BRC 的管理。
BRC 表示物理上的服务节点,一个 BRC 对外提供若干完整的业务服务过程,若干个 BRC 便形成了更加全面综合的业务服务体系,或者一个提供冗余特性的业务服务体系。BRC 接收负载均衡器转发的客户端访问请求,每个 BRC 都有各自的内部 IP 地址。
在集群系统当中,一般都提供资源的冗余配置,如将两个相同的 BRG 部署在不同的 BRC 上,为实现均衡的负载和故障的平滑处理,以提高服务响应度和保证服务可用性。
可以观察到 BRC、BRG 和 BRU 三者之间存在一种“整体-部分”的树形层次结构。在业务操作方面,为了使这种具有明显树形特点的对象组合拥有操作简易性和一致性,可以用“复合模式(composite design pattern)”来设计展现三者之间的层次关系。这种设计下,树形复合体内部的各个元素对象都拥有共同的接口。当调用元素对象的某个接口时,自动递归地遍历以当前元素为起始根节点的以下的所有节点元素,在遍历的同时对每个经历的元素对象调用相同的接口,达到“一令齐动”的效果。具体讲,就是只需要操作 BRC 即可完成对 BRC 中所有 BRG 的相同操作,操作 BRG 即可完成对 BRG 中所有 BRU 的相同操作。
// 根据业务资源展现出的形态,采用 composite 模式作为开发实现 public interface IElement { // 基本属性 public void setName ( String name ); public String getName ( ); public void setId ( int id ); public int getId ( ); // 业务数据 public void setData ( Object data ); public Object getData ( ); // 结构管理,实现树形的结构 public void addChildElement ( IElement child ); public boolean contains ( IElement child ); public void removeChildElement ( int index ); public void removeChildElement ( IElement child ); public void removeChildrenAll ( ); public void enable(); public void disable(); public IElement getChildElement ( int index ); public int getChildCount(); public int getIndexOfChild ( IElement child); public IElement[] getChildElements ( ); public IElement getParentElement ( ); public void setLeaf ( boolean leaf ); // 如果返回为 true 则表示此业务资源为 BRU,返回 false 则有可能为 BRG 或 BRC public boolean isLeaf ( ); } // 定义业务操作接口 public interface IOperation { // 让 parentElement 业务资源及其以下的所有业务资源执行业务服务 business_1 public boolean doBusiness_1 ( IElement parentElement ); public boolean doBusiness_2 ( IElement parentElement ); public boolean checkDetailsOfBusiness ( IElement parentElement, Map details ); } public interface IBR extends IElement, IOperation { } public class AbstractBR implements IBR { .... public boolean doBusiness_1 ( IElement parentElement ) { // TODO: 实现 parentElement 真实的业务操作 ........ // 实现 parentElement 节点下所有节点的 doBusiness_1 业务的递归操作 for ( int i=0; i<parentElement.getChildCount(); i++) { IElement childElement = parentElement.getChildElement ( i ) ; childElement.doBusiness_1 ( childElement ); } } } // 完成 BRC 自身的服务后,将服务命令传递给 BRG public class BRC extends AbstractBR { ...... } // 完成 BRG 自身的服务后,将服务命令传递给 BRU public class BRG extends AbstractBR { ...... } // 负责完成通过 BRC 和 BRG 下达的服务命令,它是服务处理最核心最主要的执行者 public class BRU extends AbstractBR { ...... } // 测试代码 public class Test { ..... public void fun ( ) { AbstractBR BR = new BRG ( ); // BR 完成 business_1 业务 : // 最终由此业务资源组中的业务资源单元来完成相关的业务实现 BR.doBusiness_1 ( BR ); } } |
为了保证集群系统运行时质量,提升集群的可用性,往往会采用软硬件冗余部署和分析利用业务资源监测数据两种手段。集群可用性是度量一个集群是否有良好表现的重要综合指标。它由集群可靠性和集群可维护性组成。
- 可靠性:以平均无故障时间为衡量标准,即集群系统能够正常持续运行的平均时长。故障发生的频度越低,系统的平均无故障时间越长,可靠性也就表现越好。
- 可恢复性:以平均恢复时间为衡量标准,即集群系统发生故障之后,系统维修到重新恢复正常运行状态所花销的平均时间。用于维修的平均时间越短,集群系统的可维护性表现就越好。
集群可用性定义为:
可靠性/(可靠性+可恢复性)* 100% |
通常,根据集群不同的部署环境要求将集群的可用性归纳为 5 个等级。如 表 2 所示为集群系统可用性等级的划分。
可用性等级 | 可用性百分比(%) | 停机时间/ 1 年 |
容错可用性 | 99.9999 | < 1 分钟 |
极高可用性 | 99.999 | < 5 分钟 |
具有故障自动恢复能力的可用性 | 99.99 | < 53 分钟 |
高可用性 | 99.9 | < 8.8 小时 |
商品可用性 | 99 | < 43.8 小时 |
本节以资源监测器为例,它主要监测各个资源的运行时数据以获得相关资源的健康度,它负责监测的内容十分全面,按性质不同分为物理监测和业务逻辑监测。
- 物理资源监测包括:非业务相关的技术指标,如 CPU、Memory/swap、I/O 和 Network 数据等。
- 逻辑资源监测包括:业务规则执行,业务数据流量,业务响应速率,业务数据有效性等。
综合两种数据的监测对业务资源运行时健康状态做出判定,判定原则根据具体的物理环境和业务规则决定。当业务资源处于运行时状态下,如果有任何达不到要求的最低指标数据的情况发生,则视为此业务资源当前正处于非健康状态。这个判定结果在全系统中发挥着极其重要的作用,它为集群执行负载均衡决策和故障转移操作提供了数据支撑。
BRMF 集群框架提供集群监测器,监测集群中相关软硬件资源的健康度。按监测范围和层级不同分为三种类型:系统资源监测器 ( SRM, System Resource Monitor )、业务资源心跳探测器 ( BRHD,Business Resource Heartbeat Detector ) 和业务资源监测器 ( BRM,Business Resource Monitor )。
由于 BRMF 集群框架是构筑于操作系统级集群之上的集群系统,所以它可以借助于底层操作系统级集群提供的硬件监测功能,完成对其自身关心的相关硬件运行时系统层面的健康度监测。如系统 CPU 占用率、Memory/swap 开销、I/O 速率、节点网络流量、端口网络流量和 TCP/IP 负载等数据。硬件数据监测器可以快速给出全系统总体健康度数据,但是这只是一个很粗略的评估,我们还要依靠更加精细的监测手段。
BRMF 集群框架内部通过心跳包来判断各业务资源的网络通信状态。它周期性地向所有业务资源(BRC/BRG/BRU)发出心跳命令。探测器只收集业务资源当前是否能够通信的信息,并根据这个信息计算得到两组数据:
- 最近周期内心跳有效率:它以当前时刻之前最近最完整的周期作为参考基准点,为负载均衡策略等提供实时(及时)趋势数据的支持。
周期内心跳有效率 = 周期内心跳响应次数 / 周期内心跳发送次数 * 100% |
- 平均心跳有效率:它将当前时刻之前收集到的所有完整周期积累的心跳活动总量作为参考基准点,衡量系统长期以来的健康情况,提供对下一个长期时间段的健康度预期。
平均心跳成功率 = 心跳响应总次数 / 心跳发送总次数 * 100% |
根据“最近周期内心跳有效率”得出的数据,可以将业务资源的网络状态分为:畅通、不稳定、无响应(未启动 / 假死)等三种情况。如 表 3 所示为网络心跳状态划分。
最近周期心跳有效率(R) | 状态 |
R = 1 | 畅通 |
0 < R < 1 | 不稳定 |
R = 0 | 无响应(未启动 / 假死) |
对于系统数据监测器和业务资源心跳探测器而言,我们只能从它们身上获得粗略的监测数据,可以即时了解系统现在总体的运行状态,但对于全面细致了解各个业务资源具体运行数据和定位系统瓶颈甚至故障等则束手无策,所以必须建立针对所有业务资源的监测器--业务资源监测器,以深入其全面细致的运行数据。
业务资源监测器有不同的监测尺度,一般而言,可以按照 BRMF 集群业务资源部署的层次结构来确定,即按自下而上纵向地分为业务资源单元监测器(BRU Monitor)、业务资源组监测器(BRG Monitor)和业务资源容器监测器(BRC Monitor)三个监测层次,每个层次的监测器对感兴趣的监测内容各有侧重。
业务资源单元监测器
业务资源单元监测器是尺度最小的监测器,它局限于一个业务资源组的范围内,监测目标直接指向业务资源组内部已注册的所有具体单一的业务资源单元。它对内部所有资源单元做出业务逻辑上的检查,是否符合业务规则,是否满足业务数据有效性等;监测业务服务执行情况;同时,也监测每个资源单元花销内存等情况。
对于业务资源单元的监测内容需要在开发就确定下来,它真实的反映出业务资源单元在运行时的每一个细节表现,下表只是一个监测模型。如 表 4 所示为业务资源单元细节数据。
BRU Monitor 跟踪 BRG 内部每个 BRU 的细节实时数据列表 | ||
BRU 进程 ID | ||
通信端口数据 ( 进 / 出 ) | 端口 _1 | _ 数据 |
端口 _2 | _ 数据 | |
端口 _3 | _ 数据 | |
内存使用情况 | 内存分配总数 | |
空闲内存数 | ||
已使用内存数 | ||
线程数据 | 线程 _1 | _ 数据 |
线程 _2 | _ 数据 | |
业务展现 | 业务 _1 | _ 数据 |
业务 _2 | _ 数据 | |
业务 _3 | _ 数据 | |
。。。。。。 |
根据监测数据,结合事先定义的健康度算法和健康度阈值,业务资源单元监测器为每个业务资源单元生成健康度评估表。如 表 5 所示为业务资源单元健康度评估情况表。
BRU Monitor:BRG 内部 BRU 宏观实时数据列表 | |||
BR U 进程 ID | BRU 名称 | 健康度 | 网络位置 |
根据 BRU 细节数据计算得出 |
业务资源组监测器
业务资源组监测器关注业务资源容器之下分布的各个业务资源组,可以跟踪收集每个资源组的具体细节。它结合业务资源单元健康度评估表得出此组监测器的健康度。同时,它也有自身的细节监测内容,例如资源组接受的访问请求事件数、组内所有资源单元进程 ID 列表。业务资源组的健康度为负载均衡决策提供了直接的数据依据。如 表 6 所示为业务资源组细节数据。
BRG Monitor 跟踪 BRG 的细节实时数据列表 | ||
BRG 进程 ID | ||
事件请求 / 响应情况 | 事件请求总数 | |
事件响应总数 | ||
周期事件处理有效率 | ||
组内单元进程数据 | PID_1 | _ 数据 |
PID_2 | _ 数据 | |
。。。。。。 |
根据监测数据,结合事先定义的健康度算法和健康度阈值,业务资源组监测器为每个业务资源组生成健康度评估表。如 表 7 所示为业务资源组健康度评估情况表。
BRG Monitor: BRC 内部 每个 BRG 宏观实时数据列表 | |||
BRG 进程 ID | BRG 名称 | 健康度 | 网络位置 |
根据 BGU 细节数据计算得出 |
业务资源容器监测器
业务资源容器监测器负责监测集群内所有的资源容器,它收集整个集群系统中接收到的客户端访问请求总数、资源容器对访问请求的响应度等。通过容器监测器做出的评估,我们可以判断容器的负载,它也为负载均衡器提供了的负载决策的数据依据。
BRC Monitor: 集群系统 内部 BRC 宏观实时数据列表 | ||
BR C 名称 | 健康度 | 网络位置 |
根据 BCU 细节数据计算得出 |
BRC Monitor 跟踪 BRC 的细节实时数据列表 | ||
事件请求 / 响应情况 | 请求总数 | |
响应总数 | ||
响应速度 | ||
处理有效率 | ||
容器内组进程 ID | PID_1 | _ 数据 |
PID_2 | _ 数据 | |
。。。。。。 |
系统在系统数据监测器、业务资源心跳探测器和业务资源监测器收集数据的同时,应建立一个专门负责管理故障信息数据的组件 ---- 故障资源监测器(Trouble Monitor),它收集所有发生故障的业务资源,并产生一张动态的“全局故障资源分布列表”,记录当前正处于故障处理状态下的资源。故障资源监测器为以后提到的故障资源转移管理器提供了故障数据。
BRC 名称 | BRG 名称 | BRU 名称 |
BRC_1 | BRG_2 | BRU_1 |
BRU_3 | ||
BRC_2 | BRG_1 | BRU_2 |
BRG_5 | BRU_1 | |
BRC_5 | BRG_3 | BRU_3 |
。。。。。。 |
public interface IMonitor { // 1. 将关心“全局故障资源分布列表”的组件注册到监测器,如故障转移管理器 // 2. 将关心“资源健康度列表”的组件注册到监测器,如负载均衡器 // 3.TroubleMonitor 也需要作为 listener 注册到业务资源监测器当中 public void addBRLinstener ( IListener listener ); // 当监测数据发生变化时,通知在 monitor 中已注册的 listener, // 随即每个 listener 取到最新的数据来更新其本地数据, // 以及进行相关的处理操作。 public void notify ( ); public void notify ( Class listenerClass ); // 得到业务资源的详细信息 public IDetail getDetail ( final IBR BR ); } |
在部署系统前即为不同的业务资源预先定义出若干健康度算法,为了灵活适应不同运行时环境(业务数据环境和网络环境等),每一种资源都配置有健康度的缺省算法和若干次级算法,一般情况下使用缺省算法,次级算法只是用来应对某些特定的运行时环境。算法之间既有独立性又有相似性。将采集到的数据完全委托给算法器,算法器使用算法对数据计算得出对应业务资源的健康度。每个算法被设计为可以动态加载和相互替换的模式,算法和数据之间处于弱连接的关系。
public interface IHealth { // 为满足需求,监测数据可以委托给各式各样的算法 public IDegree delegate ( IStrategy strategy ); } public interface IStrategy { // 不同的算法此处有不同的实现方式 public IDegree operate (IHealth health ) { } } |
在传统的网络系统尤其是两层架构的系统中,单一设备承载了巨大的数据流量和计算强度,即便是采用最优的软硬件配置来建设网络系统,也会很快感到资源捉襟见肘,无法高效地完成应用。在现有网络系统中加入负载均衡器则可以从根本上改变过去的窘迫局面。负载均衡器在如今的集群应用系统中也毫无争辩地扮演了一个承上启下的关键角色,它是联系客户端访问请求与真实业务处理的中转站,提供了一种高效的手段扩展服务器带宽和增加吞吐量来提高数据处理能力。它采用适应的负载处理策略,对来自前端客户大量类型各异的访问请求数据,有选择的进行“分路”转发,最大程度地为其分配系统中较为“闲散”的业务处理资源,从而避免了大量请求数据集中涌向同一个业务处理资源,防范后端出现单点性能瓶颈和多点资源闲置的“尴尬局面”。负载均衡器应尽力使同类的若干业务处理资源都获得大致相同的负载效果。
负载均衡器的使用可以为系统增添许多的价值:
- 解决了网络拥塞问题;
- 服务器资源得到了充分利用,为客户端提供高质量的访问体验;
- 从体系架构的角度来讲,
- 负载均衡器作为中间层,它将访问核心业务处理资源的操作聚合为一组接口,为客户端的访问提供了一个一致的界面,使访问更加容易;
- 客户端访问请求由负载均衡器接受,避免直接同核心业务处理资源耦合,从而极大提高了系统的可扩展性(资源可扩展性、应用可扩展性和技术的升级换代)并保证了集群系统和客户端软件的兼容性;
- 为实现物理位置上业务处理资源部署的分布性提供了条件;
- 从客户端的访问体验来看,客户端并不知道也无需关心真正的核心业务处理资源的所有细节,负载均衡器是一组简单的访问接口,是业务处理访问请求的唯一入口,它常被客户端“误认为”是代表了所有核心业务处理资源。客户端软件只要符合负载均衡器的访问规范即可以访问整个集群系统。
目前,负载均衡器技术按数据流层次分为基于客户端的负载均衡技术、网络接入协议交换、高层协议交换和应用服务器技术等几种实现方式。
此处的负载均衡器被设计为两层,第一层借助 LVS 集群架构提供的 IP 级负载均衡技术,第二层采用高层协议交换技术来达到均衡负载的目的。
首先,作为 LVS 集群结构中的子集群,LVS 的负载均衡器完成操作系统级的 IP 负载均衡(LVS 提供了三种负载模型:地址转换、IP 隧道和直接路由。这里不做具体介绍);之后,由 BRMF 提供的软件负载均衡器解析客户端访问请求,根据请求类型和业务处理资源健康度情况,将请求转发到正确的节点。
本节介绍的重点是 BRMF 提供的负载均衡器,它属于高层协议交换方式,可以针对具体的业务逻辑特征实现对访问请求的高层控制 -- 访问请求分发策略,它根据业务特征的不同,由基于内容的分发器(Content-based Distributor)和基于健康度的分发器(Health-based Distributor)两部分组成。
- 基于内容的分发器作为负载均衡器的第一级,首先完成对客户端访问请求内容的解析,确定其应该转发到哪些目标:所有满足类型匹配要求的合法目标,包括业务资源容器和业务资源组;
- 在第一级中通过内容分发器的解析得到了所有与访问请求匹配的候选分发目标,进而可以从“资源监测器”中提取出这些资源的健康度评估数据,从而甄选出最优目标资源作为访问请求的最终目的地。
经过内容解析和健康度评估两级的过滤筛选后,得出了一个完整且预期处理效果最优的访问请求传输路径。
基于内容的分发器(Content-based Distributor)
它掌握了应用集群环境中完整的业务功能列表。
根据协议定义,解析访问请求的所属“业务类型”,然后通过“业务类型标识符与业务资源映射表”找出所有匹配的目标资源。对于集群系统,通常都为处理每种业务类型的访问请求提供至少两个以上的业务资源组,以提高系统的可靠性和可用性。
业务类型 | BRC/BRG 名称 | |
业务类型 - 1 | BRC_1 | BRG_1 |
BRC_2 | BRG_1 | |
业务类型 - 2 | BRC_1 | BRG_2 |
BRC_2 | BRG_2 | |
BRC_3 | BRG_2 | |
业务类型 -3 | BRC_1 | BRG_3 |
BRC_3 | BRG_3 |
在不同类型的业务资源监测器中,都会生成相应的业务资源健康度评估列表。健康度分发器就是以这些评估列表提供的数据为基准点。结合在第一级分发器解析后得到的符合匹配条件的若干目标资源,根据相关联评估列表,从中筛选出最优的目标资源。健康度分发器在“业务类型与业务资源映射表”的基础上,最终形成最优目标资源分发路径表,它包括了当前系统中每种“业务类型”对应访问请求的最优分发目标资源。
业务类型 | BRC/BRG 名称 | |
业务类型 - 1 | BRC_1 | BRG_1 |
-- | -- | |
业务类型 - 2 | -- | -- |
-- | -- | |
BRC_3 | BRG_2 | |
业务类型 -3 | BRC_1 | BRG_3 |
-- | -- |
分发器与业务资源监测器的关系
分发器并未实时地向业务资源监测器发送询问请求来得到当前最新的最优目标资源的分布情况,而是作为业务资源监测器的数据监听者,等待更新数据的通知。
- 分发器必須要作为监听方,注册到相关的业务资源监测器当中
- 当业务资源监测器在资源相关数据发生变化时,应立即向分发器发出更新通知。
- 资源正常运行,只是负载发生变化而引发的更新通知
- 资源发生故障,其分布信息发生变化而引发的更新通知
- 分发器获得更新通知后,从业务资源监测器中取出最新的数据,
- 更新“业务类型与业务资源映射表”
- 更新“最优目标资源分发表”
基于内容的分发器与基于健康度的分发器组合成一个负载均衡器,共同完成对客户端访问请求的路由选择,通过这个路由筛选过程,达到了用最优秀的资源服务客户端的目的。
public interface IDistributor extends IListener { public void update ( Object data ); } |
任何一个系统都不能百分之一百的保证永远不发生任何故障,故障的发生将导致相关成本的提升,那么对于如何处理和管理故障以减少成本支出就显得尤为重要。故障管理器通过故障资源监测器可以得到当前所有处理故障状态的业务资源。故障管理器对这些资源完成停止、重启和转移等操作。
前面已经提到了,在集群系统运行时,对所有相关业务资源均受到 BRMF 的监测。当故障管理器接收到业务资源故障通知后,会遵循一个管理原则,即当某业务资源发生后立刻停止被中止,然后试图进行本地重启,如果重启不成功则对资源进行适当的迁移再运行。遵循这一原则的目的是为了能够保证组件在业务逻辑角度上的完整性和一致性。
从业务资源监测器与故障转移管理器的关系入手,以 BRG 发生故障为例,展开故障转移管理的基本过程:
- 当业务资源容器监测器监测到 RG 资源发生故障时,立即触发资源故障事件
- 业务资源容器监测器向 BRC 发送业务资源注销事件消息,将 BRC 中的这个故障 BRG 注销,停止对该 BRG 资源的监测
- 故障资源监测器将此故障 BRG 信息加入“故障资源分布列表”。
- 向故障转移管理器发送资源故障事件消息,并将此故障 BRG 的管理权移交给故障转移管理器。首先,故障转移管理器对资源进行重启操作,如果重启失败(一般而言,硬件发生故障是导致重启失败的常见原因):
- 首先在系统中检查是否还有某些系统资源因此故障 BRG 而处于被占用状态,如果有则系统强制释放这些资源
- 检查 BRG 中的 BRU 进程是否还有遗留内存,如果有则将其从内存中清除。
- 此时系统中已没有任何与故障 BRG 相关的业务资源存在,可以开始转移工作,根据故障资源转移策略的裁定,在新 BRC 节点上以新 BRC 的名义重新激活先前发生故障的 BRG 资源。此时的 BRG 资源拥有权属于当前这个新的 BRC 节点。
- 当故障转移管理器成功完成故障资源重启或转移工作后,通知业务资源监测该 BRG 资源当前的分布信息,此时业务资源容器监测器重新开始对该 BRG 资源的监测工作。
BRC 名称 | BRG 名称 | 策略集 |
BR C_1 | BRG_1 | failover_business_A.conf |
BRG_2 | failover_business_A.conf | |
BRG_3 | failover_business_B.conf | |
BRC_2 | BRG_1 | failover_business_A.conf |
BRG_2 | failover_business_D.conf | |
BRC_3 | BRG_1 | failover_business_C.conf |
在大型的应用级集群服务系统的实施过程当中,设计人员需要考虑相当多的要素:功能、可靠性、可用性和性能等若干方面,本文仅从集群的业务资源设计、资源监测器、负载均衡器和故障转移管理器四个部分简要的阐述了集群系统的基本设计,抛砖引玉,希望能与大家共同深入探讨集群系统的设计与实施。
原文:http://www.ibm.com/developerworks/cn/java/j-lo-cluster/
发表评论
-
Qi4j和NoSql运动
2010-11-16 23:00 162524日一篇Qi4j and the NoSQL ... -
Threaded vs Evented Servers
2010-11-16 22:48 956Threaded vs Evented Servers ... -
BASE: An Acid Alternative
2010-11-16 21:13 983In partitioned databases, tra ... -
eBay 的Scalability最佳实践
2010-11-16 20:52 931用什么来衡量一天没 ... -
Scalability Best Practices: Lessons from eBay
2010-11-16 20:45 874At eBay, one of the primary a ... -
SmugMug 的架构介绍
2010-11-16 20:36 899本文介绍的 SmugMug 是一家提供付费图片 ... -
来自淘宝的架构经验
2010-11-16 18:07 1248日前参加了一场淘宝网 架构师黄裳带来的技术分享,在最后他 ... -
可伸缩性最佳实战
2010-11-16 17:50 607异步 同步调用使得组件和组件之间紧密耦合起来,这样就使得 ... -
伸缩性和可用性反模式
2010-11-16 17:48 740这篇文章讲了伸缩性 和可用性方面的反模式,也按照自己的理 ... -
使用qi4j实现DCI架构
2010-11-16 17:24 2933我曾经DCI架构是什么? 在一文中提到Qi4j框架实现DCI ... -
DCI架构是什么?
2010-11-16 17:07 2050DCI是数据Data 场景Context 交互Interact ... -
纵向扩容 vs. 横向扩容
2010-11-02 09:58 5441该文原版著作权属于Malc ... -
云计算在电信应用中的思考
2010-11-01 17:59 971云计算是在网格(Grid)、效用(Utility)和 ... -
真正的线性可伸缩性需要新的模式和中间件架构吗?
2010-11-01 17:27 978在构建线性可收缩应用 ... -
性能与可伸缩性的概念及其关键影响因素
2010-11-01 17:22 1158性能与可伸缩性常常决定企业应用的成败,尤其在 ... -
构建的可伸缩性和达到的性能
2010-11-01 17:19 1007实现伸缩性和性能调优的经验所保有的价值容易被低估。两者都是“晚 ... -
可伸缩性的最差实践
2010-11-01 17:02 796引言 在扩展大量大型 ... -
可伸缩性,美妙的可伸缩性
2010-11-01 16:37 1439可伸缩性带来的好处 ... -
大型门户网站架构设计的可伸缩性
2010-11-01 16:34 911我们知道,对于一个大型门户网站来说,可伸缩性是非常重要的,怎么 ... -
可伸缩性设计
2010-11-01 16:27 1012好的设计是实现高度可 ...
相关推荐
"基于Linux的服务器集群系统设计及实现" 本文主要探讨了基于Linux的服务器集群系统的设计及实现。集群系统是指将多台服务器连接起来,提供高可用性、高性能和易管理性的计算资源。Linux操作系统作为一个类UNIX系统...
分布式集群系统架构设计及应用部署是当前互联网架构设计中的一个核心技术点,它能够有效应对高并发访问量和海量数据带来的压力。为了提高系统的高吞吐、高并发和高可靠性,分布式集群系统的构建成为企业级应用部署的...
基于Linux的集群系统设计与实现毕业论文.docx 本文旨在设计和实现基于Linux的集群系统,旨在提供高可用性、可靠性和安全性的集群解决方案。下面是从标题、描述、标签和部分内容中提炼出的相关知识点: 集群系统...
阿里P9纯手打亿级高并发系统设计手册1.pdf 本篇手册主要讲解了高并发系统设计的通用设计方法,包括Scale-out、缓存和异步三种方法。高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗...
总的来说,LAMP服务器集群系统的设计与实现是Linux环境下的一项重要技术突破,它不仅提升了服务器集群的性能和可靠性,也为各种应用场景提供了一个高效、灵活且具有成本效益的解决方案。通过虚拟化技术和远程管理...
【标题】中的“基于Docker的资源调度及应用容器集群管理系统设计与实现1”表明了本文将探讨如何利用Docker技术来设计和实现一个资源调度和应用容器集群管理的系统。 【描述】中提到的“系统开发背景”、“国内外...
Linux集群系统通常包括诸如Heartbeat的心跳检测机制、GFS (Global File System) 或 Lustre等分布式文件系统,以及如DRBD (Distributed Replicated Block Device) 的数据复制技术,它们共同保证了数据的安全性和一致...
在Linux平台上,SAP集群系统通常会分为多个层次,如展现层、流程引擎层、业务逻辑层以及数据控制层,这样设计的目的是为了实现企业内部的商务智能、信息管理和绩效管理等功能。 系统结构和模块设计涉及到整个集群...
设计并实现了一种构件级集群动态管理系统,支持在构件级别进行应用服务器集群管理。它基于OSGi框架组织管理系统构件,并通过构件管理代理支持基于JMX的远程管理。最后通过实验展示了系统效果,最终验证了构件级管理...
在当今互联网时代,高性能的Linux集群系统在企业级应用中扮演着至关重要的角色。由于其高可用性、可扩展性和成本效益,Linux集群被广泛用于关键任务服务,如数据中心、云计算平台和大数据处理。然而,随着业务的复杂...
【分布式存储在数字集群移动通信系统中的应用】 随着大数据量的新业务如互联互通和多媒体通信的引入,传统的数字集群移动通信系统面临着存储查询方案的挑战。原有的树形层次化结构导致了负载不均衡和可靠性问题,...
## 系统设计 Linux集群部署系统采用了B/S架构,即浏览器/服务器架构,通过网络实现客户端与服务器的交互。这种架构便于实现远程控制和管理,同时也为系统的可扩展性与维护性提供了保障。系统从功能上分为三个主要...
本文所提出的电梯集群控制系统设计方案,不仅对工程实施提供了参考,也为电梯智能化控制的进一步研究和应用提供了技术基础。对于电梯制造商、建筑设计者以及工程技术人员而言,这是一个值得深入探讨的创新方向。随着...
- **数据库/应用级拆分**:根据业务需求,考虑采用多库结构或单库结构,平衡数据管理和性能需求。 - **数据(表)级拆分**:对于大型表,采用分区技术或其他方法减少Latch Sleep问题,提高访问效率。 #### 六、结语...
在本实战应用中,我们将深入探讨如何构建一个企业级的秒杀系统,特别是在应对高并发场景时,如何利用Redis集群来优化性能。 首先,让我们了解一下秒杀系统的挑战。在秒杀活动中,短时间内会有大量用户涌入,对系统...
共享集群文件系统GPFS(Global Parallel File System)是一种高性能、可扩展且高度并行的文件系统,主要用于在大规模计算集群环境中实现数据的高效共享。GPFS由IBM开发,旨在满足大数据处理、科研计算以及企业级应用...