APP的前身
app server的前身是
middleware(中間件),歷史要長的多。早在上世紀六七十年代就已經開始在
IBM大型機系統上廣泛套用了,叫做TP Monitor,比較著名的是BEA的Tuxedo和IBM的CICS,運行在Terminal/Server模式的Server端,其功能主要是分離商業邏輯,進行分散式計算的,可以自動管理事務、資源和容錯等等。因為發展的時間很長,所以技術非常成熟。middleware最早是用cobol編寫的,現在還可以偶爾看到cobol的中間件的舊系統,再後來middleware改用C++來實現,著名中間件的有IBM的
CICS,
BEA的uexdo,仍然廣泛的套用在高端系統中,特別是銀行
系統。
APP伺服器
市場上常見的app 伺服器的主要有以下幾種:
1. Tomcat. Tomcat嚴格意義上並不是一個真正的App Server, 它只是一個可以支持運行Serlvet/JSP的Web容器,不過Tomcat也擴展了一些
AppServer的功能,如JNDI,
資料庫連線池,用戶事務處理等等。Tomcat被非常廣泛的套用在中小規模的Java Web套用中;
2. BEA Weblogic.
3. IBM Websphere.
4. Jboss. Jboss是免費開源的App Server.
然而在
面向對象的技術出現和廣泛的套用之後,TP Monitor由於不是面向對象的,而是面向過程的調用,因此TP Monitor管理的商業邏輯並沒有分散式對象系統中的商業組件那樣的可擴展性、可重用性,表現出來很大的局限。
不過像PHP這樣主要還是面向過程調用的函式式的語言來說,TP Monitor仍然可以支持的非常完美,由於有了TP Monitor的支持,
PHP也可以套用在企業的環境中了。
我所知道的eachnet用的是: Linux+Apache+PHP+Tuxedo+Oracle
eachnet在
上海好幾個ISP那裡放了伺服器,以保證服務不因某個ISP的問題而無法訪問。我曾經見過eachnet在上海熱線機房的伺服器,說出來,大家可能不信,eachnet竟然用的是自己攢的兼容機,世紀之星的機箱,估計不比我們大家自己買的兼容機強到哪裡去。大概有六七台機器的樣子,來負載均衡。
對象請求代理(Object Request Brokers)是另一種用的很多的中間件,支持分散式對象的調用。然而它的問題是僅僅是一個代理(Broker),系統級的功能需要自己來實現,這包括管理並發性、事務、資源管理和容錯機制等等,而且不同的廠商提供的ORB之間也存在互操作的兼容性問題。
於是一種綜合了TP Monitor和ORB功能的新的伺服器出現了,叫做CTM(Component Transaction Monitor)組件事務監控器。用在我們特定的管理應用程式的環境中就是App Server。
在1997年開始,CTM市場發生了巨大的變化,因為這一年Sun的J2EE標準正式發布,從此除了
微軟之外,所有的CTM廠商都用Java來改寫自己的產品,例如Sybase原來有一個叫做Jagus CTS的東西,現在已經變成了純Java實現的EAServer,Borland的公司app server也是這樣來的。這樣一來,除了
微軟之外,就剩下基於Java的app server了。
App Server可以自動管理並發性、事務、對象分布、負載均衡、安全性和資源管理等等系統級功能。簡單的來說就是App Server是管理服務端組件的,它給服務端組件提供了一個全功能可靠的運行環境。
打個比方來說,
資料庫系統是管理數據的,它也給數據提供了一個受監控和管理的運行環境,提供了事務、安全性、負載均衡,並發性等等系統級功能,對於使用者來說,你不需要自己處理資料庫表的並發鎖定問題,自己處理SQL語句的解析、自己處理索引的最佳化等等系統級功能,同樣對於服務端組件的調用者來說也不需要自己處理並發請求、對象創建、銷毀、快取,控制組件事務等等系統級功能。
App Server對服務端組件的的關係就是資料庫系統對數據的關係。App Server完全是一個類似資料庫系統這樣一個非常複雜的服務端軟體,所不同之處就是資料庫系統(RDBMS)是管理數據的,而App Server是管理對象的。這也是我研究Weblogic Server之後的切身感受。
Microsoft是最早發布App Server的廠商,叫做Microsoft Transaction Server(MTS)。其他還有很多基於不同技術的App Server,不過隨著EJB規範的發布,主流的App Server基本上都是基於J2EE的了。目前看來,
AppServer市場主要就是實現J2EE規範的Java套用伺服器和Microsoft的.Net套用伺服器這兩大主流。
Tuxedo等基於過程傳統的中間件會繼續在特定的場合發揮巨大的作用,像那些需要極高的回響性能和基於特定平台
C/C++的場合,還是具有不可替代的作用。
App Server提供的服務端
組件模型並沒有解決所有的問題,基於不同技術實現的服務端組件之間不能互相調用和數據共享,比如EJB組件和
COM組件之間不能之間交換數據,所以基於
SOAP協定的Web Services試圖解決這個問題,想把網際網路上所有的不同技術實現的
組件服務都統一成單一的Web Services。這也是Web Services熱門的原因之一,標準的統一對大家都有好處。