陳杰 龐濤 付志鵬 唐勇 楊維云
編者按
在數據呈爆炸性增長的時代,云計算與大數據技術的重要性不言而喻,對海量數據的挖掘、分析與應用已成熱點。本次專題在著重探討電信運營商該如何發(fā)掘大數據價值、拓展新型增值業(yè)務的基礎上,亦提出了大數據在金融、旅游等領域的具體應用。此外,有關云緩存技術、大數據融合建設的研究在專題中也有所體現(xiàn),希望通過本次專題為云計算與大數據的發(fā)展提供一些思路與建議。
【摘 要】傳統(tǒng)的緩存處理機制難以滿足互聯(lián)網業(yè)務高并發(fā)、高性能的需求,因此提出了動靜結合的多級云緩存架構,可支持大規(guī)模數據存儲和快速檢索查詢服務,并基于一致性哈希算法,實現(xiàn)了對多分布式服務節(jié)點的統(tǒng)一管理和調度效率提升,最后通過在大規(guī)模游戲業(yè)務平臺開展的實踐,驗證了平臺性能和訪問速度的大幅提升。
【關鍵詞】大規(guī)模游戲平臺 云緩存 數據存儲
中圖分類號:TP399 文獻標識碼:A 文章編號:1006-1010(2016)05-0005-05
1 引言
近年來,以游戲、視頻為代表的移動互聯(lián)網應用高速發(fā)展。與傳統(tǒng)電信應用相比,大型移動互聯(lián)網應用具有以下特點:
(1)高并發(fā)、大流量:數以億計規(guī)模的高并發(fā)用戶,長時間的大流量訪問;
(2)海量數據:存儲、管理海量數據,需要使用大量服務器;
(3)用戶接入環(huán)境復雜:面向全球用戶提供服務,用戶網絡環(huán)境千差萬別;
(4)短時間用戶增長迅速,急需大量資源;
(5)產品復雜多樣,需求快速變更。
為了滿足多網絡用戶快速接入需求,提升用戶體驗,傳統(tǒng)電信業(yè)務平臺多采用內容分發(fā)(CDN,Content Delivery Network)緩存機制。但動態(tài)緩存數據管理較為復雜,缺乏靈活性,無法滿足快速增長和超高的游戲業(yè)務峰值并發(fā)服務需求。
基于此,本文接下來將提出動靜結合的多級云緩存框架,以適應大規(guī)模移動互聯(lián)網業(yè)務平臺的承載需求。在傳統(tǒng)CDN文件緩存基礎上引入Varnish靜態(tài)緩存、基于MAP的本地動態(tài)緩存和Redis遠程動態(tài)緩存,構建多級云緩存,并通過實踐證明其實現(xiàn)了高性能I/O吞吐能力,減少了服務器和核心數據庫的交互次數,提高了接口訪問速度和并發(fā)量。同時將緩存處理邏輯封裝,面向應用層業(yè)務需求統(tǒng)一開放接口,提高了上層應用開發(fā)效率。
2 動靜結合的云緩存架構
常見的互聯(lián)網業(yè)務多采用分布式的內容分發(fā)緩存機制。在中國電信、中國移動、中國聯(lián)通網絡中部署服務器節(jié)點,以某一節(jié)點為中心,實現(xiàn)多節(jié)點間的數據共享和同步。不同網絡的用戶可以就近接入CDN節(jié)點,快速、高效地獲取應用內容?;贑DN機制的緩存架構圖如圖1所示:
在實際業(yè)務運營中,傳統(tǒng)的CDN緩存機制對動態(tài)緩存數據管理較為復雜,缺乏靈活性。尤其是新業(yè)務上線時,需要大量人力檢查并修改緩存文件,給業(yè)務快速部署和服務靈活提供帶來了嚴重的挑戰(zhàn)。
針對上述問題,本文提出了動靜結合的云緩存架構,以滿足高并發(fā)的移動互聯(lián)網業(yè)務承載需求。該架構具備橫向擴展能力,相對上層業(yè)務系統(tǒng)透明,可根據業(yè)務的發(fā)展,平滑擴展存儲性能與容量,動態(tài)滿足業(yè)務需求,有效地提升系統(tǒng)資源利用率。系統(tǒng)架構如圖2所示:
中心數據庫采用關系型數據庫MySQL和非關系型數據庫MongoDB。本地動態(tài)緩存采用MAP內存處理技術,遠程動態(tài)緩存采用Redis技術;本地緩存和遠程緩存之間通過事件驅動模型實時更新和維護數據;采用XML標記語言,以標準格式封裝緩存處理邏輯以及各種查詢、數據同步、容災備份等統(tǒng)一數據服務的業(yè)務邏輯,并以Java接口方式封裝成API,提供給相關業(yè)務統(tǒng)一調用。各種業(yè)務調用緩存機制后,輸出結果采用靜態(tài)緩存Varnish技術進行加速,以提升效率。
通過對緩存處理邏輯的封裝,為應用業(yè)務層提供了統(tǒng)一的存儲訪問接口,使開發(fā)人員從繁雜的緩存維護同步工作中解脫出來,專注于業(yè)務開發(fā),從而提高了開發(fā)效率,減少了由于緩存數據維護不一致而導致的系統(tǒng)漏洞和缺陷,提升了系統(tǒng)穩(wěn)定性。
3 關鍵技術方案
3.1 靜態(tài)緩存和動態(tài)緩存機制
在靜態(tài)緩存方面,采用高性能的開源HTTP加速器Varnish技術,緩存靜態(tài)頁面和一些重要業(yè)務的靜態(tài)數據。Varnish基于內存進行緩存,性能好,單臺服務并發(fā)可達到5000次/s。采用反向代理Web容器定期維護緩存數據。當Tomcat服務器出現(xiàn)故障時,可自動切換到Varnish,提高了平臺的穩(wěn)定性。
在本地動態(tài)緩存方面,將用戶訪問頻繁的靜態(tài)數據備份到本地基于MAP的內存緩存中,以減少網絡I/O的消耗,提高平臺的并發(fā)量。
本地緩存中各集群節(jié)點的數據維護采用組播技術實現(xiàn)。所有節(jié)點均為對等模式,節(jié)點自動發(fā)現(xiàn),不存在主節(jié)點選舉。每個節(jié)點都維護一份集群成員表,新節(jié)點加入時,通知集群其他成員更新成員列表,以便每個節(jié)點都能及時更新成員列表。如圖3所示,節(jié)點1、節(jié)點2、節(jié)點3分別維護一份成員列表,定期通過組播更新自己節(jié)點消息,當節(jié)點4新加入集群組時,向節(jié)點1、節(jié)點2和節(jié)點3組播自身的節(jié)點消息,節(jié)點1、節(jié)點2和節(jié)點3接收到該信息后,將節(jié)點4加入到其成員列表中。同時,節(jié)點1、節(jié)點2和節(jié)點3也不斷向集群發(fā)送其節(jié)點消息,節(jié)點4接收后將依次更新成員列表信息,最終達到四個節(jié)點均擁有四個節(jié)點成員信息。當任意機器數據發(fā)生變更時,則將變更數據發(fā)送給其他機器,保證各機器數據的一致性。
遠程動態(tài)緩存采用Redis技術。與Memcached類似,Redis是一個key-value存儲系統(tǒng),它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set:有序集合)和Hash(哈希類型)等。
游戲業(yè)務實踐中,Redis緩存采用主從讀寫分離技術。在大并發(fā)業(yè)務需求(如游戲APP集中下載、活動集中參與等)時,使用多臺服務器作為Redis服務器,并采用“多級服務器集群架構”和“主從模式”對服務器設備進行管理。設定一個主服務器負責數據寫入,多臺從服務器負責數據讀取。主服務器和從服務器之間通過Redis server端實現(xiàn)數據同步。各Redis服務器也采用分布式,Redis客戶端負責選擇連接到哪臺服務器,無需人工干預。
通過分級動態(tài)緩存技術,極大提升了平臺的服務能力。游戲業(yè)務單臺服務器并發(fā)可達到7000次/s,命中率可達90%以上。
3.2 本地緩存與遠程緩存機制
本地緩存保存一些常用的基本數據和少量列表信息,以減少調用遠程緩存服務器及數據庫的壓力。同時為了控制內存的占用量,在處理之前需要評估緩存信息大小。當緩存的信息總量超過預設的內存大小時,使用近期最少使用(LRU,Least Recently Used)算法,對內存中緩存的信息進行替換。目前僅這一層的訪問命中率可高達90%以上,保證了接口的整體訪問速度在200ms以內。
遠程緩存主要用來保存數據庫各表之間的對應關系,以代替?zhèn)鹘y(tǒng)的數據庫查詢功能,實現(xiàn)業(yè)務快速查詢和處理響應。
為了實現(xiàn)緩存處理邏輯層的統(tǒng)一封裝,需要將多臺機器的緩存信息同步,實現(xiàn)本地緩存與遠程緩存之間的信息更新。在游戲業(yè)務實踐中,通過事件驅動模型實時更新/維護緩存數據。具體實現(xiàn)過程如圖4所示。
數據查詢采用本地緩存、遠程緩存、核心層本地緩存、核心層遠程緩存、數據庫的查詢流程。在遠程緩存沒有命中時,將查詢中心數據庫,查詢結果將保存在本地緩存和遠程緩存中。在數據保存在本地緩存后,將以異步的方式發(fā)送給其它節(jié)點機器實現(xiàn)同步。
采用了創(chuàng)新的云緩存框架后,平臺業(yè)務應用接口最高不超過300ms,90%在100ms以內,緩存刷新延遲不超過500ms。
3.3 改進型的一致性哈希映射算法
普通的Hash方法在數據緩存處理時存在問題。例如,以key%N的方式將數據映射到具體的服務器物理節(jié)點上,其中key是數據的key,N是服務器節(jié)點數。如果有一個機器加入或退出這個集群,每一個服務器緩存節(jié)點都必須進行數據遷移,數據的緩存命中率將大幅降低。
本文采用改進型的一致性哈希算法,以降低緩存節(jié)點變化對緩存命中率的影響。如圖5所示,實際部署4個物理節(jié)點,將數據按照key的哈希值分布到100個虛擬節(jié)點上,以N=Hash(key)%100的方式計算分配每個物理節(jié)點,配置Hash值權重。N為0~19時,則數據落到Node1節(jié)點上;N為20~39時,則數據落到Node2節(jié)點上;N為40~59時,則數據落到Node3節(jié)點上;N為60~99時,則數據落到Node4節(jié)點上。
如圖6所示,如果Node4節(jié)點負載過大,則添加Node5節(jié)點,調整中只會影響Node4節(jié)點的緩存命中率,從而實現(xiàn)緩存節(jié)點平滑地添加與刪除。
4 應用效果
本文的研究成果在中國電信愛游戲業(yè)務平臺中開展了應用實踐。
在未采用云緩存機制前,愛游戲業(yè)務采用互聯(lián)網傳統(tǒng)處理機制,利用關系型數據庫保存業(yè)務的基礎數據、用戶訪問日志以及經營分析數據等。在實際業(yè)務運營中,該架構無法滿足高并發(fā)、高性能要求。以用戶下載為例,緩存的命中率較低(僅為30%),實測的平均下載速度小于100kb/s,請求返回延時較大,特別是在服務高峰期,經常出現(xiàn)服務超時、連接不成功等問題,用戶體驗較差,流失率增高。
在采用本文提出的云緩存架構進行平臺升級后,靜態(tài)緩存命中率達95%,動態(tài)數據緩存命中率達90%,中心數據庫僅需處理其中5‰的業(yè)務量。中心數據庫無需直接面對用戶請求,服務能力提升了200倍,大幅提高了整個系統(tǒng)的吞吐量。對于一個復雜的列表頁面請求,原機制下響應時間需800ms左右。升級后命中一級緩存(靜態(tài)頁面),響應時間不到10ms,加快了數據訪問速度,提升了用戶體驗。
5 結束語
隨著移動互聯(lián)網業(yè)務的快速增長,迫切需要使用緩存技術優(yōu)化提升平臺性能。本文利用Varnish、Redis等開源互聯(lián)網技術,構建了動態(tài)緩存和靜態(tài)緩存相結合、本地緩存和遠端緩存相結合的多級云緩存體系,可大幅提升業(yè)務平臺承載能力,滿足海量數據存儲和用戶高并發(fā)量訪問的需求。研究成果已應用于愛游戲平臺優(yōu)化升級,提高了緩存命中率、減少了中心數據庫的I/O訪問壓力、降低了用戶的訪問時間、提升了用戶體驗。
參考文獻:
[1] 邱祝文. 基于redis的分布式緩存系統(tǒng)架構研究[J]. 網絡安全技術與應用, 2014(10): 52.
[2] 王心妍. Memcached和Redis在高速緩存方面的應用[J]. 無線互聯(lián)科技, 2012(9): 8-9.
[3] 曾泉勻. 基于Redis的分布式消息服務的設計與實現(xiàn)[D]. 北京: 北京郵電大學, 2014.
[4] 秦秀磊,張文博,魏峻,等. 云計算環(huán)境下分布式緩存技術的現(xiàn)狀與挑戰(zhàn)[J]. 軟件學報, 2013,24(1): 50-66.
[5] 賀琛,陳肇雄,黃河燕,等. Web緩存技術綜述[J]. 小型微型計算機系統(tǒng), 2004,25(5): 836-842.
[6] 趙玉偉,趙小雨,喬木,等. 緩存技術在B/S架構信息系統(tǒng)中的應用[J]. 計算機工程, 2008,34(1): 233-235.
[7] 楊傳棟,余鎮(zhèn)危,王行剛,等. 一種流媒體CDN的內容部分推送策略[J]. 計算機工程與應用, 2007,43(25): 162-164.
[8] 周江. 面向大數據分析的分布式文件系統(tǒng)關鍵技術[J]. 計算機研究與發(fā)展, 2014(2): 382-394.
[9] 戴偉,胡鵬. 基于緩存回收的成本節(jié)約云服務算法研究[J]. 計算機應用研究, 2015,32(10): 3138-3141.
[10] 方暉. 基于能效控制的DctAF框架式云緩存技術[J]. 科技通報, 2014(2): 77-79. ★
作者簡介
陳杰:高級工程師,現(xiàn)任職于炫彩互動網絡科技有限公司,研究方向為互聯(lián)網大型業(yè)務平臺技術架構、大數據技術框架、通信技術和移動互聯(lián)網等。
龐濤:工程師,現(xiàn)任職于中國電信股份有限公司廣州研究院,主要研究方向為大數據、業(yè)務平臺承載技術、云應用技術等。
付志鵬:工程師,現(xiàn)任職于炫彩互動網絡科技有限公司,主要研究方向為大數據、移動互聯(lián)網等。