當前位置: 華文星空 > 汽車

springboot+sidecar+kubernetes 能否取代springcloud體系?

2020-10-22汽車

在講能不能替換之前,我們先看看 Spring Cloud 是什麽

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。Spring Cloud並沒有重復制造輪子,它只是將各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,透過Spring Boot風格進行再封裝遮蔽掉了復雜的配置和實作原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包。

我們可以看出,Spring Cloud 是一套微服務框架,和部署形態無關,事實上,你的整個Spring Cloud 是完全可以部署到Kubernetes中。

然後我們再看下, sidecar+kubernetes 架構 是否就是Istio之類的Service Mesh

我覺得包括Service Mesh,但絕不僅於此。sidecar+kubernetes 架構 真正應該是mecha架構。如下圖:

透過上圖我們可以清晰看出,未來的sidecar 不僅僅包括envoy,同時包括其他公共業務邏輯的模組,例如dapr。

那麽接下我們看看能不能完全取代?

首先我們看看Istio等Service Mesh能解決什麽?

透過負載均衡、服務間的身份驗證、監控等方法,Istio 可以輕松地建立一個已經部署了服務的網路,而服務的程式碼只需很少更改甚至無需更改。透過在整個環境中部署一個特殊的 sidecar 代理為服務添加 Istio 的支持,而代理會攔截微服務之間的所有網路通訊,然後使用其控制平面的功能來配置和管理 Istio,這包括:

  • 為 HTTP、gRPC、WebSocket 和 TCP 流量自動負載均衡。
  • 透過豐富的路由規則、重試、故障轉移和故障註入對流量行為進行細粒度控制。
  • 可插拔的策略層和配置 API,支持存取控制、速率限制和配額。
  • 集群內(包括集群的入口和出口)所有流量的自動化度量、日誌記錄和追蹤。
  • 在具有強大的基於身份驗證和授權的集群中實作安全的服務間通訊。
  • 我們可以看出,Service Mesh 已經提供了大部份Spring Cloud 提供的功能了。諸如服務發現註冊、配置中心、負載均衡、斷路器、數據監控等。

    但是訊息匯流排之類的偏業務的功能,Service Mesh 並不能解決。此時Dapr出場了。

    Dapr是一個開源,可移植的,事件驅動的執行時,使開發人員可以輕松構建在雲和邊緣上執行的彈性,微服務架構的無狀態和有狀態應用程式。 Dapr包含所有程式語言和開發人員框架,並簡化了構建應用程式(例如電子商務範例)的過程。

    Dapr 提供了一些常用的業務相關的功能塊。比如:

  • 服務呼叫 - 彈性的服務到服務呼叫使方法呼叫(包括重試)可以在支持的托管環境中執行的任何遠端服務上進行。
  • 狀態管理 - 透過對鍵/值對的狀態管理,可以輕松地編寫長期執行,高可用的有狀態服務以及同一應用程式中的無狀態服務。狀態儲存是可插拔的,並且可以包括Azure Cosmos或Redis,以及元件路線圖上的其他內容(例如AWS DynamoDB)。
  • 在服務之間釋出和訂閱訊息傳遞 - 采用事件驅動的體系結構解決服務之間釋出事件和訂閱主題,以簡化水平可伸縮性並使它們能夠應對故障。
  • 事件驅動的資源繫結 - 資源繫結和觸發器透過在事件驅動的體系結構上進一步構建規模,從而透過從任何外部資源(例如資料庫,佇列,檔案系統,blob儲存,webhooks等)接收事件或向其發送事件來實作規模和彈性。例如,可以觸發程式碼透過Azure EventHub服務上的訊息,然後將數據寫入Azure CosmosDB。
  • 虛擬atcor - 種無狀態和有狀態物件的模式,透過方法和狀態封裝使並行變得簡單。 Dapr在其虛擬actor執行時中提供了許多功能,包括並行,狀態,用於actor啟用/停用的生命周期管理以及計時器和提醒以喚醒actor。
  • 看到這裏,我們基本上可以得出,Dapr 側重於業務功能。

    所以 sidecar+kubernetes 形態的mecha架構完全可以取代Spring Cloud。 而且具備更多優勢:

  • 更加雲原生,和kubernetes結合更好。
  • 業務程式碼無需整合sdk,這樣決定了sdk升級會更加方便,降低了耦合。