原文
html
進入2016年時間還不是很長,讓咱們回顧下去年年末的一個預言。去年12月,來自C2B2的Steve Millidge 預測 ,2016年將會成爲Java EE微服務年。在必定程度上,這是基於 Steve在JavaOne上的演講 ,他在演講中詳細地討論了這個主題。此外,Steve仍是 Payara 的聯合創始人,Payara的目標用戶也是對微服務感興趣的Java EE開發人員。Steve還認爲,SOA和微服務之間的差異很小,這種觀點咱們之前據說而且報道過。他在視頻中指出:java
「微服務與SOA沒什麼不一樣。它仍是關於SOA」。服務器
固然,如今還存在爭論,由於他的背景和當前的工做重心,Steve可能會發現本身很難保持客觀的態度。不過,早在2014年,微服務還處於起步階段,Adam Bien就描述了 理想的Java EE微服務 :架構
[...]理想的Java EE微服務是一個單[實體控制邊界]組件,在一個WAR包中,部署在單臺服務器/域中。在這種狀況下,開發人員能夠單獨地發佈和從新部署單個組件(又稱微服務)。WAR包之間不可能直接調用方法,所以,WAR包將不得不使用好比JAX-RS來彼此通訊。oracle
咱們在去年年末就微服務、DevOps和Java EE相關內容採訪了Markus Eisele,他詳細論述了本身爲何認爲 Java EE將會在微服務生態圈的發展中扮演重要的角色 。還有一些其餘使用Java EE編寫微服務的方法,包括 TomEE 和 WildFly 。 KumuluzEE是JavaOne 2015 Duke選擇獎的其中一個 獲獎者 ,該框架是一個Java EE微服務框架。該框架的聯合建立者Matjaz Juric解釋說:java-ee
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方法,那麼你多是在編寫微服務。ide
並且,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會在微服務中扮演什麼角色?