天天看點

2016年會成為Java EE微服務年嗎?

進入2016年時間還不是很長,讓我們回顧下去年年底的一個預言。去年12月,來自c2b2的steve millidge預測,2016年将會成為java ee微服務年。在一定程度上,這是基于steve在javaone上的演講,他在演講中詳細地讨論了這個主題。此外,steve還是payara的聯合創始人,payara的目标使用者也是對微服務感興趣的java ee開發人員。steve還認為,soa和微服務之間的差别很小,這種觀點我們以前聽說并且報道過。他在視訊中指出:

“微服務與soa沒什麼不同。它還是關于soa”。

當然,現在還存在争論,因為他的背景和目前的工作重心,steve可能會發現自己很難保持客觀的态度。不過,早在2014年,微服務還處于起步階段,adam bien就描述了理想的java ee微服務:

[...]理想的java ee微服務是一個單[實體控制邊界]元件,在一個war包中,部署在單台伺服器/域中。在這種情況下,開發人員可以單獨地釋出和重新部署單個元件(又稱微服務)。war包之間不可能直接調用方法,是以,war包将不得不使用比如jax-rs來彼此通信。

我們在去年年底就微服務、devops和java ee相關内容采訪了markus eisele,他詳細論述了自己為什麼認為java ee将會在微服務生态圈的發展中扮演重要的角色。還有一些其他使用java ee編寫微服務的方法,包括tomee和wildfly。kumuluzee是javaone 2015 duke選擇獎的其中一個獲獎者,該架構是一個java ee微服務架構。該架構的聯合建立者matjaz juric解釋說:

kumuluzee是第一個使用标準java api的微服務架構。微服務架構的重點是将應用程式開發成服務并将這些服務單獨部署;沒有一個架構提供自動化部署和配置,是不可能使用java ee實作真正的微服務架構的。

讓我們看一些人們如何看待微服務和java ee的其他例子,這會非常有趣,因為有些人嚴格來講并不屬于傳統的java ee領域。例如,早在2014年,alex soto就論述了為什麼java ee和rxjava是一個很棒的方案。不過,并不是每個人都認可使用java ee能使開發人員采用微服務。正如rick hightower所說的那樣:

如果你将一個war檔案部署到一個java ee容器,那麼你很可能不是在做微服務開發。如果你在一個容器或ear檔案中包含超過一個war檔案,那麼你肯定不是在做微服務開發。如果你将服務部署為ami或docker容器,而且你的微服務有一個main方法,那麼你可能是在編寫微服務。

而且,rick也不認為微服務與soa相同:

事實上,它們在許多方面是完全相反的。例如,soa往往采用wsdl,後者是一種非常嚴格的、強類型的服務端點定義方式。wsdl和xml模式中所有的未知量都來自xml。

當然,我們已經多次讨論過,soa和web service常常沒有關系。不過,rick及其他一些人确信,java ee太過臃腫或者說笨拙,以其為基礎建構微服務并不合适。jeppe cramon認為,java ee之是以是一個糟糕的基礎還有更為根本的原因:

如果我們将兩路(同步)通信與小/微服務結合使用,并根據比如“1個類=1個服務”的原則,那麼我們實際上回到了使用corba、j2ee和分布式對象的20世紀90年代。遺憾的是,新生代的開發人員沒有使用分布式對象的經驗,是以也就沒有認識到這個主意多麼糟糕,他們正試圖重複曆史,隻是這次使用了新技術,比如用http取代了rmi或iiop。

如果微服務和soa密切相關,那麼可能會有一種觀點,就是微服務可以像soa那樣采用一種技術無關的方式。你認為呢?2016年會成為java ee微服務年嗎?如果有的話,java ee會在微服務中扮演什麼角色?

本文轉自d1net(轉載)