TOP 13大最熱開源微服務Java框架

weixin_33807284發表於2019-01-04

本文列舉了13大可在JVM上構建可靠輕量級微服務的Java框架

經過長期發展,Java最終在伺服器領域找到一席之地,不同晶片架構和作業系統對“一次編寫,到處執行”的承諾很感興趣。與此同時,JavaScript一直在挑戰Java的地位,前者因為高吞吐量和速度快接管了大批網路流量。Node.js不僅提高了速度和資源效率,還簡化了客戶端和伺服器執行程式碼的複雜度。

儘管競爭激烈,許多負責微服務架構開發的團隊依舊在繼續使用Java,這可能有多方面原因,比如Java經過多年測試,Sun建立了穩定的虛擬機器,Oracle大力培養和支援,使用者使用習慣等。

本文列舉了Java開發人員正在使用的13大開源專案,這些框架構成各地微服務架構基礎。

Spring Boot

Java一直在構建Spring應用程式,Spring Boot是Spring的特定版本,通過對配置細節進行處理,Spring Boot可以自動化微服務配置過程,其建立是為了自啟動所有型別Spring專案,而不僅僅是微服務。一旦應用程式完成,Spring Boot會混合在Web伺服器中,併發出JAR檔案,可以想象成原始Docker容器。

使用Spring開發微服務遵循與Web應用相同的MVC理念。該框架享有多年Java開發所構建的深層連線,包括所有主要和次要資料儲存,LDAP伺服器以及Apache Kafka等訊息傳遞工具整合,眾多維護執行伺服器集合的小功能,比如Spring Vault,維護生產伺服器所需密碼等。

Eclipse MicroProfile

2016年,Java Enterprise社群決定清除Java Enterprise Edition中的部分內容,以便使用者可使用經典部件構建簡單微服務。在去掉大量庫之後,社群保留了處理REST請求、解析JSON和管理依賴注入等功能,最終版本被稱為Eclipse MicroProfile,其特點是快速且簡單。

從那時起,MicroProfile社群就制定了一個協議,“每季度釋出一次新版本,同時新增新程式碼以保持微服務平穩安全執行”。對於使用Java EE的人來說,開發過程和程式碼結構將非常熟悉,但無休止的配置麻煩已被去除。

Dropwizard

2011年,Dropwizard問世並開啟Java Enterprise開發人員的視野,其提供非常簡單的開發模型,使用者可新增業務邏輯,並根據慣例配置其他內容。整個JAR檔案非常苗條,並且可以快速啟動。

Dropwizard的最大限制可能是缺乏依賴注入,如果想使用依賴注入保持程式碼乾淨和鬆散耦合,使用者需要自己新增庫。與Spring不同,沒有Dropwizard方法可以做到這一點。但是,Dropwizard支援大多數功能,比如日誌記錄、健康檢查和提供彈性程式碼。

WildFly Thorntail

Red Hat使用者使用靈活的配置工具構建MicroProfile版本,該框架最初被稱為WildFly Swarm,隨後被重新命名為Thorntail。只需在Thorntail上指定需要功能,使用者即可建立Maven構建檔案,然後由Maven負責組裝一切。

Thorntail通過掃描程式碼檢測主要元件,也可使用BOM檔案覆蓋。全部執行時,Thorntail將刪除不被使用的Java企業版並建立小型JAR檔案,可以使用命令部署。這是另一種遵循Java企業版傳統方法,而不保留沉重包袱的框架。

Helidon

Helidon架構剔除了Java Enterprise Edition,保留基於servlet的輕量級核心。在Helidon中,開發人員可使用Netty並新增程式碼進行路由和錯誤處理。它採用兩種基本程式碼模型,即SE和MP版本。

Node.js程式設計師會對Helidon SE非常熟悉,因為其具有由句點連線的長鏈函式呼叫。對於使用JAX-RS的Java程式設計師而言,Helidon MP看起來會很熟悉,Helidon整合了一些備受好評的工具,用於檢查伺服器執行狀況或通過微服務跟蹤資料流。

Cricket

Cricket是一個快速API開發框架,雖然小,但包含相對豐富的功能,比如鍵值資料儲存,以節省連線資料庫和排程程式,控制重複的後臺處理。沒有其他依賴項增加複雜性或鎖定,因此將程式碼新增到Cricket並啟動獨立微服務非常容易。

Jersey

開發Web服務的標準之一是用於RESTful Web服務的Java API(又名JAX-RS),這是一個已在Jersey框架中實現的通用規範。該方法在很大程度上取決於使用註釋來指定路徑對映和返回詳細資訊。解析引數和打包JSON其他內容,Jersey均可處理。

Jersey的主要優點是實現JAX-RS標準,部分開發人員也會將Jersey和Spring Boot結合在一起使用。

Play

體驗JVM跨語言功能的最佳方式之一是用Play框架,這是與Java或其他JVM語言連結的Scala程式碼。該程式碼非常現代,具有非同步、無狀態模型等,不會使伺服器過載,沒有無休止的執行緒試圖跟蹤使用者及會話資料。Play有一些額外功能可用於充實網站,比如OpenID、驗證和檔案上傳支援。

Swagger

構建API可能看起來像編寫偵聽埠並提供答案的程式碼一樣簡單,但Swagger開發人員不會同意此說法。他們建立了名為OpenAPI的完整API規範語言,Swagger團隊提供將此規範轉換為自動化測試和文件等的程式碼。

Swagger配置檔案對API非常簡單,可用於實現並記錄介面行為,提供工具測試在其下構建的程式碼,此外,提供API治理機制。Swagger是API的生態系統,並且不侷限於Java。如果團隊轉移到Node.js或其他語言,則會有Swagger Codegen模組等待將OpenAPI規範轉換為該語言的實現。

Restlet

框架之間的較大差異之一是與其他服務和庫之間的連線數。Restlet是可提供最大功能和連線集合的專案之一。為防微服務對郵件伺服器接收POP,IMAP或者SMTP, Restlet整合了JavaMail庫;為防構建大量文字索引和後設資料,Restlet整合了Lucene和Solr。

Restlet不需要使用JSON,因為程式碼可以處理XML、CSV、YAML等多種檔案格式,還可獲得用於構建響應模板的多個不同選項。此外,Restlet客戶端允許在Chrome瀏覽器測試API。

Squash

因為部件鬆散耦合且很難跟蹤通過系統所有層的資料流,因此除錯微服務一直是個難題。Squash允許在Kubernetes叢集執行程式碼中設定斷點,在IDE接收所有資料,就好像本地執行程式碼一樣。Squash還整合了Node.js和Python執行時,以防微服務集合沒有使用Java程式碼。

Telepresence

Telepresence是另一個除錯選擇,可為遠端Kubernetes叢集微服務建立本地代理,對此服務的呼叫將轉移到本地,可以在其中設定斷點或執行本地計算機上可進行的任何操作。

Zipkin

Zipkin用於在微服務上記錄並關聯事件,以便在問題通過機器集合時進行隔離和研究。Zipkin有Java等至少六種語言實現版本,因此可處理多語言系統。不少框架已經通過某種形式整合Zipkin,比如Spring。

參考連結:
https://www.infoworld.com/article/3329944/java/13-java-frameworks-for-rock-solid-microservices.html

相關文章