苗 凡,朱建軍,戴琳琳
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
集群節(jié)點動態(tài)調(diào)整技術在互聯(lián)網(wǎng)分區(qū)集群中的研究
苗 凡,朱建軍,戴琳琳
(中國鐵道科學研究院 電子計算技術研究所,北京 100081)
針對售票高峰時期對計算資源的需求緊迫,而非高峰時期的需求不突出的現(xiàn)狀,提出集群彈性計算的優(yōu)化方案,滿足互聯(lián)網(wǎng)分區(qū)服務器資源充分利用的需求,并對該方案的實現(xiàn)與可行性進行深入的分析與研究。
集群;負載均衡;自動擴展;容器
集群節(jié)點動態(tài)調(diào)整技術,即彈性計算,就是在負載均衡的基礎上根據(jù)負載的大小自動增加或減少節(jié)點的技術。與傳統(tǒng)的手工增刪節(jié)點相比,彈性計算具有響應時間短,運行維護成本低,穩(wěn)定性高等特點而受到業(yè)界的廣泛重視。
新一代中國鐵路客票發(fā)售和預訂系統(tǒng)(簡稱:客票系統(tǒng))經(jīng)過3年的發(fā)展,已經(jīng)成功完成3次春運大考,單日售票量突破1 000萬,互聯(lián)網(wǎng)渠道超過600萬。在旅客暢享回家團圓的背后,客票系統(tǒng)的擴展性,穩(wěn)定性,容災能力,運行維護能力,緊急故障處理能力承受了嚴峻的考驗。春運結束后,當初以峰值配置的服務器出現(xiàn)CPU、內(nèi)存、網(wǎng)絡使用率較低的現(xiàn)象。如果引入彈性計算將可以有效地管理服務器資源,提高資源利用率,將閑置的計算資源投入到新的業(yè)務上,讓傳統(tǒng)的人工新增服務器上線擴容逐漸過渡到全自動維護,節(jié)約硬件成本與運行維護人力成本,對新一代客票系統(tǒng)的建設具有重要意義。
新一代客票系統(tǒng)中的應用服務器INETIS(互聯(lián)網(wǎng)分區(qū)服務器),主要負責將互聯(lián)網(wǎng)、手機等渠道的業(yè)務請求準確分發(fā)到各數(shù)據(jù)節(jié)點上,同時提供一個安全、高性能、高擴展、穩(wěn)定可靠的中間件服務。作為新一代客票系統(tǒng)的核心模塊,INETIS的可靠性和可用性直接影響著系統(tǒng)的交易性能和用戶體驗。由于INETIS的業(yè)務多且用戶基數(shù)大,在節(jié)假日高峰,每個放票時間點都會產(chǎn)生猶如洪水般的網(wǎng)絡流量,固定數(shù)目的物理節(jié)點無法支撐不可預見的并發(fā)量。本文將研究一種基于Mesos、Marathon的高可用Docker集群架構,來保證壓力暴增10倍的情況下INETIS仍能正常提供服務。它具有以下功能:
(1)自動實時,無感知服務刷新;
(2)支持任意多臺Docker主機;
(3)支持負載均衡,故障遷移;
(4)具備資源彈性,自動增刪節(jié)點;
(5)具備健康檢測功能,支持高可靠性。
2.1 Docker
隨著企業(yè)服務的大規(guī)模部署,單臺應用服務器的CPU、內(nèi)存、網(wǎng)絡連接的處理能力已成為瓶頸,難以滿足大規(guī)模、高并發(fā)的需求,這就需要服務器集群。在X86時代,虛擬化技術因能提高企業(yè)資源的利用率,而成為當時構建大規(guī)模集群的主流技術。隨著云計算時代的到來,企業(yè)對應用服務器的安全性、隔離性要求越來越高,對于部署的標準化以及虛擬機的性能要求越來越高,容器技術的出現(xiàn)解決了以上問題。
Docker是以Linux容器(LXC,Linux Container)為基礎,實現(xiàn)輕量級的虛擬化解決方案。在LXC的基礎上Docker進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便,用戶操作Docker容器就像操作一個快速輕量級的虛擬機一樣簡單。
通過虛擬機搭建的集群自動擴展會面臨許多問題:虛擬機提供的是完整的操作系統(tǒng)環(huán)境,遷移的時候包含了大量類似硬件驅(qū)動,虛擬處理器,網(wǎng)絡接口等并不需要的信息。虛擬機啟動時間長,同時也會消耗大量的內(nèi)存及CPU資源等。
Docker運行起來就和一個常規(guī)程序差不多,與虛擬機相比就顯得非常輕量級,而且解決了虛擬機面臨的以下問題:
(1)用戶可以根據(jù)自己的需要定制服務所依賴的環(huán)境,同時保持環(huán)境統(tǒng)一;
(2)Docker鏡像(image)的Tag功能,有助于知道各個鏡像的功能和內(nèi)容,使得部署和升級更加方便;
(3)Docker創(chuàng)建一個鏡像和制作一個系統(tǒng)快照只需要幾秒鐘,還具有運行性能高,啟動速度快的優(yōu)點。
2.2 Mesos和Marathon
Mesos是一款開源的集群資源管理平臺,它的主要作用是將集群中的所有機器抽象成一個大的計算機,運行在Mesos上的所有服務,都不需要關心自身運行在哪個機器上,而只需要關心集群中的資源是否充足即可。
Marathon是一個基于Mesos的輕量級調(diào)度框架,它隨著Mesos一起運行,并且在運行工作負載的同時提供了更高的可用性。它具有良好的擴展性,支持RESTful api來創(chuàng)建和管理應用服務器,自動為應用服務器做容錯遷移。Marathon還支持在同一組服務器上運行多種類型的分布式系統(tǒng)如Hadoop,Spark等,并提供失敗檢測、任務發(fā)布、任務跟蹤、任務監(jiān)控、資源管理與資源共享等功能。
3.1 總體結構
基于現(xiàn)有的INETIS集群的新一代客票系統(tǒng)總體結構如圖1所示。
圖1 新一代客票系統(tǒng)總體結構
Mesos與Marathon管理并提供統(tǒng)一的計算資源池;互聯(lián)網(wǎng)用戶請求發(fā)送給Haproxy,并通過haproxy-marathon-bridge實現(xiàn)服務發(fā)現(xiàn)與負載均衡;Mesos master cluster負責管理Docker集群;Docker registry為私人Docker庫,Docker通過Marathon api發(fā)布到新的計算節(jié)點上;Docker cluster負責所有的INETIS業(yè)務。
從圖1可以看出,Mesos是一個master/slave結構,其中Mesos master與Zookeeper,Marathon一起安裝在多臺物理機上。Mesos master使用Zookeeper進行服務選舉和發(fā)現(xiàn),來解決Mesos master的單點故障,Zookeeper將保證Mesos存在多個masters,且在masters中選取一個作為active的master,當其出現(xiàn)故障而無法工作時,能選取另一個備用的master讓Mesos的slave連接到新的master,讓Mesos cluster繼續(xù)提供服務。
Mesos slave的主要功能是向Mesos master匯報任務的狀態(tài)并為每個INETIS Docker實例提供計算資源。Mesos還配置了Docker registry的信息。Mesos slave具有恢復機制,即使一個Mesos slave死機了,用戶的任務還是能夠繼續(xù)運行,Mesos slave將一些關鍵點信息如任務信息,狀態(tài)更新持久化到本地磁盤上,重新啟動時可以從磁盤上恢復運行這些任務。
最下面一層為集群資源池,里面所有的物理機器均一樣,包括硬件和軟件,如CPU、內(nèi)存、網(wǎng)絡、存儲、操作系統(tǒng)等。每一個物理機器上跑著各個類型的INETIS Docker實例,通過不同的端口暴露給負載均衡。
3.2 彈性計算
Marathon負責所有INETIS Docker容器的生命周期,計算節(jié)點的就緒,退出,出錯都會觸發(fā)一個事件,通過監(jiān)聽這些事件并向中心控制器發(fā)送指令即可實現(xiàn)彈性計算,流程如圖2所示,當INETIS負載較高需要增加計算節(jié)點時,系統(tǒng)自動完成以下步驟:
圖2 彈性計算流程圖
(1)檢測負載,檢測負載的方法有多種:a.統(tǒng)計單位時間內(nèi)INETIS應用程序的日志量;b.獲取INETIS實時的連接數(shù)或者是等待隊列占用的大小,再將這部分數(shù)據(jù)實時更新到日志系統(tǒng)。通過收集到的數(shù)據(jù),可以很容易就得到INETIS負載的每秒請求數(shù)(QPS)、響應時間等指標,對比設置的閾值就可以判斷出是否要增加節(jié)點。
(2)設置閾值,同檢測負載的方法類似,可以從不同方面設置參考值。如果根據(jù)連接的緩沖隊列大小和每個請求的響應時間來設置閾值,則可設置閾值為隊列長度的30%或超時請求超過10%。如根據(jù)單位時間寫的日志量來設置閾值,則可設置單位時間日志增量閾值為50%。當檢測到負載較大時,控制中心會調(diào)用Marathon的RESTful API,請求其增加計算節(jié)點,Marathon會自動向Mesos請求資源,并根據(jù)應用程序的配置來創(chuàng)建Docker容器節(jié)點。
(3)更新負載均衡配置,當自動添加的節(jié)點就緒時,事件監(jiān)聽器就會收到就緒事件,控制器會通過自動化的部署方案,更新負載均衡的配置文件,通過調(diào)用RESTful API,在集群中自動重啟一個同樣的計算節(jié)點。
當高峰過后,INETIS應用服務器的CPU負載較低時,控制中心會調(diào)用Marathon的API請求減少節(jié)點,步驟如下:a.從負載均衡的配置文件去掉富余節(jié)點的地址與端口;b.調(diào)用Marathon的API回收節(jié)點。
一般情況下為了保證服務的穩(wěn)定性,都會設置一個最少的計算節(jié)點數(shù)目,防止因為負載或調(diào)試的原因,導致所有計算節(jié)點都被回收。
本文研究了Docker在客票系統(tǒng)中的應用,通過Docker來部署、管理、升級、維護INETIS集群,并結合Mesos與Marathon構建了基于Docker進行彈性計算的架構。經(jīng)測試,方案的實現(xiàn)可以極大地節(jié)省部署時間,有效利用計算資源。但同時發(fā)現(xiàn)Docker存在版本不穩(wěn)定、Bug較多等問題,在生產(chǎn)環(huán)境的推廣使用還存在較大的風險,建議在開發(fā)和測試環(huán)境中繼續(xù)進行研究試用。
[1]唐海東,武延軍. 分布式同步系統(tǒng)zookeeper的優(yōu)化[J]. 計算機工程,2014(4).
[2]劉冉冉. 基于任務分配的數(shù)據(jù)庫集群模型研究[D].武漢:華中科技大學,2007(4).
責任編輯 方 圓
Dynamic regulation technology of cluster node in Internet partition cluster
MIAO Fan, ZHU Jianjun, DAI Linlin
( Institute of Computing Technologies, China Academy of Railway Sciences, Beijing 100081, China )
During holidays, computing resources for INETIS were urgent in the rush hour of ticket sale, while during workdays, demands for computing resources were not very prominent. According to these current situations, the article put forward a solution of cluster elastic computing to make full use of resources, made an in-depth analysis for the implementation and feasibility of the solution.
cluster; load balance; auto scaling; container
U293.22∶TP39
A
1005-8451(2015)11-0014-03
2015-04-10
中國鐵路總公司科技研究計劃項目(2013X012-A-1,2013X012-A-2,2014X008-A)。
苗 凡,助理研究員;朱建軍,副研究員。