论文部分内容阅读
[摘 要] 提供丰富多彩的应用是发展下一代互连网的驱动因素。文中在深入研究传统单服务器即时通讯系统基础上,提出了一个基于IPv6的分布式即时通讯系统平台的设计方案,并重点介绍了系统的整体结构,协议和关键部件的具体实现。
[关键词] 下一代互连网 即时通讯 负载均衡
1、引言
基于IPv6的下一代互联网将会迅速发展、壮大,并且逐步取代现有的互联网,已经成为业内共识。然而,应用是部署IPv6的驱动因素。如何在下一代互联网平台上开展丰富的应用和服务并建立可盈利的可管理的业务模式成为推动IPv6产业化发展的关键。根据现有互联网的发展经验来看,在下一代服务中最容易形成切入点的是个人信息服务和娱乐服务。
即时通讯系统作为互联网发展中最成功的应用之一,很大程度上影响了人们的生活,即时通讯系统利用服务器上的用户注册信息和联机用户建立起虚拟社区(Virtual Internet Community);服务器为社区成员提供状态信息和联系方式,以便用户之间进行相互通讯;用户使用特定的即时通讯客户端登陆到服务器找到他想联系的人进行交流。它由最初的简单聊天工具逐渐发展成为集成视频、语音、文件传输以及网络游戏等功能强大的网络平台。
然而,现有的主流即时通讯系统比如:0ICQ、MSN、QQ等都还不支持IPv6网络,这极大的防碍了它在下一代互联网上的发展。本文在深入研究传统单服务器即时聊天系统的基础上,提出了基于IPv6的分布式即时通讯系统平台的设计方案,并讨论了该系统协议和关键部件的实现过程。
2、单服务器即时通讯系统
图1 单服务器即时通讯系统结构
在单一服务器结构的即时通讯系统中(图1),所有在线用户都登陆到同一台服务器上,由该服务器完成用户管理、消息传递以及其它用户操作。单服务器系统在设计上相对简单。但是,随着业务量的不断增大,服务器的响应速度将会降低,当服务器负载过大时,只能通过硬件设备的升级来满足系统要求。但是硬件设备升级有一定限度,同时还会造成整个系统服务的暂时中断,以及原有设备的浪费。并且单一服务器系统中,消息服务器一旦发生故障会使整个系统无法使用。
3、分布式系统即时通讯系统
3.1系统结构
为了解决单服务器系统存在的上述问题,同时满足下一代互联网发展的需要我们设计了基于IPv6的分布式集群即时通讯系统平台。如图2所示,整个系统主要由三部分组成:负载均衡服务器(Load Balance Server,简称LBS)、索引服务器(Index Server,简称IS)和消息服务器群(Messaging Servers, 简称MS)。其中MS可以分布在互联网中的不同地点,也可以集中在一个局域网中,但都使用公共的IP地址来与外界联络。
图2 多服务器即时通讯系统结构
3.2系统的工作流程
以下通过对客户1登陆过程的描述为例说明整个系统的工作流程:
1)客户1向LBS发送登陆请求。LBS收到请求后,根据各个MS的负载情况返回一个MS地址给客户端1,假设为MS3的地址。
2)客户1按指定地址登陆后,MS3首先对其进行身份验证,然后将其加入到自己的用户管理表中,同时到数据库中提取客户1的详细资料以及所有好友信息。
3)MS3将客户1的登陆消息发送到IS,IS把客户1加入其用户索引表中。
4)MS3通过IS查找客户1的所有在线好友信息(IP地址、所在的MS地址),并将其加入到客户1的好友列表中。
5)MS3分别向客户1的好友所在的MS发送其登陆信息,MS收到消息后转发给相应的客户端。
其他操作的工作流程,如查找、添加好友,好友间的消息发送,用户状态的更改等,与登陆流程类似,或者是其中的几步中的组合。好友间的消息发送可以选择通过MS转发,也可以选择不通过MS转发。
3.3系统协议
协议是服务的正式描述,它规定了参与合作的各方进行交互的语法、语义和时序细节[1]。根据RFC2778对即时通讯系统模型的定义,我们设计了即时通讯协议(Instant Messaging and Presence Protocol),简称IMPP协议[2]。由于大量的报文是在客户端和服务器之间产生,我们以此来说明IMPP协议的编码。
3.3.1协议编码
IMPP协议中,报文由一个首部和一个可选的尾部组成。报文首部有固定结构和长度(表1),报文尾部中变长字段(如字符串),使用分隔字符。考虑到IMPP協议中客户端和服务器之间使用UDP协议是面向数据报的,对此IMPP协议的报文封装采用了连接划分(Connection-blasting)方式,在一次连接中完成一个报文的所有数据传输。
表1 IMPP协议报文的首部编码格式
IMPP协议报文的尾部定义了服务内容,主要有确认消息UDP_ACK,发送消息UDP_SEND_MSG,在线确认UDP_KEEPALIVE,状态改变UDP_CHANGE_STATUS,添加好友UDP_ADD_FRIEND,删除好友UDP_DEL_FRIEND,随机查找UDP_SEARCH_RANDOM,自定义查找UDP_SEARCH_CUSTOM等。
3.3.2报文封装
在系统底层的网络通讯中,使用与IPv6相关的Windows API函数对IMPP协议报文进行封装,主要的方法有Bind,GetIP,Receive,Send,IPAdressToV6,Close等。这样屏蔽了IPv6对系统上层的影响,即使需要移植到其他通信协议上也是很容易实现的,而且不必破坏系统的业务逻辑的处理[3]。
4、负载均衡器
4.1主要功能模块分解
1)服务器管理模块(CServerManage):
服务器管理模块对系统中所有的MS进行监控。通过心跳机制,服务器管理模块将定期的收集消息队列中来之各个MS的状态信息,同时对服务器的状态表进行更新操作。其中MS的状态信息包括:CPU利用率、内存利用率、进程总数、响应时间、在线人数、服务器地址、端口信息等。如果在一段时间内没有接收到某个MS的状态信息,服务器将会认为该服务器发生了故障或者网络不可达,同时将该服务器的所有状态信息置为-1。
2)重定向模块(CClinetRedirect)
重定向模块主要负责响应来自客户端的出席请求,并通过对当前的MS状态表中的数据进行加权运算后,选择一个最优的MS服务器地址返回给客户端。其包含的主要方法有请求队列的维护,状态表查询,选择运算等。重定向模块是系统负载均衡设计的关键部分,其中涉及到的负载均衡方法会在后面的内容中详细阐述。
3)异常处理模块(CExceptionHandle)
异常处理模块定期的扫描服务器的状态信息表,如果有MS服务器出现异常,异常处理模块会将该服务器的异常信息立即通知给重定向模块以及其他的MS和IS。MS和IS接收到异常信息后,查找好友列表,把地址为异常服务器的好友全部删除,同时MS将向相应的客户端发送该好友下线的消息。这样,即使在某台MS发生故障的情况下,整个系统仍然可以保持信息的正确一致性。
4.2基于客户分摊机制的负载均衡
负载均衡的目的是使系统中的各个服务器相对均衡的承担系统的负载,从而达到提高系统系统响应性能的目的。考虑到即时通讯系统中用户的相对独立性,我们在负载均衡器中采用了以用户为单位的动态客户分摊机制。基于应用层的负载分配对客户端来说是完全透明的[4]。
动态客户分摊机制通过负载均衡器动态的收集各个MS节点上的状态数据,计算出各个节点的权值,然后将当前权值最小的MS节点的IP地址发送给请求登陆队列中的客户端,客户端登陆到相应的MS,由该服务器直接为其提供服务,二者之间的消息传递不再经过负载均衡器。
权值主要由各个MS节点的参数:CPU利用率、内存使用率、进程总数以及响应时间来决定。对于任意一个MS节点i的权值公式为:
LOAD(Ni)=R1*Lcpu(Ni)+R2*Lmemory(Ni)+R3*Lprocess(Ni)+R4*Lresponse(Ni)
常量系数Ri用来表示各个参数的重要程度。可以根据系统运行情况对Ri进行设置。其中∑Ri=1。
5、索引服务器
IS是对分散在各个MS上用户信息的集中,它提供了所有上线用户关键信息的查询功能。为了避免IS的负担过大,在整个系统中形成瓶颈,IS在设计上应该注意:1)尽量减少自身开销;2)提高查询效率。
5.1主要功能模块
1)用户索引模块(CUserIndex)
考虑到以上要求,在用户索引模块中使用了Hash算法来维护和管理所有在线用户。Hash表中的每个记录中来存放一个用户信息结构体struct user,结构体中只包含了用户的关键信息,用户号UserID,用户所在服务器IP地址ServerAdress,用戶IP地址UserAdress。由于UserID具有唯一性,在查找过程中可以根据UserID来直接映射到Hash表中对应的记录。这样在规定的内存空间中
6、结束语
本文论述了基于IPv6的分布式即时通讯系统平台的设计,该系统能够为用户提供透明接入的同时具有较好的可靠性,可扩展性,异常处理和负载均衡能力。IPv6巨大的地址空间,孕育了一个广阔的下一代互联网市场。在基于IPv6的高性能即时通讯平台上,进一步开发更加丰富的增值服务,将会有着极好的研究价值和商业前景。
参 考 文 献
[1] Douglas.E.Comer,David L.Stevens
internet Working With TCP/IP:Clinet–ServerProgramming And Application(Second Edition)[M]北京:清华大学出版社,1999.
[2] M. Day Lotus J.Rosenberg dynamicsoft H.Sugano Fujitsu “A Model for Presence and Instant Messaging”,RFC2778,February 2000
[3]贾云霞 李强 Visual C++ 项目开发实践 北京 中国铁道出版社 2003 185-266
[4]Valeria C,Michele C,Philip S Y. Dynamic Load BaLancing on Web-Server Systems[J]. IEEE Internet Computing,1999:5/6):28~39■
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
[关键词] 下一代互连网 即时通讯 负载均衡
1、引言
基于IPv6的下一代互联网将会迅速发展、壮大,并且逐步取代现有的互联网,已经成为业内共识。然而,应用是部署IPv6的驱动因素。如何在下一代互联网平台上开展丰富的应用和服务并建立可盈利的可管理的业务模式成为推动IPv6产业化发展的关键。根据现有互联网的发展经验来看,在下一代服务中最容易形成切入点的是个人信息服务和娱乐服务。
即时通讯系统作为互联网发展中最成功的应用之一,很大程度上影响了人们的生活,即时通讯系统利用服务器上的用户注册信息和联机用户建立起虚拟社区(Virtual Internet Community);服务器为社区成员提供状态信息和联系方式,以便用户之间进行相互通讯;用户使用特定的即时通讯客户端登陆到服务器找到他想联系的人进行交流。它由最初的简单聊天工具逐渐发展成为集成视频、语音、文件传输以及网络游戏等功能强大的网络平台。
然而,现有的主流即时通讯系统比如:0ICQ、MSN、QQ等都还不支持IPv6网络,这极大的防碍了它在下一代互联网上的发展。本文在深入研究传统单服务器即时聊天系统的基础上,提出了基于IPv6的分布式即时通讯系统平台的设计方案,并讨论了该系统协议和关键部件的实现过程。
2、单服务器即时通讯系统
图1 单服务器即时通讯系统结构
在单一服务器结构的即时通讯系统中(图1),所有在线用户都登陆到同一台服务器上,由该服务器完成用户管理、消息传递以及其它用户操作。单服务器系统在设计上相对简单。但是,随着业务量的不断增大,服务器的响应速度将会降低,当服务器负载过大时,只能通过硬件设备的升级来满足系统要求。但是硬件设备升级有一定限度,同时还会造成整个系统服务的暂时中断,以及原有设备的浪费。并且单一服务器系统中,消息服务器一旦发生故障会使整个系统无法使用。
3、分布式系统即时通讯系统
3.1系统结构
为了解决单服务器系统存在的上述问题,同时满足下一代互联网发展的需要我们设计了基于IPv6的分布式集群即时通讯系统平台。如图2所示,整个系统主要由三部分组成:负载均衡服务器(Load Balance Server,简称LBS)、索引服务器(Index Server,简称IS)和消息服务器群(Messaging Servers, 简称MS)。其中MS可以分布在互联网中的不同地点,也可以集中在一个局域网中,但都使用公共的IP地址来与外界联络。
图2 多服务器即时通讯系统结构
3.2系统的工作流程
以下通过对客户1登陆过程的描述为例说明整个系统的工作流程:
1)客户1向LBS发送登陆请求。LBS收到请求后,根据各个MS的负载情况返回一个MS地址给客户端1,假设为MS3的地址。
2)客户1按指定地址登陆后,MS3首先对其进行身份验证,然后将其加入到自己的用户管理表中,同时到数据库中提取客户1的详细资料以及所有好友信息。
3)MS3将客户1的登陆消息发送到IS,IS把客户1加入其用户索引表中。
4)MS3通过IS查找客户1的所有在线好友信息(IP地址、所在的MS地址),并将其加入到客户1的好友列表中。
5)MS3分别向客户1的好友所在的MS发送其登陆信息,MS收到消息后转发给相应的客户端。
其他操作的工作流程,如查找、添加好友,好友间的消息发送,用户状态的更改等,与登陆流程类似,或者是其中的几步中的组合。好友间的消息发送可以选择通过MS转发,也可以选择不通过MS转发。
3.3系统协议
协议是服务的正式描述,它规定了参与合作的各方进行交互的语法、语义和时序细节[1]。根据RFC2778对即时通讯系统模型的定义,我们设计了即时通讯协议(Instant Messaging and Presence Protocol),简称IMPP协议[2]。由于大量的报文是在客户端和服务器之间产生,我们以此来说明IMPP协议的编码。
3.3.1协议编码
IMPP协议中,报文由一个首部和一个可选的尾部组成。报文首部有固定结构和长度(表1),报文尾部中变长字段(如字符串),使用分隔字符。考虑到IMPP協议中客户端和服务器之间使用UDP协议是面向数据报的,对此IMPP协议的报文封装采用了连接划分(Connection-blasting)方式,在一次连接中完成一个报文的所有数据传输。
表1 IMPP协议报文的首部编码格式
IMPP协议报文的尾部定义了服务内容,主要有确认消息UDP_ACK,发送消息UDP_SEND_MSG,在线确认UDP_KEEPALIVE,状态改变UDP_CHANGE_STATUS,添加好友UDP_ADD_FRIEND,删除好友UDP_DEL_FRIEND,随机查找UDP_SEARCH_RANDOM,自定义查找UDP_SEARCH_CUSTOM等。
3.3.2报文封装
在系统底层的网络通讯中,使用与IPv6相关的Windows API函数对IMPP协议报文进行封装,主要的方法有Bind,GetIP,Receive,Send,IPAdressToV6,Close等。这样屏蔽了IPv6对系统上层的影响,即使需要移植到其他通信协议上也是很容易实现的,而且不必破坏系统的业务逻辑的处理[3]。
4、负载均衡器
4.1主要功能模块分解
1)服务器管理模块(CServerManage):
服务器管理模块对系统中所有的MS进行监控。通过心跳机制,服务器管理模块将定期的收集消息队列中来之各个MS的状态信息,同时对服务器的状态表进行更新操作。其中MS的状态信息包括:CPU利用率、内存利用率、进程总数、响应时间、在线人数、服务器地址、端口信息等。如果在一段时间内没有接收到某个MS的状态信息,服务器将会认为该服务器发生了故障或者网络不可达,同时将该服务器的所有状态信息置为-1。
2)重定向模块(CClinetRedirect)
重定向模块主要负责响应来自客户端的出席请求,并通过对当前的MS状态表中的数据进行加权运算后,选择一个最优的MS服务器地址返回给客户端。其包含的主要方法有请求队列的维护,状态表查询,选择运算等。重定向模块是系统负载均衡设计的关键部分,其中涉及到的负载均衡方法会在后面的内容中详细阐述。
3)异常处理模块(CExceptionHandle)
异常处理模块定期的扫描服务器的状态信息表,如果有MS服务器出现异常,异常处理模块会将该服务器的异常信息立即通知给重定向模块以及其他的MS和IS。MS和IS接收到异常信息后,查找好友列表,把地址为异常服务器的好友全部删除,同时MS将向相应的客户端发送该好友下线的消息。这样,即使在某台MS发生故障的情况下,整个系统仍然可以保持信息的正确一致性。
4.2基于客户分摊机制的负载均衡
负载均衡的目的是使系统中的各个服务器相对均衡的承担系统的负载,从而达到提高系统系统响应性能的目的。考虑到即时通讯系统中用户的相对独立性,我们在负载均衡器中采用了以用户为单位的动态客户分摊机制。基于应用层的负载分配对客户端来说是完全透明的[4]。
动态客户分摊机制通过负载均衡器动态的收集各个MS节点上的状态数据,计算出各个节点的权值,然后将当前权值最小的MS节点的IP地址发送给请求登陆队列中的客户端,客户端登陆到相应的MS,由该服务器直接为其提供服务,二者之间的消息传递不再经过负载均衡器。
权值主要由各个MS节点的参数:CPU利用率、内存使用率、进程总数以及响应时间来决定。对于任意一个MS节点i的权值公式为:
LOAD(Ni)=R1*Lcpu(Ni)+R2*Lmemory(Ni)+R3*Lprocess(Ni)+R4*Lresponse(Ni)
常量系数Ri用来表示各个参数的重要程度。可以根据系统运行情况对Ri进行设置。其中∑Ri=1。
5、索引服务器
IS是对分散在各个MS上用户信息的集中,它提供了所有上线用户关键信息的查询功能。为了避免IS的负担过大,在整个系统中形成瓶颈,IS在设计上应该注意:1)尽量减少自身开销;2)提高查询效率。
5.1主要功能模块
1)用户索引模块(CUserIndex)
考虑到以上要求,在用户索引模块中使用了Hash算法来维护和管理所有在线用户。Hash表中的每个记录中来存放一个用户信息结构体struct user,结构体中只包含了用户的关键信息,用户号UserID,用户所在服务器IP地址ServerAdress,用戶IP地址UserAdress。由于UserID具有唯一性,在查找过程中可以根据UserID来直接映射到Hash表中对应的记录。这样在规定的内存空间中
6、结束语
本文论述了基于IPv6的分布式即时通讯系统平台的设计,该系统能够为用户提供透明接入的同时具有较好的可靠性,可扩展性,异常处理和负载均衡能力。IPv6巨大的地址空间,孕育了一个广阔的下一代互联网市场。在基于IPv6的高性能即时通讯平台上,进一步开发更加丰富的增值服务,将会有着极好的研究价值和商业前景。
参 考 文 献
[1] Douglas.E.Comer,David L.Stevens
internet Working With TCP/IP:Clinet–ServerProgramming And Application(Second Edition)[M]北京:清华大学出版社,1999.
[2] M. Day Lotus J.Rosenberg dynamicsoft H.Sugano Fujitsu “A Model for Presence and Instant Messaging”,RFC2778,February 2000
[3]贾云霞 李强 Visual C++ 项目开发实践 北京 中国铁道出版社 2003 185-266
[4]Valeria C,Michele C,Philip S Y. Dynamic Load BaLancing on Web-Server Systems[J]. IEEE Internet Computing,1999:5/6):28~39■
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文