posts - 0,  comments - 17,  trackbacks - 0

          來源:http://blog.csdn.net/ladofwind/archive/2006/08/29/1138484.aspx

            在單一的服務器上執行WEB應用程序有一些重大的問題,當網站成功建成并開始接受大量請求時,單一服務器終究無法滿足需要處理的負荷量,所以就有點顯得有點力不從心了。另外一個常見的問題是會產生單點故障,如果該服務器壞掉,那么網站就立刻無法運作了。不論是因為要有較佳的擴充性還是容錯能力,我們都會想在一臺以上的服務器計算機上執行WEB應用程序。所以,這時候我們就需要用到集群這一門技術了。

                   在進入集群系統架構探討之前,先定義一些專門術語:
          1. 集群(Cluster):是一組獨立的計算機系統構成一個松耦合的多處理器系統,它們之間通過網絡實現進程間的通信。應用程序可以通過網絡共享內存進行消息傳送,實現分布式計算機。 
          2. 負載均衡(Load Balance):先得從集群講起,集群就是一組連在一起的計算機,從外部看它是一個系統,各節點可以是不同的操作系統或不同硬件構成的計算機。如一個提供Web服務的集群,對外界來看是一個大Web服務器。不過集群的節點也可以單獨提供服務。
          3. 特點:在現有網絡結構之上,負載均衡提供了一種廉價有效的方法擴展服務器帶寬和增加吞吐量,加強網絡數據處理能力,提高網絡的靈活性和可用性。集群系統(Cluster)主要解決下面幾個問題: 
          高可靠性(HA):利用集群管理軟件,當主服務器故障時,備份服務器能夠自動接管主服務器的工作,并及時切換過去,以實現對用戶的不間斷服務。
          高性能計算(HP):即充分利用集群中的每一臺計算機的資源,實現復雜運算的并行處理,通常用于科學計算領域,比如基因分析,化學分析等。 
          負載平衡:即把負載壓力根據某種算法合理分配到集群中的每一臺計算機上,以減輕主服務器的壓力,降低對主服務器的硬件和軟件要求。

          目前比較常用的負載均衡技術主要有: 
            1. 基于DNS的負載均衡 
            通過DNS服務中的隨機名字解析來實現負載均衡,在DNS服務器中,可以為多個不同的地址配置同一個名字,而最終查詢這個名字的客戶機將在解析這個名字時得到其中一個地址。因此,對于同一個名字,不同的客戶機會得到不同的地址,他們也就訪問不同地址上的Web服務器,從而達到負載均衡的目的。 

            2. 反向代理負載均衡 (如Apache+JK2+Tomcat這種組合)
            使用代理服務器可以將請求轉發給內部的Web服務器,讓代理服務器將請求均勻地轉發給多臺內部Web服務器之一上,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部Web服務器,而這種代理方式是多個客戶使用它訪問內部Web服務器,因此也被稱為反向代理模式。

            3. 基于NAT(Network Address Translation)的負載均衡技術 (如Linux Virtual Server,簡稱LVS)
            網絡地址轉換為在內部地址和外部地址之間進行轉換,以便具備內部地址的計算機能訪問外部網絡,而當外部網絡中的計算機訪問地址轉換網關擁有的某一外部地址時,地址轉換網關能將其轉發到一個映射的內部地址上。因此如果地址轉換網關能將每個連接均勻轉換為不同的內部服務器地址,此后外部網絡中的計算機就各自與自己轉換得到的地址上服務器進行通信,從而達到負載分擔的目的。

          介紹完上面的集群技術之后,下面就基于Tomcat的集群架構方案進行說明:

          上面是采用了Apache httpd作為web服務器的,即作為Tomcat的前端處理器,根據具體情況而定,有些情況下是不需要Apache httpd作為 web 服務器的,如系統展現沒有靜態頁面那就不需要Apache httpd,那時可以直接使用Tomcat作為web 服務器來使用。使用Apache httpd主要是它在處理靜態頁面方面的能力比Tomcat強多了。
          1、 用戶的網頁瀏覽器做完本地 DNS和企業授權的DNS之的請求/響應后,這時候企業授權的DNS(即21cn BOSS DNS)會給用戶本地的DNS服務器提供一個NAT請求分配器(即網關)IP。


          2、 NAT分配器,它會根據特定的分配算法,來決定要將連接交給哪一臺內部 Apache httpd來處理請求。大多數的NAT請求分配器提供了容錯能力:根據偵測各種WEB服務器的失效狀況,停止將請求分配給已經宕掉的服務器。并且有些分配器還可以監測到WEB服務器機器的負載情況,并將請求分配給負載最輕的服務器等等。Linux Virtual Server是一個基于Linux操作系統上執行的VS-NAT開源軟件套件,而且它有豐富的功能和良好的說明文件。商業硬件解決方案 Foundry Networks的ServerIron是目前業界公認最佳的請求分配器之一。


          3、 Apache httpd + Mod_JK2在這里是作為負載均衡器,那為什么要做集群呢?如果集群系統要具備容錯能力,以便在任何單一的硬件或軟件組件失效時還能100%可用,那么集群系統必須沒有單點故障之憂。所以,不能只架設一臺有mod_jk2的Apache httpd,因為如果 httpd或mod_jk2失效了,將不會再有請求被會送交到任何一個Tomcat 實例。這種情況下,Apache httpd就是瓶勁,特別在訪問量大的網站。


          4、 Mod_JK2負載均衡與故障復原,決定把Apache httpd當成web服務器,而且使用mod_jk2將請求傳送給Tomcat,則可以使用mod_jk2的負載均衡與容錯功能。在集群系統中,帶有mod_jk2的Apache httpd可以做的事情包括:
          A、 將請求分配至一或多個Tomcat實例上
          你可以在mod_jk2的workers.properties文件中,設定許多Tomcat實例,并賦于每個實例一個lb_factor值,以作為請求分配的加權因子。


          B、 偵測Tomcat實例是否失敗
          當Tomcat實例的連接器服務不再響應時,mod_jk2會及時偵測到,并停止將請求送給它。其他的Tomcat實例則會接受失效實例的負載。


          C、 偵測Tomcat實例在失效后的何時恢復
          因連接器服務失效,而停止將請求分配給Tomcat實例之后,mod_jk2會周期性地檢查是否已恢復使用性,并自動將其加入現行的Tomcat實例池中。


          5、 Tomcat中的集群原理是通過組播的方式進行節點的查找并使用TCP連接進行會話的復制。這里提示一下就是,對每個請求的處理,Tomcat都會進行會話復制,復制后的會話將會慢慢變得龐大。


          6、 Mod_jk2同時支持會話親和和會話復制。在tomcat 5中如何實現會話親和和會話復制?把server.xml中的<cluster/>標簽去掉就實現會話親和,把<cluster/>標簽加上就實現會話復制。


          7、 會話親和:就是表示來自同會話的所有請求都由相同的Tomcat 實例來處理,這種情況下,如果Tomcat實例或所執行的服務器機器失效,也會喪失Servlet的會話數據。即使在集群系統中執行更多的Tomcat實例,也永遠不會復制會話數據。這樣是提高集群性能的一種方案,但不具備有容錯能力了。


          8、 使用會話復制,則當一個Tomcat實例宕掉時,由于至少還有另一個Tomcat實例保有一份會話狀態數據,因而數據不會喪失。但性能會有所降低。 

          posted on 2008-05-13 19:23 xyz 閱讀(405) 評論(0)  編輯  收藏 所屬分類: 網絡文摘

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          留言簿

          隨筆檔案(1)

          文章分類(44)

          文章檔案(46)

          收藏夾(1)

          Adobe

          AOP

          API

          appServer

          BI

          c

          • c-free
          • codeblocks
          • codelite
          • CodeLite IDE 是一個強大的開源,跨平臺的 C/C++整合開發環境. 支持包括 Windows、Linux 和 Mac 系統下運行
          • codelite官網
          • dev-c++
          • Dev-C++是一個C&C++開發工具,它是一款自由軟件,遵守GPL協議。
          • GCC
          • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

          Cache

          CMS

          DB

          eclipse

          FreeMarker

          hibernate

          html5

          ibatis

          java

          jquery

          js

          json

          Linux

          Log

          mail server

          mobile

          mysql

          oauth

          openID

          other

          PHP

          portal

          report

          Scheduler

          schema

          Security

          SOA

          spring

          struts

          UI原型設計

          w3c

          Wap

          webservice

          xml

          供應鏈管理

          博客鏈接

          好網站

          工作流

          開源網

          招聘

          插件下載

          操作系統

          構建可伸縮的系統

          構建工具

          測試

          • IETest
          • IE官網
          • OpenSTA
          • Siege
          • Siege是一個壓力測試和評測工具,設計用于WEB開發這評估應用在壓力下的承受能力

          游戲

          源碼托管

          經營

          資源

          金融/財務

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 塔城市| 鄄城县| 沙湾县| 英德市| 绥宁县| 本溪| 台南市| 泊头市| 原阳县| 西宁市| 新巴尔虎右旗| 兴安盟| 龙泉市| 福州市| 马鞍山市| 安远县| 阿尔山市| 邯郸市| 隆子县| 永寿县| 鹤庆县| 莲花县| 栾城县| 华宁县| 遂宁市| 铁岭县| 太保市| 道孚县| 建宁县| 九龙县| 香河县| 界首市| 榆中县| 娱乐| 武平县| 阳东县| 定西市| 卢龙县| 晋中市| 马鞍山市| 乳山市|