JAVA的卡夫卡

          讓我們共同進步,分享成功

          常用鏈接

          統(tǒng)計

          最新評論

          • 1.?re: 去還是留?
          • 看來都不容易啊 做it就是這樣 看著那些做客戶的同事工資飛漲 哎 還是自己看看技術(shù)的書籍吧 呵呵
          • --kirari_wxy

          Tomcat對Apache MPM模型的實現(xiàn)

          Tomcat Apache MPM 的簡介

          Tomcat 簡介

          Tomcat 是一個免費的開源 Servlet 容器,它是 Apache 基金會的 Jakarta 項目中的核心項目,最近 Sun 也參與到其的開發(fā)中,并將它集成到 NetBeans 中。由于有了 Sun 的支持,最新的 Servlet Jsp 規(guī)范在 Tomcat 中得到體現(xiàn)。

          目前 Tomcat 最新版本是 5.5.17 ,完整的實現(xiàn)了 Sevlet2.4 JavaServer Pages 2.0 規(guī)范 (Java Community Process) 。與之前的版本相比, 5.5.17 兼容了以前版本的一些特性,也相應(yīng)的加入了一些新的特性。

          1.???????? 支持 web 應(yīng)用程序的靜態(tài)配置和動態(tài)配置。

          2.???????? 內(nèi)置一個管理 Tomcat web 應(yīng)用程序。方便對 Tomcat 的日常管理。

          3.???????? 提供 Realm 支持, Realm 是一些帶角色的用戶信息。 Tomcat 通過驗證這些信息來限制用戶對一些 web 應(yīng)用程序的訪問。 Realm 類似于 unix 中組的概念。 Tomcat 主要支持 JDBCRealm , DataSourceRealm, JNDIRealm, MemoryRealm, JAASRealm 。這幾種 Realm

          4.???????? 提供 JNDI 支持。

          5.???????? 通過 DBCP 或第三方庫提供 JDBC 數(shù)據(jù)源。

          6.???????? 實現(xiàn)獨立類加載體系,以防 web 應(yīng)用程序的類庫與 Tomcat 自身類庫沖突。

          7.???????? 集成 SSL ,實現(xiàn)安全傳輸。

          8.???????? 使用 JMX MBeans 進行組件的管理。

          9.???????? 支持集群。實現(xiàn)負載均衡。

          10.???? 多種日志支持。

          ???

          Apache MPM 簡介

          MPM( Multi-Processing Modules ) 多道處理模塊 , 在支持 POSIX 線程的 Unix 系統(tǒng)上, Apache 可以通過不同的 MPM 運行在一種多進程與多線程相混合的模式下來處理 Http 請求, MPM 模塊是 Apache2.0 的核心模塊。

          如果不用 “--with-mpm” 顯式指定某種 MPM prefork 就是 Unix 平臺上缺省的 MPM 。它所采用的預(yù)派生子進程方式也是 Apache 1.3 中采用的模式。 prefork 本身并沒有使用到線程, 2.0 版使用它是為了與 1.3 版保持兼容性;另一方面, prefork 用單獨的子進程來處理不同的請求,進程之間是彼此獨立的,這也使其成為最穩(wěn)定的 MPM 之一。

          相對于 prefork worker 2.0 版中全新的支持多線程和多進程混合模型的 MPM 。由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進程的服務(wù)器。但是, worker 也使用了多進程,每個進程又生成多個線程,以獲得基于進程服務(wù)器的穩(wěn)定性。這種 MPM 的工作方式將是 Apache 2.0 的發(fā)展趨勢。

          Tomcat MPM 的實現(xiàn)架構(gòu)

          o_mpmframework.bmp

          o_mpmframework2.bmp

          Tomcat MPM 的實現(xiàn)源碼分析

          1.???????? 首先 PoolTcpEndpoint 調(diào)用 startEndpoint() 方法開始執(zhí)行 MPM 的核心代碼

          代碼 :
          o_startEndpoint().bmp

          2.???????? 調(diào)用 PoolTcpEndpoint initEndpoint() 方法完成 PoolTcpEndpoint 的初始化 .
          o_initEndpoint().bmp

          3.???????? PoolTcpEndpoint 調(diào)用 ThreadPool start() 方法,完成 ThreadPool 的初始化

          代碼 :
          o_ThreadPool.start().bmp

          4.???????? 調(diào)用 ThreadPool runIt() 方法,開始監(jiān)聽線程
          o_ThreadPool.runIt().bmp

          5.???????? 監(jiān)聽線程調(diào)用 LeaderFollowerWorkerThread runIt() 方法監(jiān)聽鏈接,在得到一個鏈接后該監(jiān)聽線程處理該鏈接,并從 ThreadPool 里取一個新的線程運行監(jiān)聽程序,監(jiān)聽新的鏈接。

          ??? o_LeaderFollowerWork.runIt()1.bmp

          總結(jié)

          MPM 是一個成熟的多道任務(wù)處理模型, Tomcat 很好的實現(xiàn)了這個模型,提高了 Tomcat 的性能。希望這篇文檔對研究 MPM 的兄弟有所幫助。

          posted on 2006-08-08 16:13 JAVA的卡夫卡 閱讀(504) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 永平县| 天台县| 方城县| 承德市| 北川| 鹰潭市| 德钦县| 普洱| 东平县| 奉新县| 岑溪市| 嘉禾县| 蒲江县| 共和县| 城口县| 东兰县| 于都县| 无为县| 江源县| 洛扎县| 崇州市| 安庆市| 濉溪县| 商洛市| 大悟县| 同德县| 若尔盖县| 永州市| 丰宁| 南京市| 鄂托克前旗| 花莲县| 桦川县| 漳平市| 盐边县| 中江县| 江达县| 潼关县| 嘉黎县| 扶风县| 丹寨县|