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