微服務:Java EE的拯救者仍是掘墓人?

有人認爲,微服務的大行其道是在給Java EE下達死刑判決書。也有人認爲,Java EE已死的論調好笑至極。讀者朋友,大家怎麼看?java

引言程序員

有人說,Java確實過於臃腫,常常「小題大作」。但PHP、Node.js擴展方面短板太明顯,作小應用能夠,大型應用就玩不轉了。 另外,Java EE領域有太多優秀框架能夠解決開發效率的問題,事實上借用Spring等框架,開發的效率絲絕不亞於PHP。編程

互聯網時代的Java開發者,不少都不是基於Servlet和EJB來開發Web應用,並且WebLogic、WebSphere也只會存在於大公司的存量系統中,互聯網公司的Java都是Tomcat的世界。安全

那麼,微服務能徹底彌補Java EE的短板嗎?對於Jave EE來講,微服務扮演的,到底是拯救者仍是掘墓人的角色?服務器

在Java問世之初,包括IBM、BEA、Oracle在內的一些巨頭公司,看到了Java做爲一門傑出的Web編程語言可能給他們帶來的巨大商機。那麼如何經過一門編程語言來賺錢呢?答案就是,使用這門語言構建複雜無比的服務器,讓那些大公司支付一大筆費用來購買這些服務器。因而緊接着就出現了Java EE規範、JSR規範,以及WebLogic、WebSphere等服務器中間件。架構

在這些服務器上面部署了大型的程序包,它們運行緩慢,消耗大量的內存。基於這些容器的開發和調試對開發人員來講簡直就是噩夢,做爲對他們的補償,他們從僱主那裏得到了豐厚的報酬。oracle

由於耗資巨大,幾乎找不到一家公司可使用合理的費用長時間地支持Java。若是你要用Java構建一個網站,你必須支付一大筆費用來運行這些服務器,哪怕你只用到了Servlet容器。在很長一段時間裏,Java被用在企業和公司裏,由於只有這些大公司可以負擔得起數百萬美圓的服務器費用,併爲那些企業級開發人員支付高額的薪水。java-ee

Rod Johnson在2003年發佈了Spring框架,Spring提供了IoC和對POJO的支持,幫助開發人員逃脫EJB魔掌。開發效率所以獲得大幅的提高,大量開發人員轉向Spring,把EJB丟在一邊。應用服務器開發商看到了這一點,他們在Java EE 5裏提供了一些能夠減輕開發人員負擔的特性。惋惜的是,Spring被一路追捧,人們幾乎把它跟Java EE容器混爲一談,它仍然運行在Java EE的Servlet容器裏,這些容器沿用的是十年前的設計,並無考慮到多核CPU和NIO。框架

在這期間,PHP奮起直追。PHP使用更少的內存和資源,獲得不少公司的支持。一些CMS平臺,好比WordPress、Drupal等都是基於PHP構建的,這些平臺吸引了大批PHP開發人員。不過,雖然PHP仍然是現今最流行的編程語言,但它也有本身的短板。它運行速度不是很快,並且難以橫向擴展。curl

2009年,Ryan Dahl啓動了Node.js項目,它支持異步非阻塞的、基於事件驅動的I/O。若是服務器的線程使用得當,Node.js能夠極大地提高響應速度,單個服務器的吞吐量能夠媲美一個Java EE服務器集羣。Node.js是一個很好的做品,但它也有本身的侷限性。Node.js難以擴展,也難以與遺留的系統集成。

2014年,Undertow出現了,它是一個基於Java的非阻塞Web服務器。從techempower.com的測試結果來看,在一個價值8000美金的戴爾服務器上,它能夠每秒鐘處理幾百萬個請求,而谷歌須要使用一個集羣才能處理一百萬個一樣的請求。它是輕量級的,它的核心部分只須要1M內存,它還包含了一個內嵌的服務器,這個服務器使用不到4M的堆內存。

基於Undertow Core構建的Light Java Framework是一個微服務容器,它支持設計驅動及生成代碼,並支持運行時安全和運行時驗證。

Java EE廠商

多年前,Java EE廠商,好比Oracle和IBM,他們花費數億美圓開發應用服務器(WebLogic和WebSphere),這些服務器以數百萬的價格賣給了大型組織。但如今這些服務器賣不動了,由於JBoss迅速搶佔了市場份額,Oracle對Java EE的支持正在走下坡路:

https://developers.slashdot.org/story/16/07/02/1639241/oracle-may-have-stopped-funding-and-developing-java-ee

隨着微服務愈來愈多地受到關注,這些應用服務器很難有好的銷量,由於這些服務器更適合用來部署單體應用。有一個包含了數百個EJB的應用,爲了在WebLogic上測試一行代碼改動,竟然用了45分鐘時間。

Java EE客戶

從客戶角度來看,耗費巨資購買這些服務器是不值得的,由於Java EE所承諾的未必都是真的。一個爲WebSphere開發的應用沒法部署在WebLogic上,因此你須要花更多的錢去升級服務器,由於廠商可能再也不支持舊版的服務器,而這樣的更新會花費你數百萬美圓。

因而一些聰明人不由要問,爲何咱們要把應用部署在這些龐然大物上?爲何咱們要把應用打包成一個ear包或war包,而不是jar包?爲何咱們不能把大型的應用拆分紅更小的塊,讓它們能夠獨立部署和擴展?

微服務

微服務是這些問題的解藥。Wikipedia把微服務定義爲「……一種軟件架構風格,複雜的應用由一些獨立的進程組成,這些進程使用與語言無關的API進行交互。這些進程服務規模很小,高度離散,聚焦在一個很小的任務上,使用模塊化方式來構建系統」。

微服務架構讓構建應用變得更加容易,並且應用被拆分紅單獨的服務,這些服務能夠被任意組合。每一個服務能夠被獨立部署,也能夠被組合成一個應用。這些服務還可能會被其餘應用依賴。它加快了服務的開發速度,由於只要定義好接口,服務能夠並行開發。

微服務具有彈性和伸縮性。微服務不僅依賴單個服務器和部署,它們能夠被髮布到多個機器上,或者多個數據中心及其它任何可用的區域。若是一個服務失效,能夠啓動另一個。由於整個應用被分解成了微服務(小型服務),能夠很容易地對其中某些熱門的服務進行橫向擴展。

若是你曾經使用過COM、DCOM、CORBA、EJB、OSGi、J2EE、SOAP和SOA等,那麼你就會知道服務和組件並非什麼新生事物。企業在使用組件方面存在的一個最大問題是他們依賴大型的硬件服務器,並在同一個服務器上運行不少應用。咱們有EJB、WAR包和EAR包,以及各類組件包,由於服務器資源太過昂貴,要儘量地物盡其用。

不過從最近幾年的發展狀況來看,以前的方式有些落伍。操做系統服務器一直在變化,虛擬資源能夠被當成組件發佈,好比EC二、OpenStack、Vagrant和Docker。世界變了。微服務架構看到了這種趨勢,硬件、雲技術、多核CPU和虛擬技術也在發展,因此咱們要改變之前的開發方式。

在開始新項目的時候不要再使用EAR包或WAR包了。如今咱們能夠在Docker裏運行JVM,Docker只不過是一個進程,但它能夠表現得像一個操做系統同樣。Docker運行在雲端的操做系統上,而云端的操做系統運行在虛擬機裏,虛擬機運行在Linux服務器上。這些服務器不是歸誰全部,而是被不少互不相識的人共享。若是出現流量高峯怎麼辦?很簡單,使用更多的服務器實例。這就是爲何要把Java微服務運行在一個單獨的進程裏,而不是Java EE容器或servlet容器。

微服務通常會提供基於HTTP/JSON的API端點。這樣能夠很容易地與其餘服務(開源或閉源的)集成,只要這些服務提供了HTTP/JSON接口。服務能夠經過更有意義的方式被消費、被組合。EC二、S3及其餘來自Amazon(或其餘公司)的服務就是最好的例子。基礎設施會成爲應用程序的一部分,並且它們是可編程的。

使用微服務架構的應用程序應該是模塊化、可編程和可組合的。微服務之間能夠相互替換。應用程序的局部能夠被重寫或改進,而不會影響到整個應用。若是全部的組件都提供了可編程的API,那麼微服務之間的交互就會變得更簡單(永遠不要相信那些不能經過curl訪問的微服務)。

隨着微服務逐漸流行起來,不少廠商開始嘗試把他們的Java EE Web服務轉成微服務,這樣他們就能夠繼續賣他們的過期產品,API Gateway就是這些廠商中的一個。

Jason Bloomberg是Intellyx的主席,他在一篇文章裏指出了傳統Web服務和微服務的區別,並對把傳統Web

服務轉成微服務的趨勢提出了質疑:

http://techbeacon.com/dangers-microservices-washing-get-value-strip-away-hype

微服務不是企業服務總線裏的Web服務,也不是傳統的面向服務架構,儘管它沿襲了SOA的一些基本概念。從根本上來講,微服務跟SOA是不同的,由於整個環境已經發生了完全的轉變。

微服務架構的環境是沒有邊界的:端到端,基於雲的應用程序運行在徹底虛擬和容器化的基礎設施上。容器把應用程序和服務組件化,DevOps爲IT基礎設施提供框架,幫助自動化開發、部署和管理環境。

雖然容器對微服務來講不是必需的,不過微服務能夠很容易地運行在容器裏。何況,把非微服務的代碼部署在容器裏不是一個明智的選擇。

Docker和其餘容器技術在某種程度上已經被視爲微服務的最好伴侶。容器是運行微服務的最小資源子集。

Docker簡化了微服務的開發,讓集成測試變得更簡單。

容器有助於微服務開發,但不是必需的。Docker也能夠被用來部署單體應用。微服務與容器能夠很好地相融並進,不過微服務包含的東西遠比容器多!

當前微服務很熱,你們都號稱在使用微服務架構,但究竟什麼是微服務架構?微服務架構是否是發展趨勢?想必這些是不少程序員共同的疑惑,若是你也有一樣的疑惑,想要深刻了解、熟練掌握微服務架構,能夠加個人羣:650385180,我會在羣裏分享我從業多年總結出來的的經驗,也會在羣裏分享這些技術知識點供你們學習免費下載。

結論

應用開發的風格這幾年一直在變化,而微服務變得愈來愈流行。大公司把大型應用拆分紅能夠單獨部署的小型應用,這些小型應用被部署在雲端的容器裏。開源微服務框架Light Java爲這些運行在容器裏的微服務提供了不少特性,它支持設計驅動,開發者只須要把注意力專一在業務邏輯上,剩下的事情能夠由框架和DevOps流程來處理。

相關文章
相關標籤/搜索