一种高性能即时通讯服务系统的设计
2016-02-13宋昱
宋 昱
(北京邮电大学网络技术研究院宽带网研究中心,北京 100876)
一种高性能即时通讯服务系统的设计
宋 昱
(北京邮电大学网络技术研究院宽带网研究中心,北京 100876)
即时通信软件随着互联网的发展已经越来越深入人们的日常生活中,QQ、微信等即时通讯软件已经成为人们生活中必不可少的应用。现有的即时通讯软件已经对传统电信业务形成了强烈的冲击,有着逐渐取代电信行业中传统的语音和短信业务的趋势。大规模的用户对即时通讯服务的质量和可靠性提出了较高的要求,在消息可靠传输的基本需求上,还提出了低延时传输的要求,已达到通讯的即时性。本文介绍了一种面对大规模用户的高性能即时通讯服务系统的设计方案,从系统部署和软件架构两个方面展现了提高服务器性能,降低延迟的方法,同时还兼顾了服务的可靠性。
计算机软件;即时通讯;服务器;高性能
本文著录格式:宋昱. 一种高性能即时通讯服务系统的设计[J]. 软件,2016,37(12):180-183
0 引言
即时通信是一个基于互联网的即时消息传送的服务。即时通信最鲜明的特点就是它的即时性,类似于手机短信。发送消息的一个客户端发出消息后,接受消息的客户端在很短的时间内就能收到消息。由于是以互联网为依托,所以即时通信的成本非常低,大多数都是免费的。现在流行的即时通信软件有:QQ,微信,易信,来往,陌陌,MSN,ICQ,等。
现代的即时通信软件不仅可以发送文本消息,还有发送图片、语音消息,进行语音聊天、视频聊天的功能。大部分即时通信软件还加入了社交功能。比如QQ的微博,和微信的朋友圈。这极大地方便用户了解好友的动态,增强了用户体验。
随着互联网的广泛普及,即时通信软件的使用也变得越来越广泛。对电信运营商的传统业务造成了一定的冲击。
即时通信服务器作为即时通信系统的核心,需要满足为大规模的用户提供可靠的即时聊天服务,所以对即时通信服务器的高性能与可靠性提出了较高的要求。
因此,本文提出了一种高性能的即时通信服务器的设计方案,可以满足较大规模的即时通信业余,同时具有一定的可靠性。
1 关键技术
1.1 数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库,是长期储存在计算机内、有组织的、可共享的数据集合[1]。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。
数据库主要分为关系型数据库和非关系型数据库,下面做出简要介绍。
1.1.1 关系型数据库
关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。
当前主流的关系型数据库有甲骨文公司的Oracle、MySQL,微软公司的Microsoft SQL Server等。
1.1.2 非关系型数据库
非关系型数据库,即NoSQL数据库。NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。非关系型数据库提出与关系型数据库不同的另一种理念,例如,以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
当前主流的非关系数据库有Mongodb、CouchDB、Redis、Riak、Membase、Neo4j、Memcache等。
1.1.3 数据库的对比与选择
关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,即原子性Atomic,一致性Consistency,隔离性Isolation,持久性Durability,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中。但是关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,硬盘I/O是一个很大的瓶颈,在一张包含海量数据的表中查询,效率是非常低的。
而对于数据模型比较简单的应用场景,非关系型数据库的优势则非常明显。例如面向高性能并发读写的key-value数据库,以键值对作为数据结构,同时所有的数据操作以及存储都在内存中进行,这就大大提升了数据访问的性能。所以本文选择了一款基于Key-Value的NoSQL数据库——Redis。
1.2 服务器集群
服务器集群是将一组独立的计算机系统通过某种机制(网络连接)有机的连接起来,组成一个松耦合的多处理器系统,部署在这些计算机系统中的应用程序可以通过网络共享内存,进行消息传送,实现进程间通信,从而实现分布式计算。 从外部来看,它们仅仅是一个系统,对外提供统一的服务。
集群的目的是通过负载均衡(load balance)和失败转移(failover)技术实现系统的可扩展性(scalability)和高可用性(high availability)。
本文中的即时通讯服务器和数据库服务器都采用了集群技术来保证使即时通讯系统的性能的可靠性。
1.3 数据传输方式
现有的计算机网络提供的传输层协议有UDP和TCP两种。TCP协议提供了面相连接的可靠的数据传输,而UDP提供的是无连接的不可靠的传输服务。即时通信系统应该保证消息传输的可靠性,所以应该使用TCP作为传输层协议。HTTP协议为应用层提供了一种无状态的请求响应机制的数据传输方式,然而HTTP协议是基于文本的,报文内容的生成与解析效率较低。所以本文采用TCP协议最为数据传输方式,同时,为了提高数据传输的效率,本文使用长连接方式,避免数据传输过程中频繁的建立连接、断开连接而造成的性能的损耗。
1.4 I/O多路复用机制的选择
I/O多路复用是指内核一旦发现进程指定的一个或者多个I/O条件准备读取,它就通知该进程。I/O多路复用适用于需要处理大量socket描述符的场景中。相比较用多线程的处理方法,I/O多路复用最大优势是系统开销小。对于高性能即时通信服务器来说,I/O多路复用技术是必不可少的。
现有的I/O多路复用的方法主要有select,poll和epoll。Select在几乎所有平台上都支持,其良好的跨平台支持是它的主要的也是为数不多的优点之一。它的缺点有:(1)单个进程能够监视的文件描述符的数量存在最大限制(2)select需要复制大量的句柄数据结构,产生巨大的开销(3)select返回的是含有整个句柄的列表,应用程序需要遍历整个列表才能发现哪些句柄发生了事件。Poll相比较于select,它没有select的第一个缺点,然而其他的缺点并没有得到改善。而epoll被认为是性能最好的I/O多路复用的方法。它没有select的那些缺点,同时还支持水平触发和边缘触发两种工作模式,使用边缘触发的性能更高。所以本文使用epoll的边缘触发作为I/O复用的方式。
1.5 内存管理
服务器程序使用内存池技术来主动管理内存。服务器程序会为每个在线用户维护与其相关数据结构。在用户登陆或者退出时,不进行内存的申请和释放,而是从内存池中分配内存。内存由内存池同意申请和释放。避免频繁向系统申请、释放内存而造成性能的损耗。
2 服务器结构
2.1 网络拓扑结构
即时通讯服务器和数据库服务器都采用集群模式运行,这两个集群通过高速局域网互相连接,把即时通讯服务器访问数据库的延迟降到最低。
每个即时通讯服务器都负责为不同集合的用户群提供服务,每个数据库服务器存储不同集合用户的数据。即时通讯服务器和数据库服务器所对应的用户的划分通过一致性哈希算法进行分配,从而保证在运行动态添加、删除某个结点服务器不会对整个系统造成影响。
图1 网络拓扑结构Fig.1 Network Topology
当有某个服务器出现错误时,其他服务器其他正常工作的服务器会接管它的工作,从而保证服务不会中断,整个服务器集群保持一定的冗余性能以应对个别服务器宕机和突发的大量用户请求。Redis数据库服务器通过Redis特有的主从模式保证数据的可靠性。同时还可以通过负载均衡服务器实现各个服务器结点的负载均衡,保证服务的稳定性。
2.2 软件结构
本文的即时通讯服务程序模仿高性能HTTP反向代理服务器Nginx的软件架构,采用了一个主进程和多个子进程的结构,来处理大规模用户连接与请求。
子进程,即工作进程,真正负责进行处理各个用户的请求。一个用户的所有服务都由同一个进程提供,不会有多个进程处理同一个用户请求的情况发生。这样做可以提高每个CPU核心内部cache的命中率,从而提高性能。
图2 服务器进程关系Fig.2 Relationship between server processes
图3 服务器I/O结构Fig.3 I/O architecture of the server
主进程负责使用信号机制来控制子进程的行为,同时监视所有子进程的运行状况。当子进程发生错误或异常退出后,主进程会自动重新启动一个新的子进程继续工作,从而保证性能不减少。同时,基于信号的控制方式,还可以让即时通讯服务在运行时修改服务配置。当需要修改配置时,主进程向旧的子进程发送信号表示不再处理新的客户端连接和客户请求,尽快退出,同时启动新的子进程,按照新的配置运行。这样就可以保证在不中断服务的情况下更新配置。
子进程的个数由服务器的CPU核心个数决定,一般与CPU核心个数相等。同时每个进程设置CPU亲缘性,保证每个工作进程都在相同的CPU核心中运行,避免多个工作进程在在不同CPU核心之间的上下文切换,从而减少核心内部cache失效的概率,提升cache的命中率,从而获得最大性能。
每个工作进程的最底层是操作系统提供的socket和epoll接口。Socket使用非阻塞方式,epoll使用边沿触发方式。当epoll告知进程某个socket收到消息后,从对应的socket中读出数据,根据消息的类型交给制定的消息处理器(Msg Handler)进行处理,生成的相应添加到消息队列(Msg Queue)中,然后再使用对应的socket将相应消息发送给客户端。
3 结论
本文给出了一种高性能即时通讯服务系统的设计方案。使用了Redis数据库保证数据库操作的高性能,同时采用数据库集群保证大规模数据操作的高性能。即时通讯服务器也采用集群技术保证系统的稳定性,使用TCP长连接、epoll和内存池技术保证即时通信服务器处理用户数据时的高性能。数据库和即时通讯服务器在使用集群技术的基础上,设有一定的冗余,保证系统整体的可靠性。
[1] 王军, 冯铃, 薛文伟. 服务器与集群系统节能技术研究[J].软件, 2011, 32(2): 4-8. WANG J, FENG L, XUE W W. A Survey of Energy Efficiency in Computer Servers[J]. Software, 2011, 32(2): 4-8. (in Chinese)
A Design of High Performance Instant Communication System
SONG Yu
(Beijing University of Posts and Telecommunications (Beijing) Broadband Network Research Center, Beijing 100876, China)
Instant communication is more and more necessary for people's lives with the development of the Internet. Some of those instant communication applications have already become a must in the daily life, such as QQ and WeChat. Currently the available instant communication applications are influencing the traditional telecommunications industry more and more strongly, and seem to step by step take the place of those services in traditional telecommunications industry, such as message business and phone call business. There is a big proportion of users who have a higher demand towards the quality of instant communication. They do not only require the basic requirement of message communication reliability, but also demand for low delay transmission, so as to reach the instant of communication. This paper explains the design and implementation of a kind of high-performance instant communication system which has the ability to provide service with a big scale of users. It considers two aspects to improve the performance of server, decrease the delay. One is the deployment of system, the other is the architecture of the software. These two also give the consideration to the reliability of server.
Computer software; Instant communication; Server; High performance
TP393.09
A
10.3969/j.issn.1003-6970.2016.12.038
宋昱(1992-),女,硕士,研究方向:新型智能手机应用。