一种应用服务器集群实现方法及系统的制作方法

文档序号:7805848阅读:212来源:国知局
专利名称:一种应用服务器集群实现方法及系统的制作方法
技术领域
本发明涉及计算机领域,尤其涉及一种应用服务器集群实现方法及系统。
技术背景
应用服务器集群是指将多台应用服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器,集群可以用多个应用服务器做备份,从而使得任何一个机器宕了整个系统还是能正常运行。
应用服务器集群已经成为扩大系统服务能力的常用方法,通过集群技术实现了系统性能的提升,本来单机环境下无法支持的业务系统,通过集群方式很好的解决了这个问题。
目前的应用服务器集群的实现方式是集群中的各个应用服务器需要在某一服务器宕掉的时候能够继续不丢失宕掉的那台服务器上的会话(session)信息,所以在所有正常服务的时候,各个应用服务器都需要把自己的会话(session)信息在其他所有的应用服务器上备份,现有这种相互备份的方式是一台服务器的会话信息需要备份到集群中的其他所有的应用服务器中,需要集群中的每个应用服务器时时的发送自己的会话信息到集群中的其他所有的应用服务器,同时也要时时的接受集群中其他的应用服务器的会话信息。所以在客户端访问应用服务器的时候,这些会话信息就会在集群中的所有应用服务器之间不停地传输和复制,这样必然带来额外的中央处理器(CPU,Central Processing Unit)资源占用和网络带宽占用,就容易造成集群内部的广播风暴。当集群规模比较小的时候,现有的应用服务器集群能够有较高的可靠性以及相对于单服务器节点的性能提高,故现有的应用服务器集群只是针对小规模的集群设计的,但是无法满足集群中的应用服务器数目较多时的性能要求。发明内容
本发明实施例提供了一种应用服务器集群实现方法及系统,用于满足集群中的应用服务器数目较多时的性能要求。
一方面,本发明实施例提供的应用服务器集群实现方法,包括
负载均衡器接收用户发送的任务请求;
所述负载均衡器将所述任务请求分发到应用服务器集群中的一个应用服务器上;
所述应用服务器根据所述任务请求生成会话信息;
所述应用服务器将所述会话信息保存在分布式内存缓存系统memcached,所述分布式内存缓存系统部署在所述应用服务器集群的后端。
另一方面,本发明实施例提供的应用服务器集群实现系统,包括
负载均衡器、应用服务器集群、分布式内存缓存系统memcached,其中,
所述负载均衡器,用于接收用户发送的任务请求;
所述负载均衡器,用于将所述任务请求分发到所述应用服务器集群中的一个应用服务器上;
所述应用服务器,用于根据所述任务请求生成会话信息;
所述应用服务器,用于将所述会话信息保存在所述memcached,所述分布式内存缓存系统部署在所述应用服务器集群的后端。
从以上技术方案可以看出,本发明实施例具有以下优点
在本发明实施例中,负载均衡器将用户发送的任务请求分发到应用服务器集群中的一个应用服务器上,该应用服务器生成会话信息之后,应用服务器将会话信息保存在分布式内存缓存系统上,由于本发明实施例中应用服务器生成的会话信息只需要保存在分布式内存缓存系统上,而不需要在集群中的所有应用服务器之间不停地传输和复制,就可以避免额外的CPU资源占用和网络带宽占用,从而避免集群内部的广播风暴,能够满足集群中的应用服务器数目较多时的性能要求。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种应用服务器集群实现方法的示意图2为本发明实施例提供的一种应用服务器集群系统的示意图3为本发明实施例提供的应用服务器集群和memcached的示意图。
具体实施方式
本发明实施例提供了一种应用服务器集群实现方法及系统,用于满足集群中的应用服务器数目较多时的性能要求。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域的技术人员所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的一种应用服务器集群实现方法,如图1所示,包括
101、负载均衡器接收用户发送的任务请求。
在本发明实施例中,用户通过浏览器向负载均衡器发送任务请求,负载均衡器位于用户访问的浏览器和应用服务器集群之间,本发明实施例中搭建有应用服务器集群和负载均衡环境,网络(Web)层集群的技术通常包括负载均衡和超文本传输协议(HTTP,Hyper Text Transfer Protocol)会话的失败转移。其中,负载均衡可以使用负载均衡器来实现, 它位于浏览器和应用服务器之间,HTTP会话的失败转移通过全局HTTP会话标识、备份会话数据的方式、备份的周期和颗粒度来解决,HTTP会话的失败转移是指应用服务器集群中的一个应用服务器宕掉(down)之后,应用服务器集群中的其他应用服务器可以接管down掉的这台应用服务器上的服务,让用户侧感觉不到应用服务器集群中有应用服务器down掉。
102、负载均衡器将任务请求分发到应用服务器集群中的一个应用服务器。
在本发明实施例中,应用服务器集群中包括有多个应用服务器,例如一个集群服务器集群中可以有5台应用服务器或者更多的应用服务器。负载均衡器接收到用户发送的任务请求之后,负载均衡器将用户的任务请求分发到应用服务器集群中的一个应用服务器上。具体的,负载均衡器通过分配算法将任务请求分发到应用服务器集群中的某一个应用服务器上。
103、应用服务器根据任务请求生成会话信息。
在本发明实施例中,任务请求被分发到应用服务器集群中的一个应用服务器之上后,该应用服务器根据任务请求生成会话(session)信息,在本发明实施例中应用服务器生成会话信息之后,不需要将生成的会话信息发送给应用服务器集群中其他所有的应用服务器来备份,同时本发明实施例中应用服务器也不需要时时接收应用服务器集群中其他所有的应用服务器发送的会话信息,都可以避免广播风暴的产生。
104、应用服务器将会话信息保存在分布式内存缓存系统memcached,分布式内存缓存系统部署在应用服务器集群的后端。
在本发明实施例中,应用服务器生成会话信息之后,应用服务器将生成的会话信息保存在分布式内存缓存系统(英文称为memcached),在本发明实施例中为了便于描述以下将分布式内存缓存系统简称为memcached,本发明实施例中memcached部署在应用服务器集群的后端,所谓后端指的是相对于负载均衡器在应用服务器集群的前端而言的,也就是说本发明实施例中memcached主要用于存储应用服务器集群中的每一个应用服务器生成的会话信息,memcached与应用服务器集群中的每一个应用服务器相连接,当每个应用服务器都向memcached存储会话信息时,需要采用序列化的方式将会话信息中的每个属性对象都保存到memcached中,当将会话信息从memcached中装载入内存时,需要采用反序列化的方式,恢复会话信息中的每个属性对象,所以存储在会话信息中的每个属性对象必须实现可串行(Serializable)接口。
在本发明实施例中,memcached可以包括客户端程序库和多个缓存节点,应用服务器将会话信息保存在memcached可以包括如下步骤
Al、应用服务器根据会话信息向memcached的客户端程序库添加键;
A2、客户端程序库采用预置算法根据键选择memcached的一个缓存节点;
A3、客户端程序库将键和会话信息保存在客户端程序库选择的缓存节点中。
对于步骤Al、应用服务器向memcached中添加键,该键被传给客户端程序库之后, 在步骤A2中客户端程序库按照预置实现的算法就会根据该键来决定将会话信息保存在 memcached的哪个缓存节点中,选定缓存节点后,在步骤A3中,客户端程序库将键和会话信息保存在选择出的缓存节点中。
需要说明的是,对于步骤客户端程序库将键和会话信息保存在客户端程序库选择的缓存节点中之后,还包括如下步骤
Bi、当应用服务器需要获取会话信息时,应用服务器向客户端程序库添加键;
B2、客户端程序库采用预置算法根据键获取到会话信息被保存的缓存节点;
B3、应用服务器向会话信息被保存的缓存节点发送获取(get)命令。
对于步骤Bi,当应用服务器需要获取会话信息时,应用服务器将该会话信息对应的键添加到客户端程序库中,步骤B2中客户端程序库采用与保存会话信息时相同的算法来选择出缓存节点,则这个缓存节点就是在步骤A2中被选择出用来保存会话信息的缓存节点,由于键相同并且使用的算法也相同就能够选择出与初次保存时相同的服务器,步骤 B3中找到会话信息被保存的缓存节点之后应用服务器就向会话信息被保存的缓存节点发送获取(get)命令,以获取会话信息,只要该会话信息没有被删除掉,应用服务器就能够获取到该会话信息。
需要说明的是,在本发明实施例中,当一个应用服务器宕掉时,应用服务器集群中的另一应用服务器接管宕掉的应用服务器上的服务,即实现HTTP会话的失败转移,用户侧也感觉不到应用服务器集群中有应用服务器down掉。
需要说明的是,在本发明实施例中,应用服务器集群中的不同应用服务器生成会话信息之后向客户端程序库添加的键是不同的,不同的键采用预置算法从memcached中选择缓存节点,不同的键就被保存到不同的缓存节点上,这就实现了 memcached的分布式。 Memcached中缓存节点增多后,键就会分散,即使memcached中的一个缓存节点发生故障无法连接,也不会影响其他的缓存节点正常工作,整个系统依然能继续运行。
本发明实施例中在客户端程序库在选择算法时,需要满足的要求就是能让会话信息平均到所有的缓存节点,具体的可以通过哈希(hash)算法来实现,实现类为 ArrayModNodeLocator, hK key 映射到 node 的源码如下
public MemcachedNode getPrimary(String k) {return nodes[getServerForKey(k)];private int getServerForKey(String key) {int rv=(int)(hashAlg.hash(key) % nodes.length); assert rv >= O : "Returned negative key for key " + key; assert rv < nodes.length:"Invalid server number " + rv + " for key " + key;return rv; }
从上面可知,把所有缓存节点(node)放在数组里,通过hash算法把键(key)映射到某index,然后通过这个index在数组里取到node。再则需要考虑解决如何容错的问题, 比如当某个node当掉了,如何自动地转到其他node上,上面的简单hash路由策略采用的方法是在数据组里顺序向下轮询node,找第一个工作正常的node即可。
本发明实施例中在客户端程序库在选择算法时,预置算法可以为一致性哈希 (hash)算法。当会话信息被保存的缓存节点宕掉时,客户端程序库采用一致性哈希算法根据键选择memcached中的另一缓存节点;客户端程序库将会话信息保存在另一缓存节点中。例如当需要移除node或添加node的时候,如何有效地调整映射关系,具体可以采用一致性hash算法,实现类为KetamaNodeLocator,从key映射到node的源码如下
public MemcachedNode getPrimary(final String k) {
MemcachedNode rv=getNodeForKey(hashAlg.hash(k)); assert rv ! = null : "Found no node for key " + k; return rv;MemcachedNode getNodeForKey(long hash) { final MemcachedNode rv; if( ! ketamaNodes. containsKey(hash)) {Il Java 1.6 adds a ceilingKey method, but I'm still stuck in 1.5 Il in a lot of places, so I'm doing this myself. SortedMap<Long,MemcachedNode> tailMap=ketamaNodes.tailMap(hash); if(tailMap.isEmpty()) {hash=ketamaNodes. fir stKey (); } else {hash=tailMap. fir stKey ();rv=ketamaNodes. get(hash); return rv;}
从上面可知,就是通过ketamaNodes这个数据结构按照一致性hash算法把node 分区,每次都把映射到一个分区的key映射到负责这个分区的node上。
在本发明实施例中,负载均衡器将用户发送的任务请求分发到应用服务器集群中的一个应用服务器上,该应用服务器生成会话信息之后,应用服务器将会话信息保存在分布式内存缓存系统上,由于本发明实施例中应用服务器生成的会话信息只需要保存在分布式内存缓存系统上,而不需要在集群中的所有应用服务器之间不停地传输和复制,就可以避免额外的CPU资源占用和网络带宽占用,从而避免集群内部的广播风暴,能够满足集群中的应用服务器数目较多时的性能要求。
以上实施例介绍了本发明实施例提供的应用服务器集群实现方法,接下来介绍本发明实施例提供的应用服务器集群系统,如图2所示,本发明实施例提供的应用服务器集群系统200包括负载均衡器201、应用服务器集群202、分布式内存缓存系统 memcached203,其中,
负载均衡器201,用于接收用户发送的任务请求;
负载均衡器202,用于将任务请求分发到应用服务器集群202中的一个应用服务器2021上;
应用服务器2021,用于根据任务请求生成会话信息;
应用服务器2021,用于将会话信息保存在memCaChed203,分布式内存缓存系统 202部署在应用服务器集群202的后端。
在本发明实施例中,应用服务器集群202包括有多个应用服务器,在图2中仅示出了两个应用服务器(分别是应用服务器2021和另一应用服务器2022),此处仅为了说明方便,其实应用服务器集群202可以包括多个应用服务器,此处仅作说明,不做限定。
需要说明的是,在实际应用中,对于memcached203而言,memcached203具体可以包括客户端程序库2031和多个缓存节点;
应用服务器2021,用于根据会话信息向memcached的客户端程序库2031添加键;
客户端程序库2031,用于采用预置算法根据该键选择memcached的一个缓存节点 2032 ;
客户端程序库2031,用于将该键和该会话信息保存在客户端程序库选择的缓存节点2032中。
需要说明的是,memCaChed203包括有多个缓存节点,在图2中仅示出了两个缓存节点(分别是缓存节点2032和另一缓存节点2033),此处仅为了便于说明,其实 memcached203可以包括多个缓存节点,此处仅作说明,不做限定。
需要说明的是,对于应用服务器2021和客户端程序库2031而言,在实际应用中, 应用服务器2021,还用于当应用服务器2021需要获取会话信息时,向客户端程序库2031 添加键;客户端程序库2031,用于采用预置算法根据键获取到会话信息被保存的缓存节点 2032 ;应用服务器2031,用于向会话信息被保存的缓存节点2032发送获取get命令。
需要说明的是,在途2中所示,应用服务器集群202还包括另一应用服务器2022 ;
当应用服务器2021宕掉时,应用服务器集群中的另一应用服务器2022接管宕掉的应用服务器2021上的服务。
需要说明的是,在实际应用中,预置算法为一致性哈希hash算法,memcached203 还包括另一缓存节点2033,对于客户端程序库2031和另一缓存节点2033而言,当会话信息被保存的缓存节点2032宕掉时,客户端程序库2031,用于采用一致性哈希算法根据键选择 memcached中的另一缓存节点2033 ;
客户端程序库2031,用于将会话信息保存在另一缓存节点2033中。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明如图1所示的方法实施例中的叙述,此处不再赘述。
在本发明实施例中,负载均衡器将用户发送的任务请求分发到应用服务器集群中的一个应用服务器上,该应用服务器生成会话信息之后,应用服务器将会话信息保存在分布式内存缓存系统上,由于本发明实施例中应用服务器生成的会话信息只需要保存在分布式内存缓存系统上,而不需要在集群中的所有应用服务器之间不停地传输和复制,就可以避免额外的CPU资源占用和网络带宽占用,从而避免集群内部的广播风暴,能够满足集群中的应用服务器数目较多时的性能要求。
为了详细说明本发明实施例中应用服务器集群系统中的应用服务器集群所包括的应用服务器和memcached所包括的缓存节点,如图3所示,负载均衡器部署在浏览器和应用服务器集群之间,应用服务器集群包括有η个应用服务器分别是应用服务器1、应用服务器2.....应用服务器η,η为一个自然数,memcached部署在应用服务器集群的后端,memcached包括有m个缓存节点分别是缓存节点1、缓存节点2.....缓存节点m、m为自然数。通过图3所描述,可以准确无误的得知,应用服务器集群包括多个应用服务器和 memcached包括有多个缓存节点。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上对本发明所提供的一种应用服务器集群实现方法及系统进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种应用服务器集群实现方法,其特征在于,包括负载均衡器接收用户发送的任务请求;所述负载均衡器将所述任务请求分发到应用服务器集群中的一个应用服务器上;所述应用服务器根据所述任务请求生成会话信息;所述应用服务器将所述会话信息保存在分布式内存缓存系统memcached,所述分布式内存缓存系统部署在所述应用服务器集群的后端。
2.根据权利要求1所述的应用服务器集群实现方法,其特征在于,所述应用服务器将所述会话信息保存在分布式内存缓存系统memcached包括所述应用服务器根据所述会话信息向所述memcached的客户端程序库添加键;所述客户端程序库采用预置算法根据所述键选择所述memcached的一个缓存节点,所述memcached包括客户端程序库和多个缓存节点;所述客户端程序库将所述键和所述会话信息保存在所述客户端程序库选择的缓存节点中。
3.根据权利要求2所述的应用服务器集群实现方法,其特征在于,所述客户端程序库将所述键和所述会话信息保存在所述客户端程序库选择的缓存节点中之后还包括当所述应用服务器需要获取所述会话信息时,所述应用服务器向所述客户端程序库添加所述键;所述客户端程序库采用所述预置算法根据所述键获取到所述会话信息被保存的缓存节占.I— /、、、 所述应用服务器向所述会话信息被保存的缓存节点发送获取get命令。
4.根据权利要去2或3所述的应用服务器集群实现方法,其特征在于,所述预置算法为一致性哈希hash算法。
5.根据权利要求1所述的应用服务器集群实现方法,其特征在于,当所述应用服务器宕掉时,所述应用服务器集群中的另一应用服务器接管宕掉的应用服务器上的服务。
6.根据权利要求4所述的应用服务器集群实现方法,其特征在于,当所述会话信息被保存的缓存节点宕掉时,所述客户端程序库采用一致性哈希算法根据所述键选择所述 memcached中的另一缓存节点;所述客户端程序库将所述会话信息保存在所述另一缓存节点中。
7.一种应用服务器集群系统,其特征在于,包括负载均衡器、应用服务器集群、分布式内存缓存系统memcached,其中,所述负载均衡器,用于接收用户发送的任务请求;所述负载均衡器,用于将所述任务请求分发到所述应用服务器集群中的一个应用服务器上;所述应用服务器,用于根据所述任务请求生成会话信息;所述应用服务器,用于将所述会话信息保存在所述memcached,所述分布式内存缓存系统部署在所述应用服务器集群的后端。
8.根据权利要求7所述的应用服务器集群系统,其特征在于,所述memcached包括客户端程序库和多个缓存节点;所述应用服务器,用于根据所述会话信息向所述memcached的客户端程序库添加键;所述客户端程序库,用于采用预置算法根据所述键选择所述memcached的一个缓存节占.^ \\\ 所述客户端程序库,用于将所述键和所述会话信息保存在所述客户端程序库选择的缓存节点中。
9.根据权利要求8所述的应用服务器集群系统,其特征在于,所述应用服务器,还用于当所述应用服务器需要获取所述会话信息时,向所述客户端程序库添加所述键;所述客户端程序库,还用于采用所述预置算法根据所述键获取到所述会话信息被保存的缓存节点;所述应用服务器,还用于向所述会话信息被保存的缓存节点发送获取get命令。
10.根据权利要求7所述的应用服务器集群系统,其特征在于,所述应用服务器集群还包括另一应用服务器;当所述应用服务器宕掉时,所述应用服务器集群中的另一应用服务器接管宕掉的应用服务器上的服务。
11.根据权利要求8所述的应用服务器集群系统,其特征在于,所述预置算法为一致性哈希hash算法,所述memcached还包括另一缓存节点,当所述会话信息被保存的缓存节点宕掉时,所述客户端程序库,用于采用一致性哈希算法根据所述键选择所述memcached中的另一缓存节点;所述客户端程序库,用于将所述会话信息保存在所述另一缓存节点中。
全文摘要
本发明实施例公开了一种应用服务器集群实现方法及系统,用于满足集群中的应用服务器数目较多时的性能要求。本发明实施例方法包括负载均衡器接收用户发送的任务请求;所述负载均衡器将所述任务请求分发到应用服务器集群中的一个应用服务器上;所述应用服务器根据所述任务请求生成会话信息;所述应用服务器将所述会话信息保存在分布式内存缓存系统memcached,所述分布式内存缓存系统部署在所述应用服务器集群的后端。
文档编号H04L29/06GK102523234SQ20111045085
公开日2012年6月27日 申请日期2011年12月29日 优先权日2011年12月29日
发明者刘春 , 刘欢迎, 宋明明, 车帅 申请人:山东中创软件商用中间件股份有限公司, 山东中创软件工程股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1