集群服务器内存管理方法及其系统 【技术领域】
本发明涉及一种集群服务器技术,特别涉及一种集群服务器内存管理方法及其系统。
背景技术
当今计算机技术已进入以网络为中心的计算时期,大量的服务和应用都是围绕着Web进行。这促进Internet用户剧烈增长和Internet流量爆炸式地增长。很多网络服务因为访问次数爆炸式地增长而不堪重负,服务器不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量,越来越多的瓶颈出现在了服务器端。对于服务器端的瓶颈,人们可以通过软件或硬件的方式来得到解决。
现有的网络服务采用如图1所示的体系结构,由服务器端和客户端组成。客户端主要由PC机、手机等可以接入网络的设备组成。而服务器端主要由一些性能较高的服务器组成。
网络服务采用了请求\响应的工作方式。用户通过客户端向服务器发出服务的请求;服务器端接受用户的请求,将计算结果返回给客户端,完成一次请求\响应。如此反复,用户便可以获得所有需要的服务。由于同时并发访问服务器端的用户请求会很多,单台服务器不能及时处理所有的服务请求,所以服务器端一般会由多台服务器提供服务。当大量服务请求同时到达时,采用负载均衡的方式,可以将服务请求相对均匀的分配到每个服务器。这样,使得服务器端能及时的做出响应,保证了网络服务的稳定性。
如图1所示,由于服务器端采用了多台服务器提供相同的服务,每个服务器上的内存中必然存在着大量的相同数据,因此,服务器端的内存没有得到很好的利用。
由于内存是影响系统性能的重要因素,内存不足直接影响着服务器响应的速度。对于比较大的商业应用而言,内存的消耗是极大的。在这种体系结构下,只能通过简单的增加服务器内存来解决系统对内存的需求,这无疑增加了提供服务的成本。同时,从现有服务器软件的角度看,对内存大小的支持存在着上限,有时即使内存可以增加到足够大,但得不到软件的支持,问题仍然得不到解决。
【发明内容】
本发明的目的是提供一种可以使集群服务器共享集群内存的集群服务器内存管理方法。
本发明的另一目的是提供一种可以使集群服务器共享集群内存的集群服务器内存管理系统。
根据本发明的一个方面,所提供的具有多个服务器的集群服务器内存管理方法包括以下步骤:
A、在集群服务器中的每台服务器中分别装载集群管理器,这些集群管理器通过相互通信构成集群服务器的集群管理系统;
B、所述集群管理系统统一管理所述每台服务器的内存,从而使所有所述服务器的内存被配置成集群服务器的集群内存。
其中,所述集群管理系统把所述集群内存的存储空间配置成多个容量相同的子存储空间并将这些子存储空间均匀地分配给每个所述服务器,其中每个子存储空间被分配给不同编号。
其中,集群管理系统为每台服务器分配相对均匀的数据量,并且为分配给每台服务器的每个数据添加与所述子存储空间的编号相关联的标识信息,同时建立所述标识信息和数据的对应关系表项。
所述统一管理所述每台服务器的内存包括数据保存操作、数据查找操作和数据删除操作。
在数据保存操作中,集群管理系统根据标识信息算出将要保存的数据的子存储空间,然后将数据保存到这个子存储空间中,并且备份该数据,将其保存到另一服务器的子存储空间中。
在数据查找操作中,集群管理系统依据与客户端查找的数据相对应的标识信息,算出保存该数据的子存储空间的编号,由此返回已保存在该编号的子存储空间中地数据。
在数据删除操作中,集群管理系统依据与将要删除的数据相对应的标识信息,算出保存该数据的子存储空间的编号,由此删除该子存储空间中保存的数据,并进一步删除另一服务器上的备份数据。
为了优化系统性能,如果保存在所述子存储空间中数据超时未用,则集群管理系统将其视为垃圾进行回收,以便释放子存储空间。
本发明的每个集群管理器至少包括一个负责服务器内存管理的内存管理组件,和一个负责服务器成员管理的服务器成员管理组件。
其中,当所述服务器成员管理组件收到集群服务器新成员广播的加入请求时,所述服务器成员管理组件为该新成员分配一个新标识符(ID),然后所述内存管理组件向具有该标识符的新成员分配相应数量的子存储空间。
其中,当所述服务器成员管理组件收到集群服务器成员广播的退出请求时,内存管理组件收回已分配给该将要退出的成员的子存储空间,将其转移到其它服务器中。
此外,每个集群管理器还包括:用于所述内存管理组件和所述服务器成员管理组件消息发送的数据包调度组件和数据包发行组件,以及用于内存管理组件和所述服务器成员管理组件消息接收的数据包监听组件和数据包接收组件。
其中,所述数据包调度组件负责各类消息的标准化处理和分发及拆包;所述数据包发行组件负责把所有数据包发送到指定的目的地;数据包监听组件负责监听各类消息数据包;所述数据包接收组件负责将接收完整的数据包队列,并还原成消息,并分发给所述内存管理组件和所述服务器成员管理组件中的相应组件进行处理。
根据本发明的另一方面,所提供的集群服务器内存管理系统包括分别装载到集群服务器的每台服务器中的集群管理器,这些集群管理器通过相互通信构成集群管理系统,所述集群管理系统统一管理所述每台服务器的内存,从而使所有所述服务器的内存被配置成集群服务器的集群内存。
其中,所述集群管理系统把所述集群服务器的所述集群内存的存储空间配置成多个容量相同的子存储空间,并将这些子存储空间均匀地分配给每个所述服务器。
本发明的集群内存管理致力于为J2EE或其他集群服务提供高效、透明、易于扩展的内存数据管理方案,使得服务节点间的内存共享和数据管理就像在本机一样简单。
对于集群内存管理技术,所有的缓存服务均依赖于集群管理服务,集群管理服务对外部调用是透明的,它确保集群中每个节点对集群拓扑结构的及时、完整的认知。在此基础上,各个缓存服务才能按照自己的数据管理策略来管理缓存的数据。各节点通过集群管理服务之间的通信来完成加入、离开集群、了解拓扑结构变化等动作,缓存服务通过集群管理服务了解集群组织情况,接收各种通知,从而完成数据的分布、备份、获取等操作。外部调用者使用缓存服务提供的功能,对于数据实际分布情况以及节点分布情况完全不知,就好像操作本地数据一样。
下面结合附图对本发明进行详细说明。
【附图说明】
图1是现有的实施网路服务的集群服务器内存的配置图;
图2是本发明的集群服务器的内存配置图;
图3是实现本发明集群服务器内存管理的一个实施例;
图4是图3所示的本发明的集群管理系统中的一个集群管理器的原理图;
图5是本发明的集群管理系统向集群服务器分配用于保存数据的子存储空间以及保存数据的示意图;
图6是显示本发明的子存储空间、数据、标识之间关系的示意图;
图7是本发明的集群管理器的一个具体实例的示意图。
【具体实施方式】
图2显示了本发明的集群服务器内存的配置,如图2所示,本发明的关键是在集群服务器中设置一个由集群服务器中所有服务器11、12、13共享的集群内存2,该集群内存由图3所示的集群管理系统3管理。
图3显示了本发明的实现集群内存管理的一个实施例,从图3中可以看到,在每个集群服务器的每个服务器11、12、13中分别装载集群管理器31、32、33,这些集群管理器通过相互通信构成本发明的集群管理系统3。集群管理系统3可以通过集群管理接口41、42、43统一管理集群服务器中每台服务器的内存,从而把集群服务器的所有服务器的内存21、22、23配置成由集群服务器共享的集群内存2。因此,本发明的集群服务器内存管理方法可以包括以下步骤:
A、在成为集群服务器成员的每台服务器11、12、13中分别装载集群管理器31、32、33,这些集群管理器通过相互通信构成集群服务器的集群管理系统3;
B、由所述集群管理系统统一管理集群服务器中的每台服务器的内存21、22、23,从而把集群服务器的所有服务器11、12、13的内存21、22、23配置成由集群服务器共享的集群内存2。
其中,所述集群管理系统把所述集群服务器的集群内存2的存储空间配置成多个容量相同的子存储空间并将这些子存储空间均匀地分配给每个所述服务器,其中每个子存储空间被分配给不同编号。
图5显示了本发明的集群管理系统向集群服务器分配用于保存数据的子存储空间以及保存数据的方式。在图5中,所述子存储空间被具体化为类似哈希表中的桶。
其中,集群管理系统为每台服务器分配相对均匀的数据量,并且为分配给每台服务器的每个数据添加与所述子存储空间的编号相关联的标识信息,并建立所述标识信息和数据的对应关系表项。
在图5中,每个服务器11、12、13内存分得相对均匀的数据量。假设有4个数据要分配给这三台服务器11、12、13,那么有一台服务器例如服务器11分得两个数据如数据1、数据2,其它服务器12、13各分得一个数据如数据1和数据2。由此可见,每个服务器分得的数据量最多相差一个。
集群管理系统2将集群服务器中的集群内存的存储空间配置成多个子存储空间或者桶。这样,集群内存会存在一定数量的桶,并且相对均匀的分布到每个服务器中,其中每个桶被分配一个编号;然后,将每个数据保存到一个桶中。集群管理系统给每个数据添加一个标识信息,并存储该标识信息,同时建立该标识信息与数据的对应关系表项。作为一个实例,该标识信息可以是唯一(特定)的key值,用此key值标识该数据。另外该key值应当与桶的编号相关联,例如通过映射表或散列表相关联,作为特例,桶的编号可以和key值相同。图6显示了key值、数据以及桶之间的一一对应关系。
本发明利用缓存策略可以保证每个服务器内存分得相对均匀的数据量。例如,采用比较通用的哈希散列算法,能够根据key将数据相对均匀的保存到每个桶,然后根据设计好的算法将桶平均的保存到每台服务器,以此实现负载均衡。
所述统一管理所述每台服务器的内存包括数据保存操作、数据查找操作和数据删除操作。
在数据保存操作中,集群管理系统根据标识信息算出将要保存的数据的子存储空间,然后将数据保存到这个子存储空间中,并且备份该数据,将其保存到另一服务器的子存储空间中。具体地说,集群管理系统2根据例如散列算法(散列表)算出将要保存的数据的标识信息如key值所对应的子存储空间或桶,然后将数据保存到这个子存储空间或桶中,并且备份该数据。
在数据查找操作中,集群管理系统依据与客户端查找的数据相对应的标识信息,算出保存该数据的子存储空间的编号,由此返回已保存在该编号的子存储空间中的数据。具体地说,集群管理系统2根据例如散列算法(散列表)算出客户端要查找的数据的标识信息如key值所对应的子存储空间或桶的编号,由此返回已保存在该编号的子存储空间或桶中的数据。
在数据删除操作中,集群管理系统依据与将要删除的数据相对应的标识信息,算出保存该数据的子存储空间的编号,由此删除该子存储空间中保存的数据以及备份数据。
在数据删除操作中,集群管理系统依据与将要删除的数据相对应的标识信息,找到或算出保存该数据的子存储空间,然后删除其中所保存的数据和备份的数据。
为了优化系统性能,如果保存在所述子存储空间中数据超时未用,则集群管理系统将其视为垃圾进行回收,以便释放子存储空间。
本发明的每个集群管理器至少包括一个负责服务器内存管理的内存管理组件,如Cache Service组件;和一个负责服务器成员管理的服务器成员管理组件,如Cluster Service组件。
其中,当所述服务器成员管理组件收到集群服务器新成员广播的加入请求时,所述服务器成员管理组件为该新成员分配一个新标识符(ID),然后所述内存管理组件向具有该标识符的新成员分配相应数量的子存储空间。
其中,当所述服务器成员管理组件收到集群服务器成员广播的退出请求时,内存管理组件收回已分配给该将要退出的成员的子存储空间,将其转移到其它服务器中。
如图7所示,每个集群管理器还应当包括:用于所述内存管理组件和所述服务器成员管理组件消息发送的数据包调度组件(即,Packet Dispatcher组件)和数据包发行组件(即,Packet Publisher组件),以及用于内存管理组件和所述服务器成员管理组件消息接收的数据包监听组件(即,PacketListener组件)和数据包接收组件(即,Packet Receiver组件)。
其中,所述数据包调度组件负责各类消息的标准化处理和分发和拆包;所述数据包发行组件负责把所有数据包的发送到指定的目的地;数据包监听组件负责监听各类消息数据包;所述数据包接收组件负责将接收完整的数据包队列,并还原成消息,并分发给所述内存管理组件和所述服务器成员管理组件中的相应组件进行处理。
例如,对于外部的数据操作请求,内存管理组件(即Cache Service组件)会根据缓存算法,查出该数据存放的位置。然后,向目标服务器发送数据操作的消息,目标机器会根据消息的类型以及所携带的内容,获知具体的操作内容并将操作结果返回给源服务器。
如图7所示,CacheService组件或Cluster Service组件通过消息的发送与接收来进行通信,消息的发送与接收大致经过三层的操作。首先,从最上层的CacheService组件或Cluster Service开始,产生消息,交给下一层的PacketDispacter组件,PacketDispatcher组件负责将消息按照约定规则拆分成网络包,通过PacketPublisher组件将所有的包发送出去;然后,目标服务器的PacketReceiver组件会接受到网络包,将其放到上层的PacketReceiver组件,由PacketReceiver组件将包还原为消息,最后,将消息交给上层相应的组件(CacheService组件或Cluster Service组件之一)来处理消息。
本发明还设有异常处理机制,异常处理主要指,系统中的服务器发生异常宕机时如何从备份机恢复保存的数据。
为了及时监测系统中各个服务器运行的状态,以便处理发生的异常,系统中有一个专门的PointScanner组件。该组件能及时的发现宕机的服务器,然后触发一个恢复数据的事件,通过消息的方式发送给系统中的每个服务器,通过在其他服务器上保存的备份数据完成恢复的工作。
具体地说,服务器状态由Pointer Scanner组件监控,每台服务器上都部署有该组件,服务器之间按照指定的时间间隔相互做ping操作,当达到预设的阀值被ping的服务器无法响应时,整个集群发出广播,宕机服务器的数据由备份服务器恢复,所有的桶按照指定算法重新均衡。
本发明的集群服务器内存管理系统包括分别装载到属于集群服务器成员的每台服务器中的集群管理器31、32、33,这些集群管理器通过相互通信构成集群管理系统3,集群管理系统3统一管理所述每台服务器的内存21、22、23,使所有所述服务器的内存被配置成集群服务器的集群内存2。
其中,所述集群管理系统3把所述集群服务器的所述集群内存的存储空间配置成多个容量相同的子存储空间或者桶,并将这些子存储空间均匀地分配给每个所述服务器。
另外,本发明还能够提供以下功能:
·扩展能力
·如果在集群中添加更多的服务器,系统可以获得更大的缓存容量和更快的处理性能。例如分布式缓存查询,查询量上升,但查询时间减少。
·无单一失败点
系统采用完全对等的peer-to-peer模型,确保没有单一的失败点,所有服务器都能承担管理缓存的全部角色。
·快速失败转移和失败恢复
系统的主要设计目标之一,实现几乎瞬时的失败转移(分流失效服务器负载)和失败恢复(允许恢复后重新加载缓存)。
·高效读写访问
运用了专门为优化读写速度设计的协议,外部应用在使用持续更新存储数据,例如用户会话信息时能获得较大的性能提升。结合了数据容错和写缓存,数据库吞吐量上升,延时显著减少
·数据一致
集群范围的完全一致.所有成员对于缓存数据都保持相同的看法。
·事务同步与锁定
系统支持事务、同步和锁定,这些特点有助于保证强劲的缓存数据管理能力。
本发明同时还具有以下技术效果:
1、顺滑性:集群成员加入、退出(正常退出或异常退出)的平滑过渡,对上层应用透明,且上层业务对于集群成员的变动全无察觉。
2、高效性:集群成员变动的、负载转移的快速处理,巧妙的避免由于节点完全对等所带来的决策效率低下,同时最大的发挥各对等节点的并行计算能力(民主与集中的问题)。优良的并发访问能力,对于资源同步访问互斥和效率,取最佳契合点(对于同步的精细控制)。
3、平衡性:系统负载的动态平衡,不论节点加入或退出,保证集群系统都不会出现明显弱点,依靠精良的算法,保证节点变动所带来的负载变化最快的达到平衡状态,使集群资源最优化利用,就好比木桶,每一块木片都一样高。
尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。