• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于nginx、tomcat、redis的高性能Java Web開源架構(gòu)

      2014-04-29 00:00:00陳玲
      計算機光盤軟件與應用 2014年22期

      摘 要:Java Web最常用的服務器是Tomcat,但是Tomcat處理靜態(tài)資源能力有著缺陷,本文介紹了使用tomcat集群加nginx作為web服務器,同時nginx做負載均衡,加上redis內(nèi)存數(shù)據(jù)庫作為session存儲和數(shù)據(jù)庫緩存的架構(gòu)方案,所有這些技術均為開源軟件,免除了授權(quán)的問題。

      關鍵詞:Tomcat;nginx;redis;開源

      中圖分類號:TP311.52

      Tomcat快速、高效、易于部署,并且開源,是Java Web最常用的開源服務器。但是在處理靜態(tài)資源上,Tomcat相對于現(xiàn)在流行的高性能Web服務器,如nginx、lighttpd尚有不小的差距。因此,在追求高并發(fā)、重負載的場合,可以在Tomcat集群前加上nginx處理靜態(tài)資源以及負載均衡。同時,對于高并發(fā)的場合,數(shù)據(jù)庫的查詢性能很容易成為瓶頸,使用連接池技術加上內(nèi)存數(shù)據(jù)庫redis作緩存可以大幅度的提升查詢性能。

      1 Tomcat集群和調(diào)優(yōu)

      Tomcat建議安裝在64位Linux系統(tǒng)下,在32位系統(tǒng)中,即使某些操作系統(tǒng)可以使用超過4G,JVM的也限制了最多只能夠使用2G內(nèi)存。Tomcat容器的默認配置吞吐量也不能夠滿足高并發(fā)服務的需要,因此需要更改Tomcat的配置,修改server.xml文件。

      URIEncoding=\"UTF-8\" minSpareThreads=\"25\" maxSpareThreads=\"75\"

      enableLookups=\"1\" disableUploadTimeout=\"true\" connectionTimeout=\"20000\"

      acceptCount=\"300\" maxThreads=\"300\"maxProcessors=\"1000\" minProcessors=\"5\"

      useURIValidationHack=\"1\" compression=\"on\"

      compressionMinSize=\"2048\"

      compressableMimeType=\"text/html,text/xml,text/javascript,text/css,text/plain\"

      redirectPort=\"8443\"

      />

      其中URIEncoding=”UTF-8”表示可以解析含有中文的URL,acceptCount是等待隊列,maxThreads為最大線程數(shù),即最大并發(fā)數(shù)。

      單個Tomcat處理能力有限,在現(xiàn)在的服務器配置情況下,常常不能夠利用完CPU和內(nèi)存就達到最大負載,此時,可以使用Tomcat的縱向集群,即單臺服務器運行多個Tomcat。如果還不能達到高并發(fā)的需要,那么就需要使用Tomcat的橫向集群,即多臺服務器運行多個Tomcat。

      集群方案可以使用Tomcat自帶的cluster方式,多個Tomcat間自動實時復制session信息,配置簡單。但該方案的效率比較低,在高并發(fā)場合下表現(xiàn)并不好。另一種方案是利用nginx的基于訪問IP的hash路由策略,保證訪問的IP始終被路由到同一個tomcat上。以單服務器Tomcat集群為例,需要修改Tomcat的三處端口。首先是修改Tomcat的關閉端口,每個Tomcat不能重復:

      然后修改Tomcat的監(jiān)聽端口,同樣不能重復:

      redirectPort=\"8443\" />

      第三處端口修改Tomcat的連接端口:

      最后Engine元素增加jvmRoute屬性

      2 nginx作負載均衡和動靜態(tài)分離

      nginx是一個高性能的HTTP和反向代理服務器,處理靜態(tài)資源的能力得到了眾多高并發(fā)Web站點的考驗,nginx可以按照調(diào)度規(guī)則實現(xiàn)動態(tài)、靜態(tài)頁面的分離,可以按照輪詢、ip hash、URL hash、權(quán)重等多種方式對后端服務器做負載均衡。使用nginx在Tomcat的前端作反向代理,nginx處理如html、css、js、圖片等靜態(tài)資源,而將動態(tài)的請求轉(zhuǎn)發(fā)給Tomcat集群進行處理,從而充分的結(jié)合nginx和Tomcat的長處,分別處理靜態(tài)和動態(tài)資源。

      nginx的負載均衡配置配置如下所示:

      upstream web_server {

      #ip_hash;

      server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;

      server 127.0.0.1:8081 max_fails=3 fail_timeout=30s;

      }

      其中參數(shù)max_fails=3,表示允許在30秒內(nèi)后端服務器有3次失敗,如果大于3次,則將該后端服務器標記為不可用,該參數(shù)主要用過于對后端服務器進行健康檢查。

      3 redis做session存儲

      Web服務集群最大的難點就是如何能在集群中的多個節(jié)點之間保持數(shù)據(jù)的一致性,Session是這些數(shù)據(jù)中最重要的一塊。Tomcat集群可以通過Tomcat自帶的session復制,將session同步復制到每一個Tomcat中,但如果集群內(nèi)節(jié)點較多,容易引起session廣播風暴。還有種方案是將session放到一個數(shù)據(jù)庫中集中存儲,這就要求該數(shù)據(jù)庫具備非常高的性能,使用redis內(nèi)存數(shù)據(jù)庫可以很好的滿足Tomcat集群的需求。在Tomcat 的conf/context.xml 文件里增加如下內(nèi)容:

      host=\"localhost\" port=\"6379\"

      database=\"0\" maxInactiveInterval=\"60\" />

      4 redis用作數(shù)據(jù)緩存

      Web應用并發(fā)數(shù)增大后,數(shù)據(jù)庫I/O容易成為整個系統(tǒng)的瓶頸,一般可以通過數(shù)據(jù)庫拆分,建立數(shù)據(jù)庫集群來解決該問題,但數(shù)據(jù)庫集群的建立無疑需要較大的成本,同時必須要由水平很高的DBA進行實施。如果使用內(nèi)存數(shù)據(jù)庫對傳統(tǒng)數(shù)據(jù)庫做緩存,實現(xiàn)查詢緩存(以sql為key緩存查詢結(jié)果)和數(shù)據(jù)緩沖,由于內(nèi)存的訪問速度遠遠超過硬盤,可以極大的提升查詢效率。同時也可以將一些更新頻率較低但查詢頻率較高(如基礎數(shù)據(jù)表、配置文件)等數(shù)據(jù)在應用啟動時即加載到redis中。

      5 結(jié)束語

      本文描述了nginx+tomcat集群的配置方案,同時使用了redis內(nèi)存數(shù)據(jù)庫做session集中存儲和數(shù)據(jù)庫緩存,該方案可以應對高并發(fā)和重負載的Web站點所需,并且使用的所有技術均為開源軟件,建議使用的服務器操作系統(tǒng)為Linux,可以節(jié)省軟件使用的授權(quán)成本。

      參考文獻:

      [1]曾超宇,李金香.Redis在高速緩存系統(tǒng)中的應用[J].微型機與應用,2013(12).

      [2]任世宗,李潤知,張茜.基于Nginx的可擴展負載均衡Web站點部署[J].中國教育網(wǎng)絡,2014(08).

      作者單位:瀘州職業(yè)技術學院,四川瀘州 646005

      仁怀市| 尤溪县| 乐亭县| 江西省| 赫章县| 华池县| 正阳县| 普陀区| 平江县| 临夏县| 叙永县| 阆中市| 名山县| 松桃| 宜宾县| 邹平县| 惠州市| 沁阳市| 晋城| 贵港市| 定州市| 滦平县| 循化| 新宁县| 收藏| 喀什市| 灌阳县| 平邑县| 丰镇市| 拜城县| 定远县| 秦皇岛市| 额敏县| 湖南省| 高邑县| 紫阳县| 华安县| 延边| 全州县| 云和县| 平凉市|