用于微服務(wù)和云原生開(kāi)發(fā)的六大 Java 框架
譯文作為Java程序員,您在使用Java進(jìn)行微服務(wù)和云原生開(kāi)發(fā)時(shí),是否考慮過(guò)該采用哪些框架、庫(kù)和技術(shù),來(lái)協(xié)助創(chuàng)建下一代的Java應(yīng)用呢?雖然您可能已經(jīng)知道了Spring Boot和Spring Cloud是用Java開(kāi)發(fā)微服務(wù)應(yīng)用的領(lǐng)先框架,但實(shí)際上我們還有著諸如MicroNaut、DropWizard、以及Quarkus IO等更多的選擇。我將和您討論六種適合Java開(kāi)發(fā)者的微服務(wù)框架。
由于這些框架大多數(shù)比較新,而且除了配套的文檔和教程外,沒(méi)有太多有關(guān)如何使用它們,進(jìn)行產(chǎn)品級(jí)別微服務(wù)開(kāi)發(fā)的資源,因此我也會(huì)分享一些諸如在線課程、教程、以及書(shū)籍等資源,來(lái)協(xié)助您理解和運(yùn)用這些框架。
什么是微服務(wù)?
在討論微服務(wù)之前,讓我們?cè)囍私庖幌聭?yīng)用架構(gòu)的演變,以及是什么導(dǎo)致了微服務(wù)在軟件開(kāi)發(fā)領(lǐng)域的發(fā)展。
很久以前,我們只需要維護(hù)一個(gè)應(yīng)用程序、一個(gè)基于代碼的應(yīng)用程序、一個(gè)被部署到每臺(tái)機(jī)器上的應(yīng)用程序。例如,跑在Windows上的Word軟件、以及其他PC游戲等。當(dāng)我們需要更多的功能時(shí),只能不斷地將新的功能組件添加到源代碼中。此舉不但會(huì)使得代碼庫(kù)變得臃腫和龐大,而且一旦要添加或更改某項(xiàng)功能時(shí),就需要進(jìn)行大量的回歸測(cè)試。顯然,這不僅拖慢了軟件產(chǎn)品的交付時(shí)間,而且增加了開(kāi)發(fā)的工作量。
對(duì)此,人們開(kāi)始將代碼劃分為不同的模塊,以便程序員可以獨(dú)立地開(kāi)發(fā)、測(cè)試和部署每一個(gè)模塊。Web應(yīng)用就此誕生。Web應(yīng)用的好處在于,我們不需要將整個(gè)應(yīng)用程序部署到客戶端的主機(jī)上,而只需要有一個(gè)瀏覽器,客戶端就可以連接到服務(wù)器上,以獲取所需的任何功能。至此,我們不再需要在同一臺(tái)機(jī)器上部署客戶端和服務(wù)器端了。
當(dāng)然,這種演變還在服務(wù)器端繼續(xù)進(jìn)行。人們開(kāi)始將一個(gè)大型的單體應(yīng)用程序(Monolithic application),分解為多個(gè)獨(dú)立的小型應(yīng)用程序。這就產(chǎn)生了微應(yīng)用。各個(gè)微應(yīng)用可以分別專(zhuān)注于授權(quán)、身份驗(yàn)證、服務(wù)發(fā)現(xiàn)、以及負(fù)載均衡等服務(wù)。我們也可以將它們稱(chēng)為微服務(wù)。
當(dāng)我們將多個(gè)提供不同服務(wù)的微應(yīng)用,連接到每個(gè)應(yīng)用上,以便作為某個(gè)應(yīng)用程序執(zhí)行時(shí),此類(lèi)架構(gòu)便稱(chēng)為微服務(wù)架構(gòu)。那么它有什么好處呢?顯然,與單體應(yīng)用相比,這些微服務(wù)非常小巧,可以便捷地被快速且獨(dú)立地開(kāi)發(fā)、測(cè)試和部署,進(jìn)而改進(jìn)了產(chǎn)品的交付和發(fā)布周期。
同時(shí),它還構(gòu)建了一個(gè)分布式的架構(gòu),您可以在其中將微服務(wù)部署在不同的主機(jī)(當(dāng)然也可以是同一主機(jī))上,以便更好地利用服務(wù)器端的CPU、內(nèi)存和存儲(chǔ)等資源。此外,它還有助于提高可擴(kuò)展性,以滿足快速增加并生成新的服務(wù)實(shí)例的需求。
我們可以參考一下亞馬遜的Prime Day。當(dāng)有大量客戶同時(shí)在線購(gòu)物,并導(dǎo)致亞馬遜網(wǎng)站的流量激增時(shí),您需要通過(guò)創(chuàng)建新的實(shí)例,來(lái)處置這些并發(fā)的請(qǐng)求。當(dāng)然,您并不需要擴(kuò)展諸如產(chǎn)品索引等,與主要結(jié)算業(yè)務(wù)無(wú)關(guān)的其他服務(wù)。
下圖展示了微服務(wù)和單體架構(gòu)之間的主要區(qū)別:
圖片來(lái)源-https://www.educative.io/courses/introduction-microservice-principles-concepts?affiliate_id=5073518643380224
了解了什么是微服務(wù)、以及它的優(yōu)勢(shì)之后,讓我們來(lái)討論六種可用于微服務(wù)和云原生開(kāi)發(fā)的Java框架。
1.??Spring Boot + Spring Cloud??
毋庸置疑,Spring Boot與Spring Cloud的結(jié)合使用,是通過(guò)Java來(lái)開(kāi)發(fā)微服務(wù)的最佳選擇之一。Spring Cloud提供了許多開(kāi)箱即用的特性,例如:服務(wù)發(fā)現(xiàn)和負(fù)載均衡等,都是微服務(wù)架構(gòu)中必需的。同時(shí),它還能夠遵循Netflix的微服務(wù)架構(gòu)。而作為成熟且經(jīng)過(guò)反復(fù)測(cè)試的框架,當(dāng)您遇到困難時(shí),可以通過(guò)其對(duì)應(yīng)的大型技術(shù)社區(qū),來(lái)尋求支持與幫助。
除了其自帶的、最新且全面的文檔,您還可以通過(guò)各種在線資源,例如Udemy上的Spring Boot微服務(wù)相關(guān)課程等,來(lái)深入學(xué)習(xí)Spring Boot和Spring Cloud,進(jìn)而實(shí)現(xiàn)產(chǎn)品的快速交付。在此,我強(qiáng)烈推薦您使用在In28Minutes(一個(gè)GitHub站點(diǎn))上由Ranga Karnam提供的??《用Spring Boot和Spring Cloud玩轉(zhuǎn)微服務(wù)》??課程。這個(gè)19.5小時(shí)的課程是學(xué)習(xí)如何使用Spring Boot去構(gòu)建微服務(wù)的絕佳資源,非常適合初學(xué)者和中級(jí)Java開(kāi)發(fā)人員。
還有我們51CTO學(xué)堂的這門(mén)??《Spring Boot教程:開(kāi)發(fā)小而完整Web項(xiàng)目》??課程,非常值得推薦!
2.??Quarkus??
作為一個(gè)全棧式的Kubernetes原生Java框架,Quarkus專(zhuān)為Java虛擬機(jī)(JVM)和原生編譯而設(shè)計(jì)。通過(guò)提供針對(duì)容器優(yōu)化的Java,它已經(jīng)成為了無(wú)服務(wù)器、云服務(wù)和Kubernetes環(huán)境的高效服務(wù)平臺(tái)。
由于得到了Redhat的支持,因此Quarkus在創(chuàng)建高性能、可擴(kuò)展的Java應(yīng)用程序方面,正在迅速地取得進(jìn)展?;赒uarkus的應(yīng)用通常能夠快速啟動(dòng),這是一個(gè)普遍的關(guān)鍵特性。
許多Java程序員正在嘗試著將Quarkus運(yùn)用到快速和反應(yīng)式微服務(wù)中。如果您想著手學(xué)習(xí)Quarkus,我強(qiáng)烈建議您查看由Udemy上的Quarkus先驅(qū)之一--Antonio Goncalves提供的??《Quarkus入門(mén)》??課程。對(duì)于任何愿意學(xué)習(xí)Quarkus的Java開(kāi)發(fā)人員來(lái)說(shuō),這個(gè)3.5小時(shí)的課程是一個(gè)絕好的起點(diǎn)。
3.??MicroNaut??
這是另一個(gè)基于JVM的現(xiàn)代化全??蚣埽捎糜跇?gòu)建模塊化、易于測(cè)試的微服務(wù)和無(wú)服務(wù)器應(yīng)用。MicroNaut是由OCI創(chuàng)建的。值得一提的是,這家公司創(chuàng)建的另一款產(chǎn)品是Grails,是一個(gè)備受Groovy開(kāi)發(fā)人員喜愛(ài)的流行Web開(kāi)發(fā)框架。目前,Micronaut得到了Java社區(qū)的廣泛認(rèn)可。而隨著Oracle和JetBrains等大公司的持續(xù)支持,MicroNaut可能在不久的將來(lái),成為Spring Boot和Spring Cloud的有力??競(jìng)爭(zhēng)者??。
在技術(shù)方面,MicroaNaut和Spring Framework有著本質(zhì)上的區(qū)別。Spring完全依賴(lài)運(yùn)行時(shí)(runtime)的反射和各種代理,而Micronaut使用編譯時(shí)(compile-time)的數(shù)據(jù)來(lái)實(shí)現(xiàn)依賴(lài)性注入。
MicroNaut的目前版本為2.5。它支持Gradle 6.5和增量編譯,并為微服務(wù)提供更好的響應(yīng)式代碼庫(kù)。如果您想學(xué)習(xí)MicroNaut并需要相關(guān)資源的話,我建議您在Udemy上查看由Daniel Prinz提供的??《學(xué)習(xí)使用Micronaut構(gòu)建Java類(lèi)型的云原生微服務(wù)》??課程。這個(gè)6.5小時(shí)的課程會(huì)引導(dǎo)您從頭開(kāi)始學(xué)習(xí)MicroNaut的各種豐富資源。
4.??DropWizard??
作為另一個(gè)可用于創(chuàng)建RESTful Web服務(wù)和微服務(wù)的強(qiáng)大框架,DropWizard使用諸如Jetty、Jackson和Jersey等流行Java庫(kù),來(lái)更快捷、更輕松地創(chuàng)建高性能的Java應(yīng)用。DropWizard的優(yōu)勢(shì)在于它為配置、監(jiān)控各項(xiàng)指標(biāo)和操作任務(wù),提供了內(nèi)置的支持。
不過(guò),目前可供學(xué)習(xí)DropWizard的書(shū)籍和在線課程并不多。您往往需要查看其配套文檔。在此,我給您推薦Udemy上的??《Dropwizard入門(mén)》??課程。該教程雖然不是最好的,但足以讓您熟悉和上手DropWizard。
5.??MicroProfile??
Eclipse的MicroProfile是一項(xiàng)針對(duì)微服務(wù)架構(gòu),優(yōu)化JavaEE的舉措。它旨在提供一種獨(dú)立于任何供應(yīng)商的規(guī)范,并通過(guò)利用JavaEE來(lái)創(chuàng)建微服務(wù)架構(gòu)。由于該規(guī)范是由專(zhuān)家創(chuàng)建的,并得到了IBM、RedHat和Oracle等組織的支持,因此非常適合于微服務(wù)的開(kāi)發(fā)和部署。
6.??EclipseVert.x??
同樣由Eclipse提供的Vert.x,是另一個(gè)用于開(kāi)發(fā)反應(yīng)式微服務(wù)的輕量級(jí)框架。它不但支持非阻塞(non-blocking)和異步式開(kāi)發(fā)模型,而且允許用戶在Java虛擬機(jī)上運(yùn)行分布式應(yīng)用程序。
與提供單一解決方案的Spring Boot不同,Vert.x并不提供一體化的解決方案,而是提供工具包和構(gòu)建塊,來(lái)方便用戶自行構(gòu)建組件。也正是因?yàn)樗且粋€(gè)工具包,因此它提供了既可以被獨(dú)立使用,又能夠被嵌入到Spring本身的靈活性。
事實(shí)上,以QuarkusIO為代表的許多微服務(wù)框架,都會(huì)使用Vert.x來(lái)滿足TCP和HTTP等低端不安全的調(diào)用需求。如果您想學(xué)習(xí)Vertx并查找其相關(guān)資源的話,那么我還是建議您在Udemy上的查看由Daniel Prinz提供的??《學(xué)習(xí)使用Vert.x來(lái)構(gòu)建反應(yīng)式Java微服務(wù)》??課程。這個(gè)9.5小時(shí)的課程資源會(huì)從Vert.x的基本概念開(kāi)始,引導(dǎo)您進(jìn)行反應(yīng)式微服務(wù)的開(kāi)發(fā)與實(shí)踐。
小結(jié)
綜上所述,雖然大多數(shù)組織都會(huì)選擇使用Spring Boot和Spring Cloud,來(lái)創(chuàng)建他們的RESTful Web服務(wù)和微服務(wù),但您也可以根據(jù)自己的實(shí)際項(xiàng)目需求,選用并學(xué)習(xí)諸如QuarkusIO和Micronaut等更新的替代方案。如您所見(jiàn),上文也針對(duì)每一種框架,為您提供了學(xué)習(xí)它們的實(shí)用在線資源。最后,我既歡迎您通過(guò)發(fā)表評(píng)論的方式,添加更多您認(rèn)為更為實(shí)用的Java微服務(wù)框架,也請(qǐng)與朋友和同事分享本文,并留下寶貴意見(jiàn)。
原文標(biāo)題:Top 6 Java Frameworks for Microservices and Cloud-Native Development,作者:Javin Paul