基于XMPP协议的即时通信系统服务器集群的研究

http://www.paper.edu.cn

基于 XMPP 协议的即时通信系统服务器集群的研究
陈武,杨世达
武汉理工大学计算机学院,武汉(430071)
E-mail:chenwu0211@163.com

摘 要:本文描述了在实现基于 xmpp 协议的即时通信系统的服务器集群时遇到的关键性问 题,从安全、性能和通用性方面考虑提出了解决方案,重点介绍了服务器间的寻址和路由机 制、服务期间通信的安全机制、故障转移机制。 关键词:xmpp;集群;服务器;安全 中图分类号:TP319 文献标识码:A

1. 引言
XMPP 是一个开放的、基于 XML 的数据模型和协议。对用户而言,在面对现有的各种 即时通讯服务,没有统一标准,无法实现互联互通的局面下,XMPP 的出现实现了整个即 时通信服务协议的统一。它提供了一种开放式的、基于 XML 的、能在分布式网络中传输即 时消息和在线发现的标准,并解决了不同 IM 系统间互操作的问题[1],但是对于即时消息系 统服务器集群的实现并没有统一的标准,各个系统服务器集群的实现不尽相同。

2. 集群技术
2.1 集群的概念
简单的说, 集群就是两台或多台计算机或节点在一个群组内共同工作。 与单独工作的计 算机相比, 集群能够提供更高的可用性和可扩充性。 集群中的每个节点通常都拥有自己的资 源(处理器、内存、操作系统),并对自己的用户集负责。集群中的每一个服务器都相当于 一个结点, 各个结点之间通过网络互联, 并且在各个节点上都有集群软件用以实现节结点之 间寻址和路由, 同时保证各节点间通信时的安全, 当某个结点出现故障时能实现故障转移和 动态的负载平衡。

2.2 集群的体系结构
每个用户都有自己的本地服务器,并从该服务器上接受信息, 所有从一个客户端发给另 一个客户端的消息和数据都必须通过服务端。每一个服务器都独立于其他服务器,并且拥有 其自身的用户列表,通过 Internet 这些服务器构成了一个分布式网络。服务器通过发送一个 探针了解一个用户是否在线,这是实现即时通信的关键。当用户量不是很大时,一台服务器 就可以承受,但当用户量超过服务器所能承受的极限时,我们需要多台服务器来分摊负荷, 这就带来了新的问题:但不同服务器下的客户端通信时,服务器之间的交互方式。这就要引 入服务器集群的概念。集群就是两台或多台计算机或节点共同工作,与单独的计算机相比, 集群具有高效性、稳定性和安全性。集群由授权服务器、应用程序服务器和数据库服务器组 成,其结构如下所示:

-1-

http://www.paper.edu.cn

授权服务器

数据库服务器

应用程序服务器

应用程序服务器

应用程序服务 器 应用程序服务

应用程序服务器

图 1.1

服务器集群结构图

3. 深入分析和研究
集群并不是新事物, 但在软件和硬件方面直到最近它们都还没有形成标准。 集群技术在 未来将会获得更大的发展, 现在, 不断推出新的集群选件, 而真正的集群标准尚在制定之中。 无论怎样,对任何一个服务器集群来说以下三个问题无法回避:服务器间通信的安全机制、 服务器的寻址和路由机制、服务器的故障转移机制。

3.1 服务器间的寻址和路由机制
在即时消息系统中肯定会涉及到隶属于不同应用程序服务器的客户端之间的信息交互, 这就要求服务器必须能将用户发出的消息转发到用户指定的服务器上, 而在服务器集群中各 个应用程序服务器之间是独立互不相干的, 无法直接定位目标服务器, 这时要实现不同服务 器之间的通信,就必须借助第三方的服务器,也就是前面所讲的授权服务器[1]。在授权服务 器上实现了 JID 和 IP 地址的映射,源服务器只需将目标服务器的 JID 发送到授权服务器, 授权服务器将其解析(类似于 DNS 解析),然后把解析后的地址发送给源服务器,源服务 器按照解析后的地址发送消息就可以实现服务器路由。 其不同服务器下的客户端发送消息的流程如下:

图 1.2

不同服务器下的客户端通信的时序图

-2-

http://www.paper.edu.cn

3.2 服务器间通信的安全机制
该安全机制包含了两个方面: 认证和数据的机密性完整性。 认证就是保证网络的各个环 节都能得到相应的服务, 数据完整性和机密性就是保证数据在传输过程中数据不被篡改和窃 听。对于认证,服务期间引入了服务器回拨机制,不同于信息保护和加密处理,它只是为了 避免通信过程中出现利用服务器欺骗方式进行信息伪造的情况。回拨认证依靠 DNS 技术完 成, 利用回拨认证一个服务器可以确认与自己建立连接的服务器是否经过合法授权。 其过程 中一般涉及到源服务器、 接收方服务器和授权服务器。 其中授权服务器能够提供对源服务器 的 DNS 验证查询,它可以是源服务器本身,也可以是源服务器网络中的一个独立服务器。 一般的回拨认证过程为: 1、源服务器和接收服务器建立认证连接。首先由源服务器告诉接收服务器需要认证, 然后接收服务器回应源服务器采用认证并分配认证会话 ID。 2、 源服务器向接收服务器发送密钥。 在这个过程中接收服务器不对密钥进行验证处理, 因为接收服务器没有保存任何源服务器的信息,它需要把密钥传递给授权服务器进行验证。 3、接收服务器与授权服务器建立连接。整个建立连接的过程与源服务器和接收服务器 之间建立认证连接相同, 授权服务器同时为处理来自接收服务器的认证过程分配一个验证会 话 ID。 4、接收服务器要求授权服务器验证密钥。接收服务器把源服务器提交来的密钥以及双 方的会话 ID 传递给授权服务器。 5、授权服务器验证密钥,并返回认证结果给接收服务器。 6、接收服务器通知源服务器认证结果。 为了保证服务器间发送的数据被篡改或偷听,服务器通信引入了 TLS 机制,使用 TLS 能实现数据加密,从而保证了在传输过程中数据的安全,该协议由两层组成: TLS 记录协 议和 TLS 握手协议。较低的层为 TLS 记录协议,位于 TCP 上面[2]。 TLS 记录协议有以下 优点:使用对称加密以对数据进行加密,对称加密所产生的密钥对每个连接都是唯一的,且 此密钥基于另一个协议(如握手协议)协商。进行信息传输包括使用密钥进行信息完整性检 查。安全哈希功能(SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能 操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。 TLS 记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客 户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证, 协商加密算法和加 密密钥。可以使用非对称的密码术来认证对等方的身份。加密密钥是通过双方协商确定的, 对第三方来说协商加密是难以获得的。 此外经过认证过的连接不能获得加密, 即使是进入连 接中间的攻击者也不能。 以下例子展示两个服务器之间使用 STARTTLS 保护数据流。 步骤 1: Server1 初始化流给 Server2: <stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'> 步骤 2: Server2 发送一个流标签给 Server1 作为应答: <stream:stream
-3-

http://www.paper.edu.cn

xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_123' version='1.0'> 步骤 3: Server2 发送 STARTTLS 范围给 Server1 ,包括验证机制和任何其他流特性: <stream:features> <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'> <required/> </starttls> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>DIGEST-MD5</mechanism> <mechanism>KERBEROS_V4</mechanism> </mechanisms> </stream:features> 步骤 4: Server1 发送 STARTTLS 命令给 Server2: <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> 步骤 5: Server2 通知 Server1 允许继续进行: <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/> 步骤 6: Server1 和 Server2 尝试通过 TCP 完成 TLS 握手. 步骤 7: 如果 TLS 握手成功, Server1 初始化一个新的流给 Server2: <stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' to='example.com' version='1.0'> 步骤 8: Server2 发送一个包含任何可用流特性的流头信息给 Server1 : <stream:stream xmlns='jabber:server' xmlns:stream='http://etherx.jabber.org/streams' from='example.com' id='s2s_234' version='1.0'> <stream:features> <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'> <mechanism>DIGEST-MD5</mechanism> <mechanism>KERBEROS_V4</mechanism> <mechanism>EXTERNAL</mechanism> </mechanisms> </stream:features> 步骤 9: Server1 继续进行 SASL 握手

3.3 服务器的故障转移机制
我们在前面讲过, 集群系统用于客户端数量相当庞大的时候, 正因为客户端数量庞大所 以其稳定性尤为重要。我们设想当服务器集群中的某一个应用程序服务器由于故障突然停
-4-

http://www.paper.edu.cn

掉,那么会发生什么情况?该服务器上的所有客户端将无法使用[4]。这显然不符合稳定性的 要求,这是我们就应该引入一种机制能够让这些用户继续使用,而不受故障的影响。这就要 求集群能够满足高性能和容错的要求, 我们可以使用静态负载平衡的高可用性集群模式, 在 这种模式下, 这些应用程序服务器都处在联机状态, 每台服务器都以虚拟的形式向整个网络 提供自己的资源组, 而客户端可以检测并访问到这种虚拟服务器。 每台服务器容量的选择应 该使每台服务器中的资源在最优性能下运行, 以最大限度的使服务器的资源得到利用。 但是 在发生故障转移时, 每台服务器又可以暂时承担其他服务器上资源的运行, 具体怎么重新分 配这些发生故障的资源将采用负载平衡算法, 根据指定的资源和服务器容量配置, 所有的客 户服务在故障转移时仍保持有效,但性能要受到影响[5]。就故障切换的种类而论,一些集群 产品可进行并行恢复,其中资源能够故障切换到不同地区的远程节点上。此外,为了解决多 个节点故障问题,一些集群产品可以进行级联故障切换,其工作方式就像多米诺骨牌一样: 节点一故障切换到节点二,节点二发生故障后再切换到节点三等。

4. 总结
近年来 XMPP 协议的研究成为近年来的一个热点,但是都是针对服务器端的(尤其是 集群的)协议还没制定,每一个运营商采用的集群系统都不一样,这样就限制了它的商业价 值。本文给出了实现基于 xmpp 协议的即时通信系统的服务器集群所需要解决的关键问题: 服务期间路由机制描述了服务器间的寻址和定位、 服务器间通信的安全机制、 服务器的故障 转移机制,通过验证以上机制都是可行的。

参考文献
[1] 张云川. 标准化的即时通信协议_SIMPLE 和 XMPP 的对比研究》 《 [D].武汉: 武汉科技大学学报, 2005.12 [2] 吴兆俊,解海涛,盛步云等. 《一种基于 Agent 的即时通信软件互通解决方案》[D].上海:计算机应用 与软件, 2006. 9 [3] Tom Myers,Alexander Nakhimovsky.《java xml 编程指南》[M],王辉.北京:电子工业出版社,2001 [4] 刘彬,赵荣彩,丛建刚.《 即时通信协议分析与监控技术研究》[D],成都:计算机应用研究,2007.9 [5] 冯亚军,宋子林.《基于 XMPP 协议的即时通信系统》[D]. 南京:军事通信技术.2005 .12

A Survey On The Server Clusters Of Instant Messaging System Which Is Based On XMPP Protocol
Chen Wu,Yang Shi Da
Department of Computer Science and Technology,WuHan University of Technology, WuHan (430071) Abstract This paper describes the key issues in achieving the server clusters of instant messaging system which is based on xmpp, from security, display solutions from security、 performance and versatility, pay more attention to the mechanism of looking for server、the security、the recovery of failure。 Keywords:xmpp;cluster;server;security

-5-


相关文档

基于XMPP的企业即时通信系统研究与应用
基于XMPP协议的Android即时通信系统设计
基于XMPP的企业级即时通信系统的研究与实现
基于XMPP协议的服务器集群研究
基于XMPP协议和Openfire的即时通信系统的开发
基于xmpp协议的多端即时通讯方案
基于XMPP的即时通信网关应用研究
基于XMPP协议的移动即时通信邮件网关设计
基于XMPP协议企业级IM的研究与实现
XMPP协议使用开源jabber(XMPP)协议及openfire架设内部即时通讯服务
电脑版