Java輕量微服務框架:Java-micro

banq發表於2017-02-09
Java-micro是一個輕量框架,允許開發人員輕鬆地在Java中開發微服務。 它是在Sixt開發的,花費2016整個年度時間,旨在推動建立一個新的平臺。 該平臺的起點支援兩種主要語言,即Golang和Java。

可以使用Go Micro作為Go服務的框架,該框架的主要關注點是與Micro相容。 這兩種語言的框架在能力和方法上有點分歧,但它們確實相容。

Micro框架處理了許多關注點,以便開發人員可以簡單地專注於他的服務的功能。

特點:
1. 可以簡單地只需將服務構建為docker容器或fat jar即可。
2. 可從環境,命令列和外部配置服務進行配置。
3. 標準化的json日誌。
4. 標準化測量指標報告
5. 用於呼叫其他服務上的端點並處理來自它們的錯誤的簡單介面。
6. 客戶端負載平衡器
7. 簡單的服務介面支援健康檢查。
8. 資料庫遷移內建。
9. 使用kafka簡化事件處理。
10. 可插入服務登錄檔註冊和發現服務例項。
11. 與Go Micro相容,允許選擇實現語言。
12. Guice依賴注入,以方便實現和測試場景。
13. 元件來建立服務整合測試場景。

服務註冊器
服務登錄檔可以和不同的後端(consul等)整合,其主要目標是為每個服務例項(可能是一個匿名的IP地址和隨機埠上)註冊,以便其他例項可以定位該服務例項。 它也是可擴充套件的。 服務資訊包含特殊格式的標籤,其包含關於每個端點的請求和響應訊息的格式以及其他標籤的資訊。

客戶端負載平衡器
在RpcClient的表面後面有一個客戶端負載平衡器。 這與服務註冊器進行互動,以跟蹤服務想要與之互動的服務的例項,跟蹤它們的健康狀態以便知道例項是否應該接收請求,並且跟蹤每個rpc呼叫的響應結果,以便維護“斷路器“功能,從而限制對非健康服務例項的暴露。

RpcClient和錯誤處理
為了允許服務呼叫其他服務,支援輕鬆建立RpcClient。 RpcClient是抽象另一個服務的rpc端點的物件。可以使用RpcClientFactory建立RpcClient。一旦有了RpcClient,呼叫另一個服務端點就像使用protobuf請求訊息呼叫callSynchronous方法(未來版本的框架也將支援非同步呼叫)一樣簡單,並且它將返回protobuf響應訊息。

超時策略、重試策略和錯誤處理都由客戶端處理。預設情況下,我們說如果響應是可重試的,預設的重試策略應該是重試失敗的請求一次。在將來的版本中,我們將新增對時間預算的支援,其中服務的客戶端可以設定允許為整個請求提供服務的時間。現在,我們有一個預設超時為1000ms的靜態策略,並且可以根據客戶端進行自定義。

RpcCallException類定義了所有的異常類別,它們的預設可檢索設定,以及生成的HTTP狀態程式碼(使用HTTP傳輸時)。當一個服務呼叫另一個服務(客戶端呼叫伺服器)時,如果伺服器在處理響應期間丟擲異常,則將該異常透明地傳輸回客戶端,並可以在客戶端重新丟擲(忽略此處的重試方面)。

健康檢查
每隔幾秒鐘,服務例項的執行狀況將報告給服務註冊器外掛。使用註釋,支援服務開發人員輕鬆掛鉤到健康檢查,以將服務例項標記為不合理。還有一個介面可以立即更改例項的執行狀況。

配置處理
如果需要配置服務中的任何元件,它可以簡單地獲取注入到其中的ServiceProperties物件,並從中請求配置屬性。屬性位於三個位置:命令列,環境變數和配置外掛。它們以此順序應用。具有與後來源不同的值的相同屬性將覆蓋較早的源。配置外掛提供了進行長輪詢的能力,以便每個服務可以從任意源獲得對配置更改的實時更新。有用於服務元件的鉤子以獲得配置改變的實時通知。

記錄
有標準化的日誌記錄。日誌記錄是json物件,標記可用於在這些物件上動態建立屬性。日誌格式可以完全自定義。

測量指標
存在標準化的度量處理。這對Sixt的基礎設施非常重視,並且使用以特定格式格式化的度量併傳送到流入代理以報告回中心influxdb群集的度量。指標報告可插入,以支援任何所需格式的報告指標到任何所需的目的地。

卡夫卡活動
有很多工廠/建設者可以輕鬆地建立Kafka主題的釋出商和訂閱者。

輸出
可以構建一個影子jar(fat jar - 包括所有依賴),或一個docker映象。可以使用陰影jar進行開發人員測試。影子jar也是docker映象任務的依賴。要在偵錯程式中啟動服務,請使用JettyServiceBase作為主類。

資料庫遷移
目前支援Flyway資料庫遷移,它支援許多不同的SQL資料庫。這種支援擴充套件到仔細控制服務生命週期和健康檢查。未來版本應支援DynamoDB例項的基本遷移支援。

依賴注入
依賴注入在java-micro中被大量使用。它嚴格支援Guice。

服務整合測試
我們在微服務專案中大量使用Sixt的自動化。為了支援這一點,框架給予開發人員自動化服務整合測試的能力。這意味著核心基礎架構依賴(例如,在一個服務上,這是consul,postgres,zookeeper和kafka),並且服務本身作為docker-compose下的容器啟動。另外,為了消除由於為每個其他服務依賴(及其依賴性等)啟動容器而引起的問題,存在一個稱為ServiceImpersonator的類,它可以用作服務登錄檔中可用的完整服務模擬,並提供真正的rpc請求。開發人員可以對映請求和響應,而不是為這些請求提供服務的例項。

可以使用設定'rpcClientRetries'覆蓋預設RpcClient重試策略(1)。可以使用設定'rpcClientTimeout'覆蓋預設RpcClient超時策略(1000ms)。


GitHub - Sixt/java-micro: Lightweight framework fo

相關文章