應用容器雲:接過Java EE的槍

老實說,今天的觀點如果放在一年前,我不大敢講,會比較有爭議。最近看到有人也提出類似觀點,所以我也整理了一下,拿出來分享。相信爭議還是會有,希望能與大家共同探討,也能進一步完善我的想法。

一、回顧Java EE的發展

開始之前,首先需要明確下什麼是Java EE,我直接引用了官方說明,不做翻譯。

圖片描述

這裏面有幾組關鍵詞,第一組是Platform、API and runtime,說明Java EE是遠比Java語言範疇廣泛的東西,今天所談的Java EE的問題,基本上也和Java語言無關;第二組是large-scale、multi-tiered、scalable、distributed,這是Java EE的主攻方向,今天談的問題主要也出在這裏;第三組是modular components running on an applciation server,說明了Java EE的實現形態是應用服務器和一組運行在應用服務器上的組件。

下面看下Java EE的技術標準:

圖片描述

Java EE由一系列技術標準組成,這裏面有我們熟悉的用於定位和訪問資源的JNDI、用於描述Web Service的WSDL、用於安全方面的JAAS、用於消息傳遞的JMS等等。這裏不展開講,後面會看到這些Java EE技術標準,或者說是Java EE的API和“子系統”,在應用容器雲裏,會以基礎服務的形式體呈現。

下一頁是Java EE的一組實現,其實就是一系列應用服務器。

圖片描述

這個圖來自IBM的競爭分析資料,稍微有一點美化自家產品WebSphere的味道,不過總體來說還算客觀。

WebSphere確實在技術上最完整的實現了Java EE標準,在架構上可以支持最大的系統規模,就像圖中所示,hundreds of servers,雖然很少見到上百個節點的WebSphere集羣,但是WebSphere在架構設計上確實考慮到了這麼大的規模。

既然WebSphere這麼強,那我們就來打開看下WebSphere。

首先看下WebSphere的架構圖,可以看到,Java EE的API作爲一系列子系統運行在WebSphere中。

圖片描述

再看一下WebSphere的概念圖。

圖片描述

WebSphere的主要概念有:

Application Server:即一個應用服務器實例

Node:一個操作系統實例,裏面可以運行多個Application Server

System:可以認爲是一個物理機,通過虛擬化,上面可以運行多個操作系統實例,即多個Node

Cell:一組執行相似任務的Node,作爲一個管理域統一管理

這樣的概念層次可以支持大規模的應用服務器集羣,考慮的確實比同類產品要全面。

接下來看一下WebSphere如何管理large-scale multi-tiered系統。

圖片描述

只需要通過管理節點上傳你的應用EAR,WebSphere就會幫你把應用部署到集羣中所有Application Server實例上,可以在單一入口管理整個集羣,還可以幫你管理前端的Web Server和後端的數據庫。

看起來很美好,不是嗎?然而事實上不是這樣。

二、揭露Java EE的根本性缺陷

我們來看一下Java EE,或者說Java EE的技術實現 —— 應用服務器的四大問題。

第一個問題,資源隔離

圖片描述

應用服務器實例運行在單一JVM上面,而JVM無法隔離CPU、內存、IO等資源,所以一個應用有問題、或者是應用的某個模塊有問題,都會造成應用服務器上的所有應用無法正常運行,有時候還會影響同一操作系統上的其他應用服務器。所以現狀往往是,一個操作系統內只運行一個應用服務器,一個應用服務器上只運行一個應用,失去了應用服務器作爲基礎架構和資源池的意義。

第二個問題,依賴管理

圖片描述

應用服務器一般只能管理三層或者四層系統,對圖中這種分佈式系統無能爲力,還記得最開始講的Java EE的主攻方向裏有distributed系統嗎?實際上好像不是這麼回事,或者說現在的分佈式系統比起當年已經出現了根本性的變化。

第三個問題,與應用緊耦合

圖片描述

如圖所示,應用服務器實際上已經變成了應用的一部分,而不是應用的基礎設施。

第四個問題,CI/CD不友好

圖片描述

Java EE應用服務器過於龐大,很難納入CI/CD流程。爲什麼要把應用服務器納入CI/CD流程呢?前面說了,應用服務器實際上是應用的一部分,如果不納入CI/CD流程,就會經常出現“在我這裏能用,在你那裏就不能用了”等看似瑣碎、卻影響很大的問題。

CI/CD都做不好,那怎麼做DevOps呢!

這裏可能有同學會說,可以用Tomcat、Jetty或者Spring Boot嘛。是這樣,不過這些已經不是Java EE應用服務器了,使用嵌入式應用服務器是個很好的選擇,但是這個時候,應用服務器就完全不具備large-scale、multi-tiered、scalable、distributed系統的管理能力了,後面可以看到,這些能力將由應用容器雲提供。

三、從Java EE的角度看應用容器雲

上述這些Java EE意圖解決卻沒有解決好的問題,應用容器雲都可以很好的解決,所以纔有了本次分享的題目:應用容器雲,接過Java EE的槍。

圖片描述

使用容器技術配合微服務模式,Java EE的那些“子系統”以進程的方式運行在容器之中,可以做到很好的資源隔離並根據負載進行擴展。應用容器雲標配的服務註冊能力,可以比Java EE更好的解決當今分佈式系統的依賴問題,應用容器和運行環境的耦合性很低,應用容器鏡像高內聚而且體積適中,可以很容易的納入CI/CD流程,Java EE的四大問題迎刃而解。

圖片描述

對比Java EE,應用容器鏡像就像是更廣義的“WAR”或者“EAR”,如果運行Java應用,鏡像裏可以包含應用本身、嵌入式應用服務器和應用在操作系統層面的各種依賴。

圖片描述

應用容器雲就像是更廣義的Java EE Platform,或者說是更廣義的“應用服務器”,可以爲各種語言和類型的應用提供Runtime並很好的將它們管理起來。

Java EE的“子系統”

圖片描述

在應用容器雲中以基礎服務的形式提供。

圖片描述

這些基礎服務提供和Java EE API相似的能力,並且可以做的更好。

四、對未來的展望

普元的數字化企業雲平臺正在緊張的開發之中,在此我對我司的產品和應用容器雲這一產品形態做個展望。

圖片描述

應用容器雲將完成Java EE未竟的事業。

最後我們來看一下Gartner的一個說法。

圖片描述

和我們的感受一樣,與基於虛擬化的雲平臺,主要由運維人員參與的狀況完全不同,這一波基於容器的雲平臺熱潮由開發者推動,我個人也非常希望更多的開發者能夠參與到這次變革之中。

普元雲計算專區:http://primeton.csdn.net/m/zone/primeton/index#

普元公衆號:

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章