一种动态自适应集群的构建方法

来源:互联网 发布:数据加密技术有哪些 编辑:程序博客网 时间:2024/06/10 00:18

当面服务面对巨大的访问时,需要以服务器集群的方式来完成请求的处理。构建服务器集群的方式有多种选择,下图勾勒了一种如何构建服务器集群的逻辑架构。


Client与Server中间设有ClusterManagementLayer。构成这一层包含一个重要的组件ServiceRegister(SR)服务,SR可记录后台服务器的服务信息,后台服务器的服务类型可以按ServiceType进行分类,不同的服务器按服务类型以{KEYSERVICETYPE,IP:PORT/NamingService/}存储在嵌入式数据库中,同时也记录服务所属的群组信息以{SERVICEGROUP,IP:PORT/NamingService}方式存储,并将该信息注册到SR上。SERVICE对应的逻辑实体是RequestManagementCenter(RMC),每一RMC群组中的服务器都提供同一逻辑意义上的服务。Client在启动初始化的时候就需要知道SR的信息,并从SR获得RMC的列表,从而将不同的服务请求发给相应的RMC。

RMC需要包含init/failover_schedule,session_keep,server_load_monitor,add/delete_server等服务:

1).   add/delete_server

若增加一后台服务器,该服务器首先要向SR发送消息注册自己,而后SR发送消息给RMC,RMC在其服务器列表中增加该条记录,则该服务器完成加入到服务群组中的操作。RMC对Server请求的超时及SR对Server的心跳超时都会导致该服务器被剔除出集群。RMC和SR之间也维护有心跳信息,若果某一RMC宕机,SR会给Client发送一服务阻塞信息,并发消息让SERVICEGROUP某一当前负载较低的服务器启动该服务,让后更新各个Client的服务群组列表(ServiceGroupInfoList:SGIL)。服务重新开始提供。

2).   server_load_monitor

各个服务器需要运行resource_self_monitor模块,将自己的运行状态以push/pull方式传输到server_load_monitor模块,从而使RMC知道其管理的所有的服务器的运行状态。

3).   init _schedule

init _schedule根据server_load_monitor提供的运行时状态数据能够从后台server中选择一台负载最小的服务器来提供服务。

4).   session_keep

RMC将某一client的请求发送给一个后台服务器处理后,会记录这个client和选中的服务器的关系,以后同一client的请求会被发送到同一个服务器去处理。

5).   后台server的SESSION数据备份策略

  Sx

/    \

Sy      Sz

server_x的数据会被同时备份到server_y和server_z上,server_x、server_y、server_z的关系会被记录在RMC。

6).   failover_schedule

当发生服务器宕机事件时,RMC根据其记录的server数据备份信息将有session性质的请求发送到其对应的server_y或server_z上,从而保持服务的一致性。

上面的叙述可用下面的图来描述,


而上图中的三个模块RMC、SR、DCS可以被合并为ClusterFactor,部署在每一个server上。

 

初始配置的时候,服务器集群中需要有一台机器的SR属性运行,所有的服务器都需要知道谁是SR,但是在以后的运行过程中可能发生变化。Client启动时需要一个信息即SR的IP:PORT/NamingService/URL.Client启动后检查自己的服务群组列表,若为空,则从初始配置的SR处获取,在有该列表的情况下,client的每个同类请求都应发送的列表所指示的RMC上去。Client和SR之间以某一固定的时间间隔进行短连接心跳交互,当Client发现某一服务超时后,短连接改为长连接,向SR发送告警信息,SR恢复后台server的服务后可在第一时间让client得到该信息,是client由阻塞恢复到正常。

每一台server启动的时候需要向SR注册自己的service、ip:port/URL等信息。SR会以Service为key标志对server分群,建立SGIL。并向各个SGIL中编号对大的sever发送命令,令其启动RMC服务,待其服务启动后,将SGIL发送给RMC。至此整个系统启动完毕,可对外提供服务。

相对较小的集群SR服务器可以以HA的方式运行。对于较大的集群SR可以运行在二叉树同步算法之上,能以最快的速度保证集群中数据的一致性。该算法的核心是每个节非叶子节点只向两个预定的节点发送自己收到的信息,所有节点按完全平衡二叉树的方式连接,移除和新增节点同完全平衡二叉树的平衡算法。假如一个SR集群有7台服务器组成,下图描述了当节点Sa和Se第一次收到消息时的扩散方式。


原创粉丝点击