繆偉寧,羅予東,劉錫鋒,張功,陳偉君
(嘉應學院計算機學院,梅州 514015)
一種帶緩沖層的Web服務集群架構(gòu)分層解決方案
繆偉寧,羅予東,劉錫鋒,張功,陳偉君
(嘉應學院計算機學院,梅州514015)
針對能夠應對大流量、高并發(fā)的Web服務需求進行深入的研究,提出一個Web服務集群架構(gòu)分層解決方案。該集群架構(gòu)分層解決方案按功能分層以細化架構(gòu),并且在不同功能層間引入實現(xiàn)緩存、負載均衡和隊列機制的緩沖層解決性能瓶頸以進一步提高集群性能和可用性。該集群架構(gòu)分層解決方案還提供一套基于C/S架構(gòu)的數(shù)據(jù)同步更新策略用以解決集群節(jié)點服務器軟件的統(tǒng)一配置問題。該集群架構(gòu)分層解決方案具有負載均衡、高性能、高可用性的特點。
負載均衡;集群;高可用性;Web服務器
得益于網(wǎng)絡(luò)技術(shù)的發(fā)展和成熟,互聯(lián)網(wǎng)的規(guī)模不斷地增大,就我國而言,中國互聯(lián)網(wǎng)絡(luò)信息中心的《第37次互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告》指出,截止至2015年12月,在我國互聯(lián)網(wǎng)中運行的網(wǎng)站數(shù)量為423萬個,較2014年12月前增長26.3%[1]。
面對巨大的網(wǎng)站基數(shù)和增長率,為網(wǎng)站提供運行環(huán)境、數(shù)據(jù)庫服務的互聯(lián)網(wǎng)數(shù)據(jù)服務提供商的壓力陡增,其依賴一味地升級硬件、增加服務器數(shù)量這種簡單粗暴的傳統(tǒng)服務器組織方式顯然已經(jīng)無法滿足不斷上升的性能和穩(wěn)定性需求。如何在大流量、高并發(fā)的情況下保證服務的正常提供、充分發(fā)揮服務器性能成了互聯(lián)網(wǎng)服務提供商的當務之急;除此之外,在全球IPv4地址枯竭[2]的大背景下,如何充分利用有限的IPv4地址資源滿足用戶大量的IPv4地址需求也是對互聯(lián)網(wǎng)數(shù)據(jù)服務提供商的挑戰(zhàn)之一。
本文在對大流量、高并發(fā)的Web服務需求進行了深入研究后,提出了一個在Linux平臺下帶有負載均衡機制的具有高穩(wěn)定性、高可用性、高可擴展性的Web服務高性能服務集群架構(gòu)設(shè)計方案,以期為上述問題提供一個可行的解決方案。
以安裝了Apache、PHP、MySQL等軟件的能提供完整Web服務的單臺服務器為例,在不考慮其中運行的網(wǎng)站代碼是否對大流量、高并發(fā)的情況做了優(yōu)化手段的前題下,由于網(wǎng)站應用程序和數(shù)據(jù)庫大多部署在同一臺服務器上,當大量用戶請求頁面時,將直接導致頻繁的I/O操作和對數(shù)據(jù)庫的讀寫,必然使服務器CPU過載,引起腳本執(zhí)行超時,出現(xiàn)服務器向訪問站點的用戶返回50x錯誤。而單純地提升該服務器的處理速度、加大內(nèi)存或滿足合理的服務請求,當訪問量進一步加大時,服務器還是無法提供正常的服務。
文獻[3]引入集群機制來解決這個問題。其所設(shè)計的LVS集群系統(tǒng)體系結(jié)構(gòu),采用負載均衡機制將大量的服務請求按一定的策略分散到多個真實服務器上處理,待處理完畢后再將處理結(jié)果交由主調(diào)度器返回給用戶。此集群架構(gòu)固然能承受更大流量、更高并發(fā)的Web服務請求,但此集群架構(gòu)仍然存在以下缺陷:
(1)存在單一失效點和性能浪費。當服務請求量大于調(diào)度器處理能力,調(diào)度器的網(wǎng)絡(luò)使用率卻相對地處于較低的水平時,后續(xù)的服務請求將不斷地涌入調(diào)度器,造成調(diào)度器CPU處理過載無法響應正常的服務請求,形成單一失效點,而后端的真實服務器卻處于空閑狀態(tài),造成極大的性能浪費;
(2)節(jié)點的功能并不夠細分,架構(gòu)沒有將腳本處理與數(shù)據(jù)庫操作分離開來,真實服務器的功能繁雜仍不夠?qū)R?,不便于轉(zhuǎn)化為分布式系統(tǒng)進一步提高集群的性能;
(3)未對真實服務器間的應用數(shù)據(jù)共享提供一個解決方案,例如當同一用戶的多個請求被分散到多個真實的腳本處理服務器上時該如何進行session的共享。
綜上,要滿足大流量、高并發(fā)的Web服務需求的集群應具有以下特點:
(1)架構(gòu)的唯一入口點在采用負載均衡機制的同時,應解決唯一入口點無法處理過多請求的問題;
(2)架構(gòu)應按功能進行分層細化,使單一節(jié)點的功能更加專一以充分挖掘計算性能;
(3)架構(gòu)應當有效地解決真實服務器之間的應用數(shù)據(jù)共享問題。
根據(jù)對大流量、高并發(fā)的Web服務需求的研究中所得出的集群應有的特點,項目組提出了如圖1所示的集群架構(gòu)分層解決方案。該集群架構(gòu)分層解決方案將常規(guī)的Web服務按功能抽象分層為前端調(diào)度層、后端服務層、腳本處理層、數(shù)據(jù)服務層。并且,在以上各個功能層之間插入相應的緩沖層。
在此分層體系中,軟件開發(fā)人員不必關(guān)心該分層體系的具體結(jié)構(gòu),也不必關(guān)心某一層的具體實現(xiàn)方式,該體系的各層對軟件開發(fā)人員來說是透明的,整個體系對外表現(xiàn)為一臺獨立的安裝了各種軟件的服務器?;ヂ?lián)網(wǎng)數(shù)據(jù)服務提供商按照該分層體系組織服務器,可以根據(jù)每層的性能需求適當?shù)脑鰷p服務器數(shù)量甚至將某一功能層采用分布式系統(tǒng)實現(xiàn),而不必擔心造成對其他功能層的干擾。
圖1 集群架構(gòu)分層解決方案
以下是對各層的功能的具體介紹。
2.1前端調(diào)度層
前端調(diào)度層作為整個集群架構(gòu)分層解決方案的唯一入口點,除了實現(xiàn)支持各種負載均衡算法的負載均衡機制外,還增加了以下兩項優(yōu)化的機制消除性能瓶頸進一步提升集群性能:
(1)隊列機制。當有超過前端調(diào)度層處理能力的請求量時,前端調(diào)度層將啟用隊列機制將超出的請求放入隊列中,避免超出的請求量沖垮整個前端處理層導致整個集群失效,解決了文獻[3]所設(shè)計的LVS集群系統(tǒng)體系結(jié)構(gòu)中調(diào)度器過載無法響應正常的服務請求,而后端的真實服務器卻處于空閑狀態(tài)的問題;
(2)域名-應用解析機制。此機制為引言中提到的如何充分利用有限的IPv4地址資源滿足用戶大量的IPv4地址需求提供了一個可行的解決方案。在本分層體系中,只需使用一個公網(wǎng)地址作為前端調(diào)度層的地址并讓一個一級域名指向該地址,然后為用戶的每個應用分配一個唯一的多級域名,就可以在前端調(diào)度層中建立一個多級域名與應用的對應關(guān)系。當請求到達前端調(diào)度層時,前端調(diào)度層會檢查該請求的HTTP頭,按其域名告知后端服務層應返回哪個應用中的數(shù)據(jù)(如圖2)。并且,該機制還對部署在該分層體系中的應用起到了一定的保護作用,當部署在該分層體系中的某個應用遭受到DoS攻擊或DDoS攻擊[4]時,前端調(diào)度層只需要丟棄特定域名的請求即可隔離該應用,避免對其他應用的正常運行造成影響,即可起到一定的保護作用。
圖2 域名-應用解析機制
除此之外,前端調(diào)度層將集群內(nèi)網(wǎng)和公網(wǎng)隔離開來,運營維護人員可在前端調(diào)度層進行各種安全防護操作,提高整個集群架構(gòu)的安全性,例如運營維護人員可構(gòu)建堡壘主機,作為進入內(nèi)部網(wǎng)的一個檢查點,以達到把整個網(wǎng)絡(luò)的安全問題集中在某個主機上解決,從而省時省力,不用考慮其他主機安全的目的[5]。
2.2緩沖層
在本架構(gòu)分層體系中,前端調(diào)度層和后端服務層之間插入了一個后端服務緩沖層,后端服務層和腳本處理層之間插入了一個腳本處理緩沖層,腳本處理層和數(shù)據(jù)服務層之間插入了一個數(shù)據(jù)服務緩沖層。這些緩沖層的作用有以下四點:
(1)屏蔽下層實體實現(xiàn)細節(jié)和組織結(jié)構(gòu)。緩沖層類似于OSI/RM的分層體系結(jié)構(gòu)中服務訪問點(Service Access Point)的概念[6],任一上層實體通過緩沖層來獲取其下層實體提供的服務,緩沖層為上層實體提供下層實體的單一訪問入口,;
(2)實現(xiàn)帶隊列的負載均衡機制。緩沖層將上層的服務請求按合理有效的負載均衡策略分散到下層的各個服務節(jié)點中,超出緩沖層承受量的請求將進入過載隊列中,以保證服務的穩(wěn)定性;
(3)提供緩存機制。緩沖層可實現(xiàn)LNC算法[7]將頻繁操作的數(shù)據(jù)緩存起來,一方面減輕下層的處理壓力,另一方面加快上層獲取數(shù)據(jù)的速度。
(4)高效解決真實服務器之間的應用數(shù)據(jù)共享問題。例如為了解決腳本處理層中多個真實的腳本處理服務器如何共享Session的問題,常用的辦法是文獻[8]采用的按域共享方案,但這種方案存在一定的跨域安全問題和設(shè)置繁雜問題。在本分層體系中,所有的Session由腳本處理緩沖層中的Session產(chǎn)生器生成并存儲在腳本處理緩沖層中的Redis或Memcached等內(nèi)存數(shù)據(jù)庫服務器[9]中,腳本處理服務器不必關(guān)注Session的生成和存儲,只需從腳本處理緩沖層獲取相應的Session即可實現(xiàn)Session的共享和其高速存取。
2.3后端服務層與腳本處理層
在后端服務層中,互聯(lián)網(wǎng)數(shù)據(jù)服務提供商可以部署不同的Web服務器軟件,例如目前流行的Apache、IIS、Nginx等;在腳本服務層中,也可以部署不同的腳本服務器軟件,例如PHP、ASP、Java、Python等。此舉有力地解決了文獻指出的現(xiàn)有的PaaS(Platform-as-a-Service,平臺即服務)平臺中存在的應用托管環(huán)境單一化、僅能提供特定編程語言或腳本語言的應用環(huán)境所導致的應用兼容性低,需要引入應用遷移成本[10]的問題。
2.4數(shù)據(jù)服務層
數(shù)據(jù)服務層主要由數(shù)據(jù)庫服務和文件服務組成:
(1)數(shù)據(jù)庫服務與后端服務層和腳本處理層相似地,在數(shù)據(jù)服務層中也可部署不同的數(shù)據(jù)庫軟件,如MySQL、MS SQL、Oracle DB等以增加了業(yè)務的多樣性。并且,為了應對大流量、高并發(fā)的業(yè)務壓力,就數(shù)據(jù)庫服務而言,可通過配置數(shù)據(jù)庫服務器的負載均衡與數(shù)據(jù)庫讀寫分離策略以提高整個數(shù)據(jù)庫服務的速度和質(zhì)量。
(2)文件服務用于存儲應用數(shù)據(jù)并實現(xiàn)了FTP服務。互聯(lián)網(wǎng)數(shù)據(jù)服務提供商可在FTP服務器上為每個用戶創(chuàng)建一個限定大小的FTP目錄,該目錄作為該用戶的應用數(shù)據(jù)目錄,當腳本處理服務器接收到綁定了特定域名的應用服務請求時即從相應的應用數(shù)據(jù)目錄獲取所需數(shù)據(jù)。通過此方式,用戶可方便地對自己的應用數(shù)據(jù)進行管理,并且互聯(lián)網(wǎng)數(shù)據(jù)服務提供商可將為用戶定時備份的數(shù)據(jù)庫數(shù)據(jù)和應用數(shù)據(jù)放置在用戶對應的FTP目錄中,方便用戶下載及管理。
項目組以目前比較熱門的動態(tài)網(wǎng)站架構(gòu)搭建方案LAMP(即Linux+Apache+PHP/Python+MySQL/MariaDB)為例,根據(jù)集群架構(gòu)分層解決方案搭建了如圖3所示的LAMP簡要實現(xiàn)。
在此簡要實現(xiàn)中,使用了在高并發(fā)下表現(xiàn)良好的Nginx[11]通過架設(shè)反向代理服務器配合負載均衡策略配置及緩存策略實現(xiàn)了前端調(diào)度層和后端服務緩沖層,采用三臺Apache服務器作為作為后端服務層,三臺PHP服務器作為腳本處理層,并在數(shù)據(jù)服務層實現(xiàn)了MySQL數(shù)據(jù)庫的讀寫分離。
值得一提的是,Nginx提供了基于輪詢、ip_hash、fair、url_hash等負載均衡策略的第七層負載均衡功能[12]。當服務請求到達前端調(diào)度層后,將由Nginx根據(jù)指定負載均衡策略將服務請求反向代理到后端服務層,待后端服務層與腳本處理緩沖層合作處理后,返回處理結(jié)果交由Nginx反向代理服務器返回給用戶,整個分層體系的架構(gòu)對服務請求者是不可見的。
同時,為了防止Nginx服務器宕機造成單一失效,采用心跳線將主Nginx服務器和備用Nginx服務器連接起來,當主Nginx服務器無法提供服務時,備用Nginx服務器將代替主Nginx服務器接管前端調(diào)度層和后端服務緩沖層,保證整個集群的正常運行。
圖3 集群架構(gòu)分層解決方案的簡要實現(xiàn)
當實現(xiàn)了架構(gòu)分層體系的集群的規(guī)模變大,集群中的服務器數(shù)量增多,如何快速批量進行服務器軟件初始化配置及更新服務器配置成了不可忽視的問題。純粹得靠人工配置每一臺服務器顯然不是合理且高效的解決方法。為此,本集群架構(gòu)分層解決方案設(shè)計了一套基于C/S的數(shù)據(jù)同步更新策略為該問題提供一個簡單可行的解決方案。
首先,需要在集群中部署一臺服務器作為配置中心,并且在集群中的其他服務器上安裝一個用以接受并執(zhí)行配置中心發(fā)來的執(zhí)行腳本的客戶端軟件,該客戶端軟件還有定時向配置中心報告服務器狀態(tài)的功能及獲取配置更新功能。
其次,當安裝了客戶端軟件服務器首次接入集群網(wǎng)絡(luò)中時,客戶端軟件即向配置中心請求配置執(zhí)行腳本及其他有關(guān)的數(shù)據(jù)。配置中心在收到客戶端軟件的首次請求時,會將該服務器信息保存到集群信息數(shù)據(jù)庫中,并且向客戶端軟件返回配置執(zhí)行腳本及其他有關(guān)的數(shù)據(jù)。客戶端軟件在接收到配置中心發(fā)來的配置腳本及其他有關(guān)數(shù)據(jù)后,即執(zhí)行配置腳本開始配置所在服務器,待客戶端軟件執(zhí)行完配置腳本并保存好相關(guān)數(shù)據(jù)后,即向配置中心報告已經(jīng)配置完畢。
最后,服務器的配置更新有兩種方式,一種是客戶端軟件定時向配置中心詢問是否有配置更新腳本;另一種是配置中心根據(jù)管理員操作主動向在集群信息數(shù)據(jù)庫中記錄的服務器客戶端發(fā)送更新通知,讓客戶端軟件立即發(fā)起更新操作。
如此一來,集群運維人員便能方便快捷地對集群中的服務器進行快速自動化的配置。
本文提出的集群架構(gòu)分層解決方案,采取按功能抽象分層、引入緩沖層等手段來構(gòu)建一個針對大流量、高并發(fā)的Web服務集群,提供可以了實用性強且具有一定安全性的高性能架構(gòu)設(shè)計方案。該集群架構(gòu)設(shè)計方案不單單適用于互聯(lián)網(wǎng)數(shù)據(jù)服務提供商的服務器集群組織,也適用于任何具有大并發(fā)、高流量的大型網(wǎng)站服務器架構(gòu)搭建。
此外,根據(jù)此集群架構(gòu)設(shè)計方案進行了一個集群的簡要實現(xiàn),并對其進行了各項性能指標試驗測試,目前已完成整個集群的正常運行,集群的分層體系架構(gòu)對服務請求者是不可見的,集群的性能指標還需在不同的壓力下進行進一步測試,下一步項目組將根據(jù)測試結(jié)果對該集群架構(gòu)分層解決方案設(shè)計方案做更加細致的調(diào)整和修正,并且為數(shù)據(jù)同步更新策略提供相應的安全機制。
[1]中國互聯(lián)網(wǎng)絡(luò)信息中心.第37次中國互聯(lián)網(wǎng)絡(luò)發(fā)展狀況統(tǒng)計報告[EB/OL].http://www.cnnic.net.cn/hlwfzyj/hlwxzbg/201601/ P020160122469130059846.pdf,2016-01.
[2]黃潔梅.IPv4地址枯竭問題的分析與校園網(wǎng)IPv6系統(tǒng)構(gòu)建的研究[D].廣州:華南理工大學,2012.
[3]程洪,錢樂秋,洪圓.基于Linux集群的Web服務的研究和構(gòu)建[J].計算機工程與應用,2004,34:160.
[4]徐恪,徐明偉,吳建平.分布式拒絕服務攻擊研究綜述[J].小型微型計算機系統(tǒng),2004,25(3):338.
[5]趙瑞霞,王會平.構(gòu)建堡壘主機抵御網(wǎng)絡(luò)攻擊[J].網(wǎng)絡(luò)安全技術(shù)與應用,2010,8:26.
[6]雷震甲.網(wǎng)絡(luò)工程師教程.第4版.北京:清華大學出版社,2014:12-13.
[7]林永旺,張大江,錢華林.Web緩存的一種新的替換算法[J].軟件學報,2001,12(11):1711-1713.
[8]楊美珍.基于PHP的多服務器共享Session的方法[J].信息通信,2013,6:108-109.
[9]楊武軍,張繼榮,屈軍鎖.內(nèi)存數(shù)據(jù)庫技術(shù)綜述.西安郵電學院學報,2005,10(3):96-97.
[10]徐鵬,陳思,蘇森.互聯(lián)網(wǎng)應用PaaS平臺體系結(jié)構(gòu)[J].北京郵電大學學報,2012,35(1):121.
[11]凌質(zhì)億,劉哲星,曹蕾.高并發(fā)環(huán)境下Apache與Nginx的I/O性能比較[J].計算機系統(tǒng)應用,2013,06:207-208.
[12]黎哲,郭成城,陳亮.一個基于TCP遷移機制的第七層負載均衡系統(tǒng).計算機應用研究,2005,4:116.
A Layered Architecture of Web Service Cluster with Buffer Layer
MIAO Wei-ning,LUO Yu-dong,LUI Xi-feng,ZHANG Gong,CHEN Wei-jun
(College of Computer,Jiaying University,Meizhou 514015)
Proposes a layered architecture of web service cluster architecture to deal with the large flow,high concurrent service request.This architecture layered structure by function,and introduced buffer layer which has implemented caching,load balancing,and queue mechanism between different functional layer for solving the performance bottleneck and improving the performance and availability of the cluster further.Also provides a data synchronization and update strategy based on C/S architecture in order to solve the unified configuration of server software.This architecture has the characteristics of load balancing,high performance and high availability.
Load Balancing;Cluster;High Availability;Web Server
國家自然科學基金資助項目(No.41172028)、廣東省大學生科技創(chuàng)新培育基金專項資金項目(No.pajh2016a0460)、2014年國家級教育基地項目(No.414B0110)
1007-1423(2016)26-0018-05DOI:10.3969/j.issn.1007-1423.2016.26.004
繆偉寧(1995-),男,廣東五華人,本科,研究方向為下一代互聯(lián)網(wǎng)
羅予東(1969-),男,廣東梅州人,高級實驗師,碩士,研究方向為網(wǎng)絡(luò)工程、信息安全
劉錫鋒(1996-),男,廣東云浮人,本科,研究方向為軟件工程
張功(1995-),男,安徽阜陽人,本科生,,研究方向為軟件工程
陳偉君(1958-),男,廣東興寧人,高級實驗師,碩士,研究方向為網(wǎng)絡(luò)工程
2016-07-22
2016-09-10