許多企業(yè)在不斷努力加快開發(fā)速度,減少客戶遇到的宕機時間 。微服務架構是更快地迭代、更高效地擴展和創(chuàng)建適應能力更強的應用程序的唯一途徑。使用微服務構建的應用程序由各種各樣的服務組成,這些服務執(zhí)行不同的功能,而且通常是使用不同語言編寫的。
Java 是一種歷史悠久的語言,一些人會問它在微服務環(huán)境中是否有用。這篇文章將給出 Java 對現(xiàn)代應用程序(包括微服務)仍有很大價值的一些理由。
以下是您應該知道的關于微服務和 Java 的 5 件事:
1.為什么我應該用 Java 編寫微服務?
Java 成為一種流行的語言選擇是有其充分理由的。它是一種強大的語言,擁有多年的運行任務關鍵型應用程序的經驗,并隨著新編程模式的出現(xiàn)而不斷改進。Java 在企業(yè)應用程序中得到普遍應用,培養(yǎng)了一大批擁有 Java 技能的軟件開發(fā)人員。利用現(xiàn)有技能很有意義,甚至從頭創(chuàng)建新應用程序時也是如此。微服務為他們提供了陡峭的學習曲線,而且添加一種新編程語言可能增加風險。它給創(chuàng)建、部署和在生產中管理微服務應用程序的過程引入了更多未知因素。
應用程序的前端通常是使用 JavaScript 創(chuàng)建的(尤其是基于 Web 的應用程序)。后端中常常會使用到 Java,用于獲得經得起實踐檢驗的數據管理。整個編程領域仍有很大的變化空間,但毫無疑問,Java 非常適合編寫微服務。
2.Java EE 在微服務領域為我提供了什么?
Java Platform, Enterprise Edition 或 Java EE 是由社區(qū)推動的企業(yè) Java 應用程序標準。它提供了各種各樣的規(guī)范,受到大量供應商的支持。Java EE 中的許多標準非常適合微服務應用程序:使用 JAX-RS 提供 API,使用 JPA 處理數據,使用 CDI 執(zhí)行依賴注入和生命周期管理,以便能夠更輕松地在應用程序中執(zhí)行測試。
3.我應該如何打包 Java 微服務?
微服務應用程序應包含部署所需的一切資源。在不更改代碼或部署包的情況下,單個不可變的部署包應該能夠從開發(fā)環(huán)境遷移到生產環(huán)境,這明顯背離了傳統(tǒng) Java EE 應用程序的標準。 創(chuàng)建一個 war 文件,然后將它交給運營團隊,讓他們添加應用服務器,這顯然不是微服務最佳實踐。相反,有兩種選擇:已打包服務器或容器。已打包服務器可以是可執(zhí)行的 JAR 或 zip 文件,這無關緊要。該數據包應包含應用程序、任何依賴項和應用服務器。WebSphere Application Server Liberty、Wildfly Swarm 和 Spring Boot 都提供了此選項。第二個選項 是創(chuàng)建一個容器,通常是 Docker 容器。使用 Docker 容器會創(chuàng)建一個將應用程序分離的額外層。它們可部署到本地和云中,在開發(fā)和生產環(huán)境之間實現(xiàn)最大的平等性。
4.用于 Java 開發(fā)中的基于微服務的工具是否存在?
是,在 Java 中開發(fā)微服務時,有許多工具可簡化開發(fā)工作。服務發(fā)現(xiàn)解決方案(比如 Netflix Eureka、Consul 或 Amalgam8)很容易與 Java 微服務關聯(lián)起來。為了提高恢復和容錯能力,Netflix Hystrix 使用了一個 Java 客戶端提供了隔板和斷路器功能。還有其他一些可幫助測試新微服務的不錯工具。您會發(fā)現(xiàn),在測試微服務時使用模擬對象非常有用,JMockit 和 Mockito 簡化了模擬對象的創(chuàng)建。
5.我是否需要在 Java 中編寫所有應用程序?
不需要,您不應該為了使用它而使用它。如果您已經掌握了一些 Java 技能,或者確定微服務的一些功能使用 Java 更容易完成,那么您可以使用 Java。否則,可以挑選適合自己狀況的語言。請保守一點,您應該不想維護一個使用了 10 種不同語言的微服務系統(tǒng),但也不要害怕使用多種語言。要讓您的工作更輕松,可以采用一種通用數據結構(比如 JSON)和 API 文檔工具(比如 Swagger)。您的微服務應采用一種與語言無關的協(xié)議(比如 REST)進行通信,所以它們應始終能完美地協(xié)同工作。
更多信息
如您所見,Java 非常適合微服務是有諸多原因的(本文僅介紹了其中一小部分原因)。 如果您想了解有關的更多信息,或者掌握一些最佳實踐技巧,請持續(xù)關注我們后續(xù)推出的一系列關于 Java 和微服務的文章。