Servlet 線程池 和 EJB 對象池

來源:互聯網
上載者:User

Servlet 線程池 和 EJB 對象池

2008/11/13 07:26 P.M. 轉至http://hi.baidu.com/%D3%C0%CA%C0%CF%E9%BA%CD/blog/item/ca83e8876c55142dc65cc31a.html

目前所有的B/S系統應用可以分為:有狀態(statefull)和無狀態(stateless)兩大類別。有狀態是指在整個系統的處理過程中要保留記住一些資訊,而無狀態則相反,每次request都是獨立的串連,不需要在每個request之間共用資料等等。

對於這兩種應用,通常第一考慮是效能要最優,效能是我們選擇IT技術的主要依據之一。

為達到最大化的效能,對於Java系統,以前通常的作法是使用對象池,這樣節約對象產生時的效能開銷,也就是說系統啟動時,預先產生一定數目的對象執行個體在記憶體中,需要使用時,從對象池中取出執行個體,用完,歸還對象池,對於有狀態的應用,可以使用相關持久化(persistence)策略來儲存狀態。

下一步,如何並行訪問對象池將是非常重要,java的多線程技術為我們提供了實現可能,線程的建立銷毀也是可能非常耗時的,那麼,無疑象使用對象池一樣,我們必須使用線程池來實現多線程並行計算的最佳化。

使用線程池和對象池,每次用戶端請求發生一次就從線程池中借用一個線程,處理完這個請求就將線程返回線程池,同樣,使用線程快速的訪問對象,對象也是從對象池中借用,用完就還回對象池。 整個這樣的架構設計在效能上是最優的

有了效能保證,安全機制、事務機制、叢集(cluster)技術也將是選擇IT技術的主要依據。

J2EE就是這樣一個實現上述多種考量的綜合標準架構系統,在具體使用中,也許我們對所有這些考量的要求並不都一樣重視,比如:如果純粹追求效能是第一,可以忽視事務機制,那麼,完整的J2EE技術也許就並不適合你。

那麼我們先看看J2EE是如何從效能上保證我們的應用系統以最快速度啟動並執行,也就是說J2EE中必然應該有上述線程池和對象池的實現技術,servlet實際是基於線程池的更好的線程容器;EJB是基於對象池的更好的對象容器

看看Servler的架構圖:

當client1發生請求時servlet容器會從線程池中分配一個線程給這個request.

再看看EJB的架構圖:

instance Pool作為一個對象執行個體池,維持著EJB執行個體,當然這個對象池是用生命週期的,簡單的說 EJB=對象池+遠程對象池

但是,EJB還整合了相當的其它增強功能,如安全 事務機制等,這些對於一般應用都是必需的,當然你還必鬚根據你的需要來選擇是否使用J2EE,如果你的應用對安全 事務機制沒有要求,直接使用線程池和對象池技術肯定獲得最好的效能

所以,根據Servler和EJB的原理,我們已經可以規劃我們的應用,什麼可以放在servlet,或什麼需要放在EJB中實現:

線程的本質決定了servlet只適合一些輕量的應用,如分析簡單XML文檔, 通過JDBC訪問資料來源,使用JMS或JavaMail處理簡單的資訊Message,或使用JTS/JTA處理簡單的事務機制,注意這些用詞都是"簡單"的,一旦複雜了,就要使用EJB了

下面從用戶端和伺服器端兩個方面來具體考量這兩個技術的使用,這裡的用戶端不一定是指最終用戶端,因為J2EE是多層結構,中介層可能在多個伺服器上實現,如果一個伺服器上的服務是供另外一個伺服器上的應用訪問的,那麼後者我們也稱為用戶端。

根據應用的複雜程度和要求不同,分下列情況:

1.在WEB層可以實現的一些應用

如果你的系統沒有很複雜的交易處理,或訪問很多企業原有的資源,那麼可以藉助javabean這樣的一些Help性質的類來實現你的應用,但是,這樣的方案不是最乾淨clean, 最有效efficient, 或最有擴充性的scalable。

否則,將所有核心計算放置入EJB中。

2.所有的複雜商務計算核心都在EJB中完成

如果你的用戶端和伺服器端之間有防火牆,那麼目前能夠無障礙通過防火牆的協議只有Http了(Web Service也是基於http就是這個道理),既然使用http了,而Servlet是基於Http協議的,那麼就需要通過servlet來訪問 EJB,這是我們最普遍的應用情況。

但是,如果你的用戶端和伺服器端可以放置在一個網路內,之間沒有防火牆,那麼就不必使用Servlet,直接使用Java調用RMI來訪問EJB,這樣效能是最好的,這時的Servlet大概只有用於控制Jsp的頁面的輸出了(MVC模式中的控製作用)。

如果是非java用戶端,可以通過CORBA組件來訪問EJB。

3.如果你的應用對速度要求很高,要求非常快,對於交易處理等方面幾乎無要求

直接使用J2SE,加上線程池和對象池技術,將會使你的java系統效能發揮極致。Jakarta.Apache.org有這兩種技術的源碼,線程池可以從Servlet容器Tomcat的源碼中發現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.