閆飛翔,李煒,王純
(1 北京郵電大學網(wǎng)絡與交換技術(shù)國家重點實驗室,北京 100876;2 東信北郵信息技術(shù)有限公司,北京 100191)
隨著激烈的市場競爭和話音業(yè)務的趨于飽和,運營商話音業(yè)務利潤不斷下降,同時傳統(tǒng)的話音和短信等業(yè)務已不能滿足用戶日趨增長的多樣化需求。面對嚴峻的市場形勢,運營商必須調(diào)整業(yè)務模式,在優(yōu)化傳統(tǒng)業(yè)務的同時,另辟蹊徑,尋求新的業(yè)務增長點。業(yè)務創(chuàng)新已經(jīng)成為了運營商發(fā)展的戰(zhàn)略性問題。但是運營商傳統(tǒng)網(wǎng)絡具有明顯的封閉性,缺乏接受外來創(chuàng)新業(yè)務的能力。同時業(yè)務表現(xiàn)單一,用戶體驗不夠豐富,特別是在面對互聯(lián)網(wǎng)開放模式的挑戰(zhàn)時,這些弱點表現(xiàn)的尤為明顯?;ヂ?lián)網(wǎng)的開放模式與運營商網(wǎng)絡的Walled Garden模式截然不同,互聯(lián)網(wǎng)的開放性使得各種技術(shù)和業(yè)務的創(chuàng)新層出不窮,極大地豐富和滿足了用戶的業(yè)務需求,人們開始將更多的目光投向互聯(lián)網(wǎng)。在互聯(lián)網(wǎng)開放浪潮中,Google,Yahoo!,F(xiàn)acebook,校內(nèi)網(wǎng),開心網(wǎng)等大量的互聯(lián)網(wǎng)公司加入了開放大軍,通過開放自身資源并整合互聯(lián)網(wǎng)資源,提供開放平臺,構(gòu)建價值鏈,聚攏了一批批的社會SP(Service Provider)、中小軟件公司,創(chuàng)造了大量的應用,隨之帶動了互聯(lián)網(wǎng)增值服務ARPU(Average Revenue Per User)的增長。
CM-IMS吸收與借鑒了互聯(lián)網(wǎng)的開放模式,其天生具備了開放、融合的特性。CM-IMS能夠整合通信網(wǎng)與互聯(lián)網(wǎng)兩種異構(gòu)環(huán)境下的各類元素。運營商可以利用CM-IMS整合異構(gòu)能力的先天特性,打造一個“殺手級應用”,即提供一個基礎通信能力開放平臺,向互聯(lián)網(wǎng)開放運營商的基礎通信能力,實現(xiàn)互聯(lián)網(wǎng)與通信網(wǎng)絡業(yè)務的融合與應用的混搭(Mashup),同時,通過建立良好的商業(yè)模式,吸引互聯(lián)網(wǎng)SP入駐,讓SP自己開發(fā)適合市場的“殺手級應用”。在CMIMS基礎上,中國移動提出了wIMS技術(shù), 通過wIMS技術(shù)為運營商打造一個基礎通信能力的開放平臺[1]。
wIMS將要在多個地區(qū)進行部署,上線后,平臺用戶會穩(wěn)定增長,業(yè)務需要穩(wěn)定運行,為了樹立移動運營商的信息專家的形象,必須不斷提高wIMS平臺的服務能力,提高平臺的容錯能力、可靠性。為此,實現(xiàn)wIMS平臺的集群化將能更好解決平臺的服務能力擴展和容錯性、穩(wěn)定性的提升問題,更好地為移動運營商提供綜合業(yè)務服務,故本文對wIMS平臺的集群進行了設計和實現(xiàn)。
利用集群技術(shù)可以使用多個節(jié)點運行同樣的程序,通過負載均衡技術(shù)把負載均勻的分布到各個節(jié)點上,這樣一方面可以提升系統(tǒng)的服務能力,另一方面,當某個節(jié)點發(fā)生故障不能提供服務時,可以使用其他的節(jié)點提供服務,從而系統(tǒng)可以保持可用狀態(tài),避免出現(xiàn)單點故障。而負載均衡器則可以使用多種雙機熱備份方案來避免發(fā)生故障。集群服務能力的擴展可以簡單的通過增加節(jié)點的方式來實現(xiàn),具備極強的可擴展性。通過集群,wIMS系統(tǒng)將能做到高穩(wěn)定性、高可靠性、高可擴展性。
圖1所示為wIMS中間件平臺的分層網(wǎng)絡架構(gòu)圖,分為應用層、wIMS中間件層、CM-IMS業(yè)務能力層和CM-IMS核心層,介紹了wIMS中間件在IMS網(wǎng)絡中的位置以及該平臺與所在網(wǎng)絡中相關(guān)網(wǎng)元之間的交互。
圖1 wIMS網(wǎng)絡架構(gòu)圖
如圖2 wIMS集群的系統(tǒng)架構(gòu)所示,wIMS中間件集群系統(tǒng)由Load-Balancer、共享存儲和多個wIMS節(jié)點組成。下面對每個實體的主要功能及實體間的交互進行詳細的描述。
集群系統(tǒng)增加Load-Balancer,作為負載均衡器,將互聯(lián)網(wǎng)上的HTTP請求分發(fā)給南向的多個wIMS節(jié)點。同時作為代理,將多個wIMS節(jié)點外發(fā)的HTTP請求,轉(zhuǎn)發(fā)給Internet中的用戶。Load-Balancer1和Load-Balancer2采用浮動IP雙機熱備方案,正常工作時Load-Balancer1處理HTTP請求,當發(fā)生宕機或網(wǎng)絡故障時,通過浮動IP機制,由Load-Balancer2處理請求。這樣能保證HTTP客戶主觀上仍然感受到的是與單一工作站進行通信,集群特性對用戶仍然透明[2]。同時,又能保證Load-Balancer的可靠性。
圖2 wIMS集群的系統(tǒng)架構(gòu)
共享存儲有兩個作用。一方面作為Load-Balancer和wIMS節(jié)點的中間存儲介質(zhì),每個wIMS節(jié)點將心跳消息寫到共享存儲中,Load-Balancer啟動定時任務到共享存儲中讀取多個wIMS節(jié)點的心跳消息,來判斷當前存在wIMS節(jié)點個數(shù),及獲得每個節(jié)點的IP和PORT。另外一方面作為多個wIMS節(jié)點間的共享存儲,wIMS平臺具有開發(fā)者、應用和用戶三種角色,需要對各個角色的SLA(Service-Level Agreement)進行控制,比如規(guī)定某個應用每秒發(fā)送短信最大數(shù)為20。此外wIMS平臺還需要保存每次通信能力調(diào)用的相關(guān)數(shù)據(jù),比如每次點擊撥號(Click to Dial,CTD)呼叫的實時狀態(tài),用來提供給外部互聯(lián)網(wǎng)應用進行查詢。由于外部應用的HTTP請求是被Load-Balancer分發(fā)到各個wIMS節(jié)點的,所以wIMS集群系統(tǒng)需要這樣一個共享存儲。共享存儲1和共享存儲2采用邏輯上的雙機熱備份方案,寫操作和更新操作在兩個共享存儲中同時進行,而讀操作選取一個共享存儲作為主機進行讀取。
wIMS是業(yè)務能力處理的服務器,Load-Balancer在多個wIMS節(jié)點中采用Round-Robin算法,將HTTP請求轉(zhuǎn)發(fā)給一個wIMS節(jié)點,這樣能達到負載均衡,使每一個服務器都得到充分的利用[3,4]。在集群系統(tǒng)正常運行時,增加或者刪除一個wIMS節(jié)點,系統(tǒng)都能自動的恢復到正常運行,不需要人工干預其他機器。增加時,只需要在此wIMS節(jié)點上配置好共享存儲的IP和PORT,新增wIMS節(jié)點就會定時將心跳消息寫到共享存儲中,Load-Balancer定時讀取心跳時,便知道系統(tǒng)中增加了一個wIMS節(jié)點;從系統(tǒng)中移除一個wIMS節(jié)點時,此臺服務器將不會再向共享存儲中寫心跳,Load-Balancer取不到此wIMS節(jié)點的心跳時,將不會再轉(zhuǎn)發(fā)HTTP消息到此wIMS節(jié)點,集群系統(tǒng)會馬上自動恢復正常運行。這樣符合集群系統(tǒng)的可伸縮特性。
wIMS南向連接處理業(yè)務的AS集群,AS同樣啟動定時任務到共享存儲中讀取多個wIMS節(jié)點的心跳消息,來判斷當前存在wIMS節(jié)點個數(shù),及獲得每個節(jié)點的IP和PORT。然后定時向每個wIMS節(jié)點發(fā)送HTTP心跳消息,各wIMS節(jié)點便知道系統(tǒng)中AS的數(shù)量及IP和PORT。wIMS將來自互聯(lián)網(wǎng)上的HTTP請求處理后轉(zhuǎn)發(fā)給AS,給互聯(lián)網(wǎng)用戶提供基礎通信能力。
通過以上方案設計的wIMS集群系統(tǒng)符合高性能、高可靠性和伸縮性等要求。通過增加Load-Balancer和多個wIMS節(jié)點可以提高系統(tǒng)的處理能力;集群系統(tǒng)中的任何一臺服務器出現(xiàn)故障時,系統(tǒng)都能在短時間內(nèi)回復正常運行;此外,可以隨意的增加和刪除wIMS節(jié)點,而無需人工干預其他服務器。
Load-Balancer作為wIMS集群系統(tǒng)和Internet通信必須經(jīng)過的唯一節(jié)點,需要具有很高的I/O處理能力,可以采用硬件或者軟件來實現(xiàn)。硬件成本高,消息分發(fā)策略不靈活。軟件實現(xiàn)性能雖然比硬件低,但是能充分節(jié)約成本,可以隨意實現(xiàn)自己想要的消息分發(fā)策略。由于處理邏輯簡單,所以考慮使用軟件來實現(xiàn)Load-Balancer,wIMS中間件平臺是基于tomcat容器開發(fā)的[5],為保持與系統(tǒng)的融合與一致,Load-Balancer仍然使用tomcat。在HP ProLiant BL460c G7服務器(操作系統(tǒng)Red Hat Enterprise Linux Server release 5.5,配置4C8T、64GB內(nèi)存)上對寫好的Load-Balancer做壓力測試,由于Load-Balancer內(nèi)部處理邏輯簡單,每秒能處理1500個HTTP請求,完全符合目前業(yè)務開展的能力要求[6]。
定時讀寫心跳功能使用Quartz來實現(xiàn)。Quartz是個開源的作業(yè)調(diào)度框架,為在Java應用程序中進行作業(yè)調(diào)度提供了簡單卻強大的機制。Quartz允許開發(fā)人員根據(jù)時間間隔(或天)來調(diào)度作業(yè)。它實現(xiàn)了作業(yè)和觸發(fā)器的多對多關(guān)系,還能把多個作業(yè)與不同的觸發(fā)器關(guān)聯(lián)。整合了Quartz的應用程序可以重用來自不同事件的作業(yè),還可以為一個事件組合多個作業(yè)[7]。
Web容器中每個Servlet的生命周期長短,直接影響到Web容器的處理性能。共享存儲頻繁被訪問,需要選擇一個存儲速度較快的介質(zhì),這樣每個Servlet才能迅速的處理完請求后被銷毀。NoSQL型數(shù)據(jù)庫redis正符合此種要求,redis本質(zhì)上是一個Key-value存儲系統(tǒng)。整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載在內(nèi)存當中進行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進行保存但是他的數(shù)據(jù)可以持久化的保存在磁盤上,解決了服務重啟后數(shù)據(jù)丟失的問題。它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,還支持各種不同的排序能力,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。官方給出的性能報告中redis每秒能做110000次SET操作,或者每秒能做81000次GET操作。目前來看redis無疑是共享存儲的最佳選擇[8]。
上文中介紹wIMS需要對開發(fā)者、應用和用戶三種角色的SLA進行控制,其中有訪問頻率類的控制,比如每個應用每秒最多發(fā)起100次點擊撥號呼叫。由于集群系統(tǒng)中包含多個wIMS節(jié)點,故多個wIMS節(jié)點需要共同維護一個呼叫請求隊列系統(tǒng)??梢允褂胷edis來構(gòu)建這樣一個訪問控制模塊,可以通過參數(shù)對精度與性能之間進行調(diào)整。首先,程序在某個時間要求加入一次訪問記錄,會先針對當前時間計算要用到的時間片,并對這個時間片的counter加1;然后,程序在判斷一段時間訪問了多少次時,會先計算這段時間包含多少個時間片,然后取出所有這些時間片將counter相加后返回。當請求數(shù)超過SLA的規(guī)定時,wIMS回403響應,禁止發(fā)起呼叫請求。
Load-Balancer和wIMS都是基于tomcat容器開發(fā)的,為了保證Load-Balancer和wIMS的java進程能夠長期穩(wěn)定的運行,需要給二者添加守護進程。守護進程可以使用apache開源項目commons-daemon中的jsvc工具,jsvc是一個庫和程序的集合,通過它能使java程序在UNIX系統(tǒng)上運行的更加容易,tomcat可以作為一個守護進程來啟動以及停止,在Linux系統(tǒng)上以服務的方式啟動tomcat程序。這樣就能保證在tomcat的java進程因為某些原因宕機后能自動啟動[9]。
采用tomcat實現(xiàn)了wIMS的集群式部署,利用負載均衡器將HTTP請求分發(fā)到多臺Web服務器上,當一臺Web服務器發(fā)生故障時,其他Web服務器不受影響。多臺wIMS應用服務器可以組成集群,在業(yè)務相同配置的情況下,應用服務器群可以分發(fā)業(yè)務請求,在一臺應用服務器發(fā)生故障時,可以將業(yè)務請求轉(zhuǎn)發(fā)到正常工作的服務器??梢钥闯?,wIMS的集群化,一方面提升了wIMS平臺的性能,通過節(jié)點的增加就可以提高服務能力,實現(xiàn)了服務能力的高度可擴展性,另一方面,提高了平臺的穩(wěn)定性,從而為用戶提供更好質(zhì)量的服務。
[1] 鄭侃,王純. IMS中基于REST的wIMS中間件平臺設計與實現(xiàn)[J].電信工程技術(shù)與標準化,2010,23(8):77-82.
[2] 李雙慶. Web服務器集群技術(shù)研究[D]. 重慶:重慶大學, 2003,10月.
[3] 單志廣. Web服務器集群體系結(jié)構(gòu)[J]. 網(wǎng)絡世界,2002,09月.
[4] 黃海,廖建新,朱曉民. IMS實時計費系統(tǒng)集群中的負載均衡研究[J]. 高技術(shù)通訊,2009,19(11):1117-1123.
[5] 孫衛(wèi)琴. Tomcat與Java Web開發(fā)技術(shù)詳解[M]. 北京:電子工業(yè)出版社,2009.
[6] 約翰遜,威曾格普,拉瓦提著,韓智文譯. Linux服務器性能調(diào)整[M]. 北京:清華大學出版社,2009.
[7] Quartz官方網(wǎng)站.http://www.opensymphony.com/quartz/
[8] Redis官方網(wǎng)站.http://redis.io/
[9] jsvc官方網(wǎng)站.http://commons.apache.org/daemon/jsvc.html