基于操作系統虛擬化的Web請求負載均衡方法
【技術領域】
[0001] 本發明屬于Web集群負載均衡技術領域,具體設及到一種基于操作系統虛擬化的 Web請求負載均衡方法。
【背景技術】
[0002] 隨著社交網絡、電子商務等互聯網應用的迅猛發展,網絡服務器面臨著W下兩方 面的問題;(1)訪問數量成指數倍增加;似事務處理更加復雜。為了應對W上問題,為用戶 提供一個高性能的網絡服務環境,分布式的Web服務器系統(Web集群)應運而生,并用W 代替具有高性能的單臺Web服務器。在Web集群中,每類服務包含多個服務實例副本,同一 服務的多個服務實例副本由多個不同的服務器承載。為了將用戶請求合理地、均衡地分配 到不同的服務實例副本,確保各服務器及服務實例副本間的負載平衡,提高Web集群系統 的并發能力和系統資源的利用率,高效的負載均衡策略是問題的關鍵所在。
[0003] 傳統Web集群是W物理機或虛擬機為單位承載服務實例副本,并根據負載均衡策 略將用戶請求合理地分發給承載不同服務實例副本的物理機或虛擬機。然而,隨著云計算 技術的發展,基于操作系統虛擬化的Docker容器作為一種新的承載服務實例的基本單位 出現了。由于Docker使用了基于操作系統的虛擬化技術,因此,與傳統的基于完全虛擬化 的虛擬機相比,Docker能夠實現運行時系統的資源彈性分配功能(即當Docker容器中無 任務執行時,Docker容器不占用CPU資源;有任務執行時Docker容器按照其CPU權重大小 占用所需的CPU資源),提高服務器資源的利用率。Docker的該一新特性,使得傳統Web集 群上的負載均衡策略不再適用,因此,需要構建一種合理的、均衡的基于操作系統虛擬化的 Web請求負載均衡方法。
【發明內容】
[0004] 本發明針對現有技術的不足,提供了一種基于操作系統虛擬化的Web請求負載均 衡方法。
[0005] 本發明方法的具體步驟是:
[0006] 步驟(1)建立服務器資源狀態信息列表。Web集群中服務器集合S表示為:
[0007] S= {s。S2, ,Sj, . . . ,sj
[000引其中Sj.(l《j《n)表示Web集群中的某一服務器,n表示Web集群包含的服務器 總數。服務器Sj.總的資源Pj.表示為:
[0009] Pj-巧j_cpu,Pj_memory,Pj_i。,Pj_network)
[0010] 其中P^epu表示服務器Sj的CPU的計算能力,Pj.m。。。。表示服務器Sj.的內存處理能 力,PU。表示服務器Sj的硬盤I/O能力,P 表示服務器Sj的網絡吞吐率。為了消除服 務器異構性及不同種類資源的差異性所帶來的影響,采用Max-Min方法對服務器Sj.總的資 源P/直進行歸一化,服務器Sj.總的資源歸一化值P0j.表示為:
[0011]POj=(P0JCPU,P〇J_mem。。,P〇J_i。,POj-network)
[0012] 步驟(2)建立服務實例資源狀態信息列表。設Web集群對外提供的服務集合F表 示為:
[0013] F=
[0014] 其中fi(l《i《m)表示集群對外提供的第i種服務,m表示集群提供的服務種類 總數。服務包含多個不同的服務實例副本集合Fi表示為:
[00巧]…,f化,…,
[0016] 其中fik(l《k《1)表示服務的實例副本,1表示服務fi的實例副本個數。服 務實例fik的資源狀態f目息STik表不為:
[0017]
[001引其中鳥表示服務fi的實例副本fik所在的主機Sj,cpu_shareik表示服務fi的實 例副本fik的CPU權值,服務的實例副本fik的最大可占用內存。
[0019] 步驟(3)每隔周期時間T,負載均衡服務器會定期收集Web集群中所有服務器在該 周期時間T內的負載信息。主要負載信息包括:
[0020] 服務器Sj的CPU利用率;
[0021] CP& =CPU繁忙時間/^(CPU繁忙時間+CPU空閑時間)
[0022] 服務器sj的硬盤I/O負載:
[0023] lOj=硬盤10繁忙時間/(硬盤10繁忙時間+硬盤10空閑時間)
[0024] 服務器sj的網絡負載:
[0025] Network尸(周期T內流入流量+周期T內輸出流量)/ (周期T沖LnetwJ
[0026] 服務器Sj.上所有實例副本CPU權值數之和:
[0027]
[002引服務器Sj.上服務fi的實例副本fik內存利用率:
[0029]
[0030] 其中memory心se康示服務fi的實例副本f化已使用的內存值;
[0031] 步驟(4)負載均衡服務器根據收集的服務器負載信息W及現存服務器與服務實 例狀態信息,計算部署在服務器Sj.上的服務實例fik的最終權值Wet如f,;;,并更新權值列表 中相應服務實例的權值信息。
[0032]
[0033] 其中aik、0ik、丫ik、5ik分別表示服務fi對CPU、內存、硬盤W及網絡四類資源所 賦予的不同權值,且同一服務不同服務實例對該四類資源所賦予的權值相同。負載均衡服 務器根據每個服務實例的權值大小采用業界廣泛使用的加權輪詢算法分發相應服務的Web 請求。
[0034] 本發明所提供基于操作系統虛擬化的Web請求負載均衡方法由一組功能模塊組 成,它們包括;靜態信息收集模塊、動態信息收集模塊、權值計算模塊和負載分發模塊。
[0035] 靜態信息收集模塊在負載均衡方法初始化時收集服務器與服務實例的靜態信息。 服務器的靜態信息主要包括;Web集群中每臺服務器總的CPU計算能力Pj.。。。、內存處理能力 Pjjiemory、硬盤I/O能力Py。、網絡吞吐能力Pj_net?rk。服務實例的靜態信息主要包括;服務fi 的服務實例fik所在主機與.,服務的服務實例fik的CPU權值cpu_share化,服務的服 務實例fik的最大可占用內存memoryikjMd。當Web集群中服務器或服務動態變更時,在靜 態信息模板中需要更新相應服務器或服務的靜態信息。
[0036] 動態信息收集模塊主要收集服務器及服務實例動態變化的狀態信息。每隔周期 時間T,動態信息收集模塊會收集服務器及服務實例動態變化的狀態信息。為了防止信息 收集過于頻繁而造成網絡負擔,周期時間T的取值依據統計經驗設定為5-10秒。此外,當 服務實例新增或刪除時,動態信息收集模塊也會執行收集動作。收集的狀態信息主要包括 該周期時間T內服務器Sj. (1《j《n)的CPU利用率CPUj.、硬盤的I/O負載lOj.、網絡負載 Networkj、服務器sj上所有服務實例副本的CPU權值之和完JWC風y/w巧[、服務器sj上服務fi的實例副本fik的內存利用率Mewo巧壬。
[0037] 權值計算模塊根據所收集的服務器及服務實例的信息計算出每個服務實例的最 終權值。
[003引負載分發模塊根據權值計算模塊所得的服務實例權值,采用加權輪詢調度算法, 將較多的Web請求分發給權值較大的服務實例,較少的服務請求分發給權值較小的服務實 例,達到同一服務不同服務實例間的負載均衡。
[0039] 本發明提出的方法利用基于操作系統虛擬化的Docker容器能夠實現運行時系統 資源彈性分配的特點,即根據服務實例CPU權值大小將計算資源按比例分配給承載相應服 務實例的Docker容器,實現不同服務實例副本及服務器