首頁»觀點評論»Java應用服務器前途堪憂?

Java應用服務器前途堪憂?

來源:infoq 發布時間:2014-05-22 閱讀次數:

  Java應用服務器曾經是企業級中間件市場中重要的組成部分,但是隨著輕量級微服務理念的發展以及云計算的快速普及,Java應用服務器正在遭遇前所未有的挑戰。近日,來自adesso AG技術咨詢委員會的Eberhard Wolff分享了一份slide,提出了應用服務器已死的觀點,Eberhard此前曾經在SpringSource擔任首席技術專家,而RedHat的Mark Little也在博客上撰文,闡述了未來中間件平臺該如何發展。

  在Eberhard Wolff的slide中,首先分析了傳統的應用服務器所面臨的問題,然后介紹了新的技術發展趨勢,如持續交付和微服務,對應用服務器所帶來的沖擊。在Eberhard Wolff看來,傳統應用服務器的作用主要包括以下四點:

  • 多個應用的容器;
  • 基礎設施;
  • 部署;
  • 監控。

  但是,在這四個方面,應用服務器在提供強大支撐功能的同時,也有許多的不足。

  具體來講,如果在服務器中部署多個應用,那么這些應用會通過ClassLoader機制實現隔離,但這還是不夠的,而且很容易導致難以解決的問題。因為操作系統是以進程為單位進行資源分配的,所以應用服務器無法實現針對應用進行內存、CPU以及文件系統的隔離。應用之間在運行期還是會互相影響,除非Java的虛擬機變成操作系統,否則難以實現完美的隔離。所以,理想的方案是使應用服務器作為單個應用的容器,而不是同時運行多個應用。

  在基礎設施方面,應用服務器提供了兩階段提交、網絡/線程以及API等功能。不過,作者認為兩階段提交會降低應用的效率,并且不能保證一定會成功。在分布式系統中,應該限制使用,因為會影響到可擴展性。應用服務器一般還會提供網絡以及線程的基礎設施,支持線程池和連接池,不過這些可以在應用內部來實現。作為基礎設施所提供的API,如EJB、CDI、JPA以及JSF等,在帶來便利的同時,往往會導致與應用服務器的版本關聯在一起,應用會依賴于應用服務器,在新的服務器推出之前,我們無法使用新的API,除此之外,還可能會出現版本的沖突。應用有時還會將其依賴的庫置于應用服務器之中,這樣的話,就形成了應用與服務器之間的循環依賴,如下圖所示。可以說服務器變成了應用的一部分。

  在部署方面,應用服務器支持多種部署格式,如WAR、EAR以及JAR等等,但是這些格式都無法定義應用的外部依賴,如應用服務器的版本、數據庫等。通常在這個過程中,會使用到deb或RPM這樣完全不同的工具。應用服務器的配置甚至比應用本身的配置還復雜,相對于使用Puppet/Chef編寫的自動化腳本,應用服務器的配置過于繁瑣。對于持續交付來講,我們必須要有大量的部署過程,因此需要簡化部署,并且要使用更為通用的工具。

  應用服務器的監控功能一般是通過JMX提供的,可以使用SNMP等協議進行集成,但是問題同樣在于完全不同的工具鏈(tool chain)。在這個方面出現了一些新的技術和趨勢,如Logs+Logstash/Kibana或Splunk、基于REST或編寫腳本實現監控的功能。

  作者稍后提到了微服務的理念,基于這種理念所構建的軟件是由服務組成的,服務會具有一定的業務含義,服務的(重)部署可以獨立進行,而不是作為一個龐大的整體來進行,服務之間可以通過像REST這樣的方式來進行交互。服務可能會有不同的非功能性需求,所以會需要不同的基礎設施,如異步、傳統的Servlet、Batches、Map/Reduce等,而應用服務器只能提供一種基礎設施。

  基于這種模式,應用能夠以JAR文件的方式進行創建,在這個JAR中包含一個Main類,我們可以自定義基礎設施,如HTTP服務器或Batch。在監控和部署方面,它依賴于標準的部署和監控工具,提供基于REST的監控URL,并且會分析評估日志文件。這種方式能夠帶來一系列的好處,因為它只是一個JAR包,所以更易于部署,我們可以在IDE中調試運行,驗收測試會更為容易,并且可以確保基礎設施與應用是兼容的。作者最后提到了相關的技術,如Spring BootDropwizard

  其實,關于應用服務器已死的觀點,在云理念剛剛普及的時代就曾經出現過,如來自Forrester的首席分析師Mike Gualtieri在2011年就曾經撰文表示應用服務器的泡沫會破滅并建議不要再將金錢花費在WebLogic、WebSphere以及JBoss Application Servers上面了。當時,RedHat的Mark Little曾經專門就這種觀點進行過反駁。最近,Mark Little恰好寫了一篇文章闡述中間件平臺的未來趨勢,在這篇文章中,作者認為我們需要新的框架和模型來構建應用,可適應的中間件平臺應該具有的特性包括:

  • 能適應環境的變化,自動監控和管理;
  • 靈活的線程模型;
  • 所有的應用和服務可以根據需要動態添加;
  • 組件庫;
  • 跟蹤對象和服務的依賴,以便于遷移時,相關的服務和對象能夠保持兼容。

  Mark Little和Eberhard Wolff都提到了新的編程和部署模式,Parallel Universe公司的博客上,最近也連續發表了三篇文章介紹Java的發展趨勢,其中有一篇專門介紹現代Java Web應用的開發與部署,作者也提及了這種新的部署理念。

  現在就說應用服務器已死可能為時尚早,但是服務化、分布式是應用的發展方向,這會對傳統應用服務器的部署、監控等功能提出挑戰。關于這一問題,如果您有新的見解,歡迎與我們分享。

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
买马稳赚秘诀