徐小龍,王純
(1 北京郵電大學網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
統(tǒng)一管理Tomcat和Nginx軟件棧*
徐小龍1,2,王純1,2
(1 北京郵電大學網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
互聯(lián)網(wǎng)科技迅猛發(fā)展,移動互聯(lián)網(wǎng)正在改變?nèi)藗兊纳?。Web應(yīng)用極大地豐富了互聯(lián)網(wǎng)世界,新形勢下,Web開發(fā)將面臨更加嚴峻的挑戰(zhàn):站點需求日益增加,市場需求變化加速,應(yīng)用提供商需將主要精力從Web環(huán)境部署與維護轉(zhuǎn)向如何實現(xiàn)應(yīng)用程序的真正需求。Web服務(wù)器軟件多種多樣,但是大部分企業(yè)和團隊都采用Tomcat、Nginx等開源Web服務(wù)器軟件。Tomcat+Nginx軟件棧被證明是一種穩(wěn)定、性能可靠的組合方式,本文提出統(tǒng)一管理方案,旨在提供專業(yè)的服務(wù)器部署、便捷的Web應(yīng)用程序管理解決方案。本文將論述主要功能點和設(shè)計思路。
Tomcat;Nginx;統(tǒng)一管理;服務(wù)器軟件棧
隨著社會經(jīng)濟和科技的發(fā)展,互聯(lián)網(wǎng)給人們的生活帶來了翻天覆地的變化。移動互聯(lián)網(wǎng)時代,對Web服務(wù)的需求迅猛增加。在眾多的Web開發(fā)語言中,Java依然是使用人數(shù)最多的一種撰寫跨平臺應(yīng)用服務(wù)的設(shè)計語言,可以作為Web服務(wù)器端開發(fā)的最佳實踐語言。Tomcat是Apache基金組織開發(fā)的開源Java Web應(yīng)用服務(wù)器,以其性能穩(wěn)定、結(jié)構(gòu)合理著稱,成為目前最為流行的Web應(yīng)用服務(wù)器之一,深受Java開發(fā)者的喜愛并得到部分軟件開發(fā)商的認可。但是隨著互聯(lián)網(wǎng)訪問量的激增,Tomcat服務(wù)器經(jīng)常會由于訪問流量大,出現(xiàn)運行不穩(wěn)定,甚至服務(wù)停止的現(xiàn)象,而Nginx可以以較少的資源代價穩(wěn)定、高效地處理高并發(fā)和高數(shù)據(jù)量的請求。Nginx作為Tomcat前端負載均衡器的組合方式,被許多企業(yè)和開發(fā)團隊所采用。對于個人學習或者簡單應(yīng)用開發(fā),單機環(huán)境部署即可滿足需求,而對于大型復(fù)雜的應(yīng)用,通常選用集群架構(gòu)來提供服務(wù),這種方式可以充分利用每個節(jié)點的能力,提供穩(wěn)定高效的Web服務(wù)。在單機環(huán)境中,需要快速便捷地構(gòu)建Web服務(wù)器軟件供開發(fā)人員集中精力實現(xiàn)業(yè)務(wù)開發(fā)。在集群系統(tǒng)中,如果沒有良好的架構(gòu),則會導(dǎo)致用戶數(shù)據(jù)訪問不準確,每臺服務(wù)器數(shù)據(jù)不一致,會形成臟數(shù)據(jù);其次,如果負載均衡策略較差,則會導(dǎo)致每臺服務(wù)器的負載差距較大,這樣就使某些服務(wù)器負載明顯大于其它服務(wù)器,形成訪問熱點,導(dǎo)致故障使整個服務(wù)器集群不穩(wěn)定。因此,集群系統(tǒng)中如何對節(jié)點進行配置、管理、監(jiān)控,在實際生產(chǎn)中顯得尤為重要。本文提出的統(tǒng)一管理設(shè)計方案嘗試對Web服務(wù)器部署提供單機環(huán)境和集群系統(tǒng)下的有效管理,以解決上述需求問題,具有實際的應(yīng)用意義。
1.1 需求分析
在Web2.0時代,互聯(lián)網(wǎng)呈現(xiàn)了有史以來最快速的發(fā)展,商業(yè)應(yīng)用層出不窮,業(yè)務(wù)邏輯不斷復(fù)雜,用戶體驗需求也不短提升,隨著個人PC的普及、移動終端的極大豐富和移動互聯(lián)網(wǎng)的發(fā)展,對Web應(yīng)用提供商提出了更快更高的要求。Nginx和Tomcat集成使用是目前Web開發(fā)常用的實際方案,但對于初學Web開發(fā)的人員,環(huán)境部署占去太多精力和時間,降低了學習效率;對于企業(yè)Web項目開發(fā),服務(wù)器部署和維護,需要在人力和技術(shù)深度上投入,而對大部分項目組來說,其主要目標和精力都放在業(yè)務(wù)網(wǎng)站開發(fā)上,在服務(wù)器維護方面投入難以支持,尤其是面對復(fù)雜的集群系統(tǒng)。同時,不論是單機環(huán)境還是集群系統(tǒng),對于Nginx、Tomcat開源軟件的構(gòu)建,不同公司、不同項目團隊在維護細節(jié),包括服務(wù)器版本、部署架構(gòu)、配置管理方式、維護手段等方面存在很大差異,其結(jié)果是,雖是同類同源的系統(tǒng),但是各自隔離,正確的維護手段和管理經(jīng)驗無法繼承和推廣;由于不正確的部署和配置,乃至服務(wù)器本身的異常造成的故障在不同項目實踐中重復(fù)出現(xiàn),隨著Web應(yīng)用開發(fā)的日益復(fù)雜,這種趨勢將可能惡化。此外,Tomcat等開源服務(wù)器,其總體上的系統(tǒng)監(jiān)控告警能力相對不足,不能滿足實際開發(fā)的需要。統(tǒng)一管理平臺基于上述現(xiàn)狀及問題,對于Tomcat和Nginx進行整合,在統(tǒng)一各基礎(chǔ)軟件版本的基礎(chǔ)上,提供統(tǒng)一的操作維護界面,增強的異常檢測處理和監(jiān)控告警能力,進一步提升服務(wù)器部署的便捷性以及Web應(yīng)用的穩(wěn)定性和可維護性。
1.2 技術(shù)背景
1.2.1 平臺開發(fā)語言——Ruby
Ruby是一種語法靈活且功能強大的面向?qū)ο竽_本語言,其文本處理功能十分強大,相對于其它編程語言,優(yōu)點主要體現(xiàn)在以下幾個方面:語法簡單靈活、具有普通的面向?qū)ο蠊δ?類、方法調(diào)用等)、具有特殊的面向?qū)ο蠊δ埽∕ix-in、特殊方法等)、可重載操作符、具有異常處理功能、調(diào)用帶塊方法(迭代器)和閉包、垃圾回收器、動態(tài)載入等。在統(tǒng)一管理平臺中,利用其豐富強大的功能管理服務(wù)器配置和生命周期管理;利用其分布式開發(fā)框架分布式Ruby(DRB,Distributed Ruby)實現(xiàn)集群管理;利用輕量、快速的微型Web框架Sinatra作服務(wù)器為用戶提供人性化的Web操作界面;利用其豐富的時間管理代碼庫位平臺集成定時功能,方便開發(fā)人員調(diào)用。
1.2.2 Redis保存集群服務(wù)器配置信息
對于統(tǒng)一管理平臺,配置信息多為半結(jié)構(gòu)、非結(jié)構(gòu)數(shù)據(jù),而且主要面向服務(wù)器的配置,因此需要輕量級的非關(guān)系型數(shù)據(jù)庫(NoSQL,Not Only SQL)提供服務(wù)即可。Redis是一款高性能的KEY-VALUE內(nèi)存數(shù)據(jù)庫,提供了一些豐富的數(shù)據(jù)結(jié)構(gòu),如字符串(String)、鏈表(Lists)、集合(Set)和有序集合(Zset)。這些數(shù)據(jù)類型都支持push/pop、add/remove、取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,Redis支持各種不同方式的排序。為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。其優(yōu)點表現(xiàn)為性能極高——能支持超過100 k/s的讀寫頻率;豐富的數(shù)據(jù)類型;原子性;豐富的特性。Redis優(yōu)越的性能為平臺中服務(wù)器和集群環(huán)境下各個節(jié)點的配置信息的存儲提供了保障,官方提供了很多語言的客戶端,其中基于Ruby語言的客戶端是一款非常穩(wěn)定和成熟的客戶端,使用方便靈活。
1.2.3 增強服務(wù)器監(jiān)控——JMX技術(shù)
Java管理擴展(JMX,Java Management Extensions)是一個為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架。JMX可以跨越一系列異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開發(fā)無縫集成的系統(tǒng)、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用,它提供了用戶界面指導(dǎo)、Java類和開發(fā)集成系統(tǒng)、網(wǎng)絡(luò)及網(wǎng)絡(luò)管理應(yīng)用的規(guī)范。
目前JMX管理體系結(jié)構(gòu)基本可以劃分為以下4個層次。
(1)設(shè)備層(Instrumentation Level):主要定義了信息模型。在JMX中,各種管理對象以管理構(gòu)件的形式存在,需要管理時,向MBean服務(wù)器進行注冊。該層還定義了通知機制以及一些輔助元數(shù)據(jù)類。
(2)代理層(Agent Level):主要定義了各種服務(wù)以及通信模型。該層的核心是一個MBean服務(wù)器,所有的管理構(gòu)件都需要向它注冊,才能被管理。注冊在MBean服務(wù)器上的管理構(gòu)件并不直接和遠程應(yīng)用程序進行通信,它們通過協(xié)議適配器和連接器進行通信。而協(xié)議適配器和連接器也以管理構(gòu)件的形式向MBean服務(wù)器注冊才能提供相應(yīng)的服務(wù)。
(3)分布服務(wù)層(Distributed Service Level):主要定義了能對代理層進行操作的管理接口和構(gòu)件,這樣管理者就可以操作代理。然而,當前的JMX規(guī)范并沒有給出這一層的具體規(guī)范。
(4)附加管理協(xié)議API:定義的API主要用來支持當前已經(jīng)存在的網(wǎng)絡(luò)管理協(xié)議,如SNMP、TMN、CIM/WBEM等。
Sun公司在Java5中引入JMX框架用于監(jiān)控JVM運行狀況。在統(tǒng)一管理平臺中,利用Jolokia來監(jiān)控Tomcat運行狀態(tài),實現(xiàn)系統(tǒng)的監(jiān)控告警。Jolokia是一個利用JSON通過HTTP實現(xiàn)JMX遠程管理的嶄新方法,具有快速、簡單的特點。
2.1 統(tǒng)一管理平臺的架構(gòu)圖
圖1 統(tǒng)一管理平臺架構(gòu)圖
平臺架構(gòu)圖如圖1所示。統(tǒng)一管理平臺主要包括管理模塊和Web服務(wù)器軟件棧,完整的管理平臺應(yīng)包含所有模塊,在集群系統(tǒng)中,部分模塊可能分處在不同節(jié)點,各個節(jié)點通過合理的配置可以靈活組成一個Web服務(wù)器集群,通過管理平臺,可以對各個節(jié)點進行配置管理,部署Web應(yīng)用。同時,提供統(tǒng)一的監(jiān)控運維接口,增強的異常檢測和異常處理能力,同時提供諸如定時任務(wù)、第三方進程監(jiān)控等相關(guān)能力。
其中,JVM是運行Tomcat的底層環(huán)境,Tomcat和Nginx共同組成了統(tǒng)一管理平臺的服務(wù)器軟件棧,部署管理模塊負責統(tǒng)一平臺的部署以及Web應(yīng)用的發(fā)布,生命周期管理模塊負責整個平臺以及各個Tomcat、Nginx運行實例的生命周期,配置管理則負責集群的配置信息以及服務(wù)器軟件棧各個服務(wù)器實例的配置信息,Web管理界面由Sinatra提供人性化的平臺操作入口,而Shell命令提供一套命令及管理整個系統(tǒng),部分功能和Web管理界面是相同的。
2.2 運行模型
統(tǒng)一管理平臺的運行模型如圖2所示。其中的Tomcat process和Nginx process在單機環(huán)境中,處于同一臺物理機;如果在集群系統(tǒng)中,雖然可以處于同一節(jié)點,但更多的情況是分布在不同的節(jié)點,而且各個Tomcat process也有可能處在不同的集群節(jié)點。
其中,主要概念介紹如下。
(1)Webjoind:為統(tǒng)一管理平臺核心管理進程,負責所有運行時管理事務(wù),包括異常檢測和處理、Webjoin定時任務(wù)調(diào)度器以及Webjoin命令接入等。
圖2 統(tǒng)一管理平臺運行模型圖
(2)Webjoind-daemon:Webjoind的守護進程,負責監(jiān)控Webjoind進程的運行狀態(tài),當Webjoind異常退出時,負責重啟Webjoind;當Webjoind占用系統(tǒng)資源過多時,回收其占有資源,調(diào)整至合理的范圍。
(3)Wrapperd:Tomcat process的父進程,與Tomcat進程一一對應(yīng),主要負責收集Tomcat的gc日志,同時處理Tomcat的標準輸出(Stdout和Stderr),Tomcat退出時,會自動退出。
(4)Webjoin entry:統(tǒng)一管理平臺的入口,通過這個入口管理整個系統(tǒng)。其中大部分命令和狀態(tài)查看通過Webjoind完成。提供Shell命令和Web界面兩種進入方式,Shell命令快速簡潔,Web界面管理方便,交互友好。
(5)Tomcat process和Nginx process:增強原生Tomcat和Nginx進程的運維監(jiān)控功能。并保持其兼容性,使任何基于Tomcat的Web應(yīng)用,都無需修改即可在統(tǒng)一管理平臺中運行。進程數(shù)量取決于配置和資源限制,自身并無限制。
2.3 單機版結(jié)構(gòu)圖
對于單機版的統(tǒng)一管理平臺,其結(jié)構(gòu)如圖3所示。平臺管理模塊是圖1中各個模塊的功能整合。Webjoin core模塊中的生命周期管理模塊負責管理各自目標的生命周期,Web應(yīng)用部署模塊負責Web應(yīng)用程序的部署。統(tǒng)一管理平臺允許在一套系統(tǒng)中啟動多個Tomcat和Nginx實例。同時,支持一個Tomcat加載多個Web應(yīng)用,也支持多個Tomcat加載同一個Web應(yīng)用。其中Tomcat是Java Web應(yīng)用的容器,Nginx承擔反向負載均衡和靜態(tài)頁面處理。
2.4 集群系統(tǒng)結(jié)構(gòu)圖
在集群環(huán)境下,其結(jié)構(gòu)如圖4所示。集群是一種分布式處理系統(tǒng),服務(wù)器集群就是指將很多的服務(wù)器集中起來進行同一種服務(wù),但是對客戶端用戶是隱藏的,在客戶端看起來就像是一臺服務(wù)器提供服務(wù)。多臺物理主機上的Webjoin軟件??梢造`活組成一個Web服務(wù)器集群,這些節(jié)點是通過DRB分布式框架進行組織和管理的。
圖3 單機版結(jié)構(gòu)圖
圖4 集群系統(tǒng)結(jié)構(gòu)圖
在集群系統(tǒng)中,采用比較流行的master-slave模式進行集群架構(gòu)的組織。各個節(jié)點承擔了統(tǒng)一管理平臺部分功能,可以是Nginx服務(wù)器運行實例,也可是Tomcat服務(wù)器實例或者管理模塊等。其中,在集群master節(jié)點,維護著各個slave節(jié)點的配置信息,彼此之間通過DRB分布式框架進行通信:slave節(jié)點開啟DRB server,在master節(jié)點運行對應(yīng)DRB client來控制slave節(jié)點,此外,slave節(jié)點的數(shù)目不做限制。
統(tǒng)一管理平臺解決了Tomcat和Nginx服務(wù)器快速部署問題,支持集群管理,提供人性化的Web管理界面供開發(fā)人員操作,為初學Web應(yīng)用的人員提供了便捷的部署實現(xiàn),也為Tomcat等服務(wù)器軟件管理、維護經(jīng)驗的繼承與推廣提供了可能。在實際項目中,能夠快速部署服務(wù)器和Web應(yīng)用,并且提供系統(tǒng)級別的Tomcat等服務(wù)器的告警監(jiān)控、有效管理功能,具有非常高的實用價值,得到了業(yè)界的認可和好評。
[1] antirez, Redis[OL].[2014-6-5]. http://redis.io/.
[2] 曾超宇,李金香. Redis在高速緩存系統(tǒng)中的應(yīng)用[J]. 微型機與應(yīng)用,2013,32(12).
[3] 趙京華. 應(yīng)用服務(wù)器集群管理系統(tǒng)的設(shè)計與實現(xiàn)[D]. 北京:北京郵電大學,2007.
[4] 馮勝鵬. Web方式集群管理系統(tǒng)的研究與實現(xiàn)[D]. 西安:西北工業(yè)大學,2006.
[5] Jason Brittain, Ian F. Darwin. Tomcat權(quán)威指南[M].第2版. 北京:中國電力出版社,2009.
[6] Paolo Perrotta. Metaprogramming Ruby[M]. 廖志剛,陳睿杰. 武漢:華中科技大學出版社,2012.
[7] 吳家祺. WEB服務(wù)器集群系統(tǒng)的設(shè)計與實現(xiàn)[D]. 南京: 南京航空航天大學,2005.
[8] 晏雪松,基于JMX的監(jiān)控系統(tǒng)研究與實現(xiàn)[D]. 成都:西南交通大學,2007.
[9] Nginx中文. Nginx功能概述[EB/OL]. [2013-12-11]. http:// www.nginx.cn/doc/general/overview.html.
Unified management of Tomcat and Nginx software stack
XU Xiao-long1,2, WANG Chun1,2
(1 Beijing University of Posts and Telecommunications Networking and Switching Technology, State Key Laboratory, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
The internet technologies are developing rapidly. The mobile internet is changing people's life profoundly, and Web applications greatly enrich the internet world. Under new circumstances, Web applications development is faced with more severe challenges: sites demand increases, market demand changes faster. Application providers need to alter their focus from Web environment deployment and maintenance to how to genuinely meet the need of application programs. There are a variety of Web server softwares, but most enterprises and teams use open source server softwares such as Tomcat and Nginx. Tomcat&Nginx server software stack proves to be a stable and reliable combination. This paper proposed a unif ed management solution, aiming at providing a solution of professional servers deployment and convenient Web application programs management. This paper will discuss the main funcions and design ideas.
Tomcat; Nginx; unif ed management; server software stack
TN929.5
A
1008-5599(2014)08-0086-05
2014-07-07
國家973計劃項目(編號:2013CB329102);國家自然科學基金資助項目(No. 61372120, 61271019, 61101119, 61121001);長江學者和創(chuàng)新團隊發(fā)展計劃資助(編號:IRT1049);教育部科學技術(shù)研究重點(重大)項目資助(編號:MCM20130310);北京高等學校青年英才計劃項目(編號:YETP0473)。