佚名 發(fā)表于:14年07月07日 20:50 [轉(zhuǎn)載] DOIT.com.cn
Java應(yīng)用服務(wù)器前途堪憂?
Java應(yīng)用服務(wù)器曾經(jīng)是企業(yè)級中間件市場中重要的組成部分,但是隨著輕量級微服務(wù)理念的發(fā)展以及云計算的快速普及,Java應(yīng)用服務(wù)器正在遭遇前所未有的挑戰(zhàn)。近日,來自adesso AG技術(shù)咨詢委員會的Eberhard Wolff分享了一份slide,提出了應(yīng)用服務(wù)器已死的觀點(diǎn),Eberhard此前曾經(jīng)在SpringSource擔(dān)任首席技術(shù)專家,而RedHat的Mark Little也在博客上撰文,闡述了未來中間件平臺該如何發(fā)展。
在Eberhard Wolff的slide中,首先分析了傳統(tǒng)的應(yīng)用服務(wù)器所面臨的問題,然后介紹了新的技術(shù)發(fā)展趨勢,如持續(xù)交付和微服務(wù),對應(yīng)用服務(wù)器所帶來的沖擊。在Eberhard Wolff看來,傳統(tǒng)應(yīng)用服務(wù)器的作用主要包括以下四點(diǎn):
多個應(yīng)用的容器;
基礎(chǔ)設(shè)施;
部署;
監(jiān)控。
但是,在這四個方面,應(yīng)用服務(wù)器在提供強(qiáng)大支撐功能的同時,也有許多的不足。
具體來講,如果在服務(wù)器中部署多個應(yīng)用,那么這些應(yīng)用會通過ClassLoader機(jī)制實(shí)現(xiàn)隔離,但這還是不夠的,而且很容易導(dǎo)致難以解決的問題。因?yàn)椴僮飨到y(tǒng)是以進(jìn)程為單位進(jìn)行資源分配的,所以應(yīng)用服務(wù)器無法實(shí)現(xiàn)針對應(yīng)用進(jìn)行內(nèi)存、CPU以及文件系統(tǒng)的隔離。應(yīng)用之間在運(yùn)行期還是會互相影響,除非Java的虛擬機(jī)變成操作系統(tǒng),否則難以實(shí)現(xiàn)完美的隔離。所以,理想的方案是使應(yīng)用服務(wù)器作為單個應(yīng)用的容器,而不是同時運(yùn)行多個應(yīng)用。
在基礎(chǔ)設(shè)施方面,應(yīng)用服務(wù)器提供了兩階段提交、網(wǎng)絡(luò)/線程以及API等功能。不過,作者認(rèn)為兩階段提交會降低應(yīng)用的效率,并且不能保證一定會成功。在分布式系統(tǒng)中,應(yīng)該限制使用,因?yàn)闀绊懙娇蓴U(kuò)展性。應(yīng)用服務(wù)器一般還會提供網(wǎng)絡(luò)以及線程的基礎(chǔ)設(shè)施,支持線程池和連接池,不過這些可以在應(yīng)用內(nèi)部來實(shí)現(xiàn)。作為基礎(chǔ)設(shè)施所提供的API,如EJB、CDI、JPA以及JSF等,在帶來便利的同時,往往會導(dǎo)致與應(yīng)用服務(wù)器的版本關(guān)聯(lián)在一起,應(yīng)用會依賴于應(yīng)用服務(wù)器,在新的服務(wù)器推出之前,我們無法使用新的API,除此之外,還可能會出現(xiàn)版本的沖突。應(yīng)用有時還會將其依賴的庫置于應(yīng)用服務(wù)器之中,這樣的話,就形成了應(yīng)用與服務(wù)器之間的循環(huán)依賴,如下圖所示。可以說服務(wù)器變成了應(yīng)用的一部分。
在部署方面,應(yīng)用服務(wù)器支持多種部署格式,如WAR、EAR以及JAR等等,但是這些格式都無法定義應(yīng)用的外部依賴,如應(yīng)用服務(wù)器的版本、數(shù)據(jù)庫等。通常在這個過程中,會使用到deb或RPM這樣完全不同的工具。應(yīng)用服務(wù)器的配置甚至比應(yīng)用本身的配置還復(fù)雜,相對于使用Puppet/Chef編寫的自動化腳本,應(yīng)用服務(wù)器的配置過于繁瑣。對于持續(xù)交付來講,我們必須要有大量的部署過程,因此需要簡化部署,并且要使用更為通用的工具。
應(yīng)用服務(wù)器的監(jiān)控功能一般是通過JMX提供的,可以使用SNMP等協(xié)議進(jìn)行集成,但是問題同樣在于完全不同的工具鏈(tool chain)。在這個方面出現(xiàn)了一些新的技術(shù)和趨勢,如Logs+Logstash/Kibana或Splunk、基于REST或編寫腳本實(shí)現(xiàn)監(jiān)控的功能。
作者稍后提到了微服務(wù)的理念,基于這種理念所構(gòu)建的軟件是由服務(wù)組成的,服務(wù)會具有一定的業(yè)務(wù)含義,服務(wù)的(重)部署可以獨(dú)立進(jìn)行,而不是作為一個龐大的整體來進(jìn)行,服務(wù)之間可以通過像REST這樣的方式來進(jìn)行交互。服務(wù)可能會有不同的非功能性需求,所以會需要不同的基礎(chǔ)設(shè)施,如異步、傳統(tǒng)的Servlet、Batches、Map/Reduce等,而應(yīng)用服務(wù)器只能提供一種基礎(chǔ)設(shè)施。
基于這種模式,應(yīng)用能夠以JAR文件的方式進(jìn)行創(chuàng)建,在這個JAR中包含一個Main類,我們可以自定義基礎(chǔ)設(shè)施,如HTTP服務(wù)器或Batch。在監(jiān)控和部署方面,它依賴于標(biāo)準(zhǔn)的部署和監(jiān)控工具,提供基于REST的監(jiān)控URL,并且會分析評估日志文件。這種方式能夠帶來一系列的好處,因?yàn)樗皇且粋JAR包,所以更易于部署,我們可以在IDE中調(diào)試運(yùn)行,驗(yàn)收測試會更為容易,并且可以確;A(chǔ)設(shè)施與應(yīng)用是兼容的。作者最后提到了相關(guān)的技術(shù),如Spring Boot和Dropwizard。
其實(shí),關(guān)于應(yīng)用服務(wù)器已死的觀點(diǎn),在云理念剛剛普及的時代就曾經(jīng)出現(xiàn)過,如來自Forrester的首席分析師Mike Gualtieri在2011年就曾經(jīng)撰文表示應(yīng)用服務(wù)器的泡沫會破滅并建議不要再將金錢花費(fèi)在WebLogic、WebSphere以及JBoss Application Servers上面了。當(dāng)時,RedHat的Mark Little曾經(jīng)專門就這種觀點(diǎn)進(jìn)行過反駁。最近,Mark Little恰好寫了一篇文章闡述中間件平臺的未來趨勢,在這篇文章中,作者認(rèn)為我們需要新的框架和模型來構(gòu)建應(yīng)用,可適應(yīng)的中間件平臺應(yīng)該具有的特性包括:
能適應(yīng)環(huán)境的變化,自動監(jiān)控和管理;
靈活的線程模型;
所有的應(yīng)用和服務(wù)可以根據(jù)需要動態(tài)添加;
組件庫;
跟蹤對象和服務(wù)的依賴,以便于遷移時,相關(guān)的服務(wù)和對象能夠保持兼容。
Mark Little和Eberhard Wolff都提到了新的編程和部署模式,Parallel Universe公司的博客上,最近也連續(xù)發(fā)表了三篇文章介紹Java的發(fā)展趨勢,其中有一篇專門介紹現(xiàn)代Java Web應(yīng)用的開發(fā)與部署,作者也提及了這種新的部署理念。
現(xiàn)在就說應(yīng)用服務(wù)器已死可能為時尚早,但是服務(wù)化、分布式是應(yīng)用的發(fā)展方向,這會對傳統(tǒng)應(yīng)用服務(wù)器的部署、監(jiān)控等功能提出挑戰(zhàn)。關(guān)于這一問題,如果您有新的見解,歡迎與我們分享。
公司簡介 | 媒體優(yōu)勢 | 廣告服務(wù) | 客戶寄語 | DOIT歷程 | 誠聘英才 | 聯(lián)系我們 | 會員注冊 | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.