來自:開源最前線(ID:OpenSourceTop)
地址:https://www.infoworld.com/article/3329944/java/13-java-frameworks-for-rock-solid-microservices.html?upd=1548731121835
曾經的伺服器領域有許多不同的晶片架構和作業系統,經過長期發展,Java的“一次編譯,到處執行”使得它在伺服器領域找到一席之地,成為程式員們的最愛
本文,我們將和大家分享13個可靠的Java微服務架構
1、Spring Boot
Java構建Spring應用程式已經有很長一段時間了,Spring Boot是Spring的一個特定版本,它透過對配置細節的處理,使微服務構建更加簡便。建立Spring Boot旨在自啟動任何型別的Spring專案,而不僅僅是微服務。應用程式完成後,Spring Boot將在web伺服器中混合,並輸出一個JAR檔案,JVM除外。你可以將其視為原始Docker容器。這也是許多負責構建微服務的開發者都非常喜歡Spring Boot的原因。
使用 Spring 開發微服務遵循與 Web 應用相同的 MVC 理念。該框架享有多年Java開發中建立的所有深度連線,包括所有主要和次要資料儲存、LDAP伺服器和Apache Kafka等訊息傳遞工具的整合。還有許多用於維護執行伺服器集合的小特性,比如Spring Vault,這是一種用於維護生產環境中伺服器所需的密碼的工具。所有這些優點都說明瞭為什麼Java程式員多年來一直喜歡Spring Boot的原因。
2、Eclipse MicroProfile
2016年,Java Enterprise社群決定清理Java Enterprise Edition中的內容,以便人們可以使用經典部件構建簡單的微服務。他們去除了大量的庫,但保留了處理REST請求,解析JSON和管理依賴註入的功能程式碼,最終被稱為Eclipse MicroProfile,其特性為快速而簡單。
從那以後,MicroProfile社群制定了一個協議,每季度釋出一個新版本,同時新增新程式碼以保持微服務平穩安全地執行。任何Java EE開發者都會非常熟悉開發過程和程式碼結構,而且還吧配置麻煩給省去了。
3、Dropwizard
當Dropwizard在2011年出現時,Dropwizard框架為開發者提供了一個非常簡單的模型,裡麵包含了許多重要的模組,你可以根據需求新增一些業務邏輯,或者配置其他內容,最後你會發現JAR檔案非常小,並且能夠快速啟動。
Dropwizard最大的限制可能是缺乏依賴註入。如果你希望使用依賴項註入來保持程式碼的整潔和鬆散耦合,則需要自己新增庫,這點和Spring不同,但是現在Dropwizard也支援大多數功能,包括日誌記錄、健康檢查和提供彈性程式碼。
4、WildFly Thorntail
Red Hat的工作人員使用一個靈活的配置工具構建了他們自己的MicroProfile版本。該框架最初被稱為WildFly Swarm,但後來被重新命名為WildFly Thorntail,Thorntail透過指定所需的特性來幫助您建立自己的Maven構建檔案,然後Maven負責組裝所有東西。
Thorntail還將透過掃描程式碼來檢測元件,也可以使用BOM(材料清單)檔案改寫。當它全部執行時,Thorntail將刪除Java Enterprise Edition中不使用的部分,並建立一個很小的JAR檔案,可以使用一個命令進行部署——這是一個非常巧妙的特性,允許Thorntail專案將其稱為Uber-JAR。這是遵循Java Enterprise Edition的另一種傳統方法,它不會保留所有沉重的負擔。
5、Helidon
Helidon去除了Java Enterprise Edition,保留輕量級的、基於servlet的核心,並吸引了大量的粉絲。在Helidon的,開發人員從Netty,並新增程式碼進行路由和錯誤處理。它採用了程式碼的兩個基本模型,即所謂的SE和MP版本。
Node 開發者可能更熟悉Helidon SE,因為其具有由句點連線的函式呼叫。使用JAX-RS的Java程式員則更熟悉Helidon MP。此外,Helidon還集成了一些備受好評的工具,這些都是它能夠吸引大量開發者的原因。
6、Cricket
另外一個用於快速API開發框架的是Cricket。Cricket很小,儘管它包括許多額外的功能,如鍵值資料儲存,以避免連線資料庫和排程程式來控制後臺重覆處理。沒有新增複雜性或其他依賴項,因此很容易將程式碼新增到Cricket並啟動獨立的微服務。
7、Jersey
開發web服務的標準方法之一是RESTful web服務的Java API(又名JAX-RS),這是Jersey框架中實現的通用規範。這種方法主要依賴於使用註釋來指定路徑對映和傳回細節。從引數解析到JSON打包的所有其他內容都由Jersey處理。
Jersey的主要優點是它實現了JAX-RS標準,這個特性非常受歡迎,一些開發人員習慣將Jersey與Spring Boot結合在一起使用。
8、Play
體驗JVM跨語言能力的最佳方式之一是使用Play框架,這是可以與Java或任何其他JVM語言相容的。它的基礎非常現代,具有非同步、無狀態的模型,不會讓試圖跟蹤使用者及其會話資料的執行緒使伺服器過載。還有許多額外的特性可以用來充實網站,比如OpenID、驗證和檔案上傳支援。
Play程式碼庫已經發展了十多年,因此你還會發現類似於對XML的支援的這種古老的功能。play既成熟又輕盈,這種組合還是比較有特色的。
9、Swagger
構建一個API看起來就像編寫一個監聽埠的程式碼一樣簡單,但是Swagger的開發人員不這麼認為。他們已經建立了一個完整的API規範語言OpenAPI,你可以使用它來說明你的API。這似乎是一個額外的步驟,但是Swagger團隊還提供了將該規範轉換為自動化測試、檔案等的程式碼。
Swagger配置檔案中的API很簡單,用於實現介面、記錄介面的,並提供一組工具來測試構建在其下的程式碼,甚至還有一種API治理機制。
Swagger是一個api生態系統,它不侷限於Java。如果你的團隊遷移到Node.js或其他幾十種語言中的任何一種,都有一個Swagger Codegen模組將OpenAPI規範轉換成該語言的實現。
10、Restlet
不同框架之間最大的區別之一是和其他服務或庫的連線數量。Restlet專案提供了更大的特性和連線集合,它已經與JavaMail之類的庫整合,避免微服務需要對某些郵件伺服器使用POP、IMAP或SMTP;為防構建大量文字索引和元資料,還集成了 Lucene 和 Solr。
Restlet中還有很多特性在持續開發。例如,你不需要使用JSON,因為它可以直接處理XML、CSV、YAML和其他一些檔案格式,此外,它還允許使用者從Chrome瀏覽器測試api。
11、Squash
微服務除錯一直是開發人員的一大挑戰,因為這些部件都是鬆散耦合的,並且很難跟蹤透過系統所有層的資料流。透過使用Squash,可以在執行在Kubernetes叢集上的程式碼中設定斷點,然後像本地執行程式碼一樣接收IDE中的所有資料。Squash還集成了 Node.js 和 Python 執行時
12、Telepresence
除錯的另一個選項是使用Telepresence,它可以為遠端Kubernetes叢集上的微服務建立本地代理。在本地版本中,可以在其中設定斷點或執行本地計算機上可進行的任何操作。
13、Zipkin
Zipkin用於記錄各種微服務上的事件,允許開發者收集 Twitter 各個服務上的監控資料,並提供查詢介面。Zipkin 有 Java 等至少六種語言實現版本,因此可處理多語言系統。不少框架已經透過某種形式整合 Zipkin,比如 Spring。