999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種高性能即時通訊服務系統的設計

2016-02-13 05:58:24
軟件 2016年12期
關鍵詞:進程數據庫用戶

宋 昱

(北京郵電大學網絡技術研究院寬帶網研究中心,北京 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-),女,碩士,研究方向:新型智能手機應用。

猜你喜歡
進程數據庫用戶
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
如何獲取一億海外用戶
創業家(2015年5期)2015-02-27 07:53:25
社會進程中的新聞學探尋
民主與科學(2014年3期)2014-02-28 11:23:03
主站蜘蛛池模板: 青青青视频91在线 | 欧美在线中文字幕| 欧美在线网| 亚洲成a人片77777在线播放| 91无码视频在线观看| 无码又爽又刺激的高潮视频| 欧洲亚洲欧美国产日本高清| 国产成人高清精品免费软件| 久久人人妻人人爽人人卡片av| 国产高清在线丝袜精品一区| 97久久免费视频| 自拍亚洲欧美精品| 亚洲91精品视频| 国产午夜精品鲁丝片| 天天综合网站| 欧美啪啪一区| 亚洲精品午夜无码电影网| 99久久婷婷国产综合精| 在线欧美一区| 久久国产精品夜色| 亚洲精品波多野结衣| 亚洲欧美精品日韩欧美| 日韩国产欧美精品在线| 国产亚洲视频免费播放| 激情亚洲天堂| 黄片在线永久| 久久福利片| 伊人久久久久久久| 国产噜噜在线视频观看| 国产极品美女在线播放| 黄色污网站在线观看| 中文字幕一区二区人妻电影| 国产精品流白浆在线观看| 久草网视频在线| 免费A级毛片无码免费视频| 亚洲熟女中文字幕男人总站| 色妞www精品视频一级下载| 在线观看国产黄色| 国产精品99r8在线观看| 亚洲无码免费黄色网址| 日韩经典精品无码一区二区| aa级毛片毛片免费观看久| 婷婷色狠狠干| 人妻丰满熟妇AV无码区| 国产精品私拍在线爆乳| 日韩在线网址| 夜色爽爽影院18禁妓女影院| 高清大学生毛片一级| 久久婷婷综合色一区二区| 99热这里只有精品2| 亚洲中文字幕国产av| 国产真实乱了在线播放| 国产色婷婷视频在线观看| 伊人久久久久久久| 操美女免费网站| 无码日韩精品91超碰| 91蝌蚪视频在线观看| 视频一区视频二区日韩专区| 成年看免费观看视频拍拍| 午夜毛片福利| 欧美精品在线视频观看| 热久久国产| 久久精品aⅴ无码中文字幕| 亚洲人妖在线| 久久精品丝袜高跟鞋| 色欲色欲久久综合网| 国产H片无码不卡在线视频| 2021国产精品自产拍在线观看| 色噜噜在线观看| 亚洲Av综合日韩精品久久久| 中文纯内无码H| 国内精品小视频在线| 国产高清又黄又嫩的免费视频网站| 国产精品丝袜在线| 国产高清又黄又嫩的免费视频网站| 亚洲午夜国产精品无卡| 国产精品不卡片视频免费观看| a毛片在线| 乱人伦99久久| 欧美A级V片在线观看| 91欧美在线| 99久久国产自偷自偷免费一区|