Dapr 不是服務網格,只是我長的和他很像

張善友發表於2022-05-08
概述

我們快速看一遍官方文件:https://docs.dapr.io/concepts/service-mesh/#how-dapr-and-service-meshes-compare ,看看 Dapr 的開發團隊是如何看待 Dapr 和 Service Mesh 在產品概念上的差異的,從1.5版本之後Dapr 功能的新增正在朝著標準化/增強重試/超時/斷路器的實現的方向發展。因此,與 Service Mesh 產品的差異似乎在縮小。

  • Dapr 是一種旨在“促進微服務本身的開發”的產品,而不是 Service Mesh。
    • 但是,Dapr 有一些類似於服務網格的特性,例如分散式跟蹤。
  • 由於上述原因,有些用例無法單獨由 Dapr 實現。具體來說,如果你想要A/B測試等的Traffic Splitting功能,你需要配合Service Mesh產品使用。
當我們在Azure 的 AKS 上構建微服務的解決方案時,我們經常會看到關鍵字 Dapr 和 Open Service Mesh(Open Service Mesh是微軟開源的Service Mesh產品) 。兩者都採用了邊車模式, 並且兩者似乎正試圖接近技術上相似的領域。 那麼Dapr 和 Open Service Mesh 的產品理念有何不同?
Dapr 不是Service Mesh 產品

檢視Dapr的官方文件中的 FAQ:Dapr 與 Istio、Linkerd 或 OSM 等服務網格相比如何,明確指出網路領域的問題,例如服務網格產品解決的問題,不是主要目標。 Dapr 的目標是為 “開發人員”構建微服務時建立構建塊

Dapr 不是服務網格。服務網格專注於細粒度的網路控制, 而 Dapr 則專注於幫助開發人員構建分散式應用程式。Dapr 和服務網格都使用 sidecar 模式並與應用程式一起執行。它們確實有一些重疊的功能,但也提供了獨特的好處。有關更多資訊,請閱讀 Dapr 和服務網格概念頁面:https://docs.dapr.io/concepts/service-mesh/

Dapr 的“分散式構建塊”概念與服務網格處理的問題領域有什麼特別不同? 接下來我就詳細說說。

Dapr 文件 : Dapr 和服務網格如何比較

理解“ Service Mesh 關注基礎設施領域/網路,而 Dapr 強調開發人員體驗” 這一點很重要。

  • Service Mesh 感興趣的主要是基礎設施工程,尤其是網路層的通訊管理/操作。
  • Dapr 目標是在解決更多的軟體工程問題。因此,Dapr 的 API 也被設計成可以直接從 應用程式碼中操作,而無需 系統管理員干預。

雖然 Dapr 和服務網格確實提供了一些重疊的功能,但 Dapr 不是服務網格,服務網格被定義為網路服務網格。與專注於網路問題的服務網格不同,Dapr 專注於提供構建塊,使開發人員更容易將應用程式構建為微服務。Dapr 以開發人員為中心,而服務網格則以基礎設施為中心。
在大多數情況下,開發人員不需要知道他們正在構建的應用程式將部署在包含服務網格的環境中,因為服務網格會攔截網路流量。服務網格主要由系統操作員管理和部署,而 Dapr 構建塊 API 旨在供開發人員在其程式碼中明確使用。

Dapr 文件:  Dapr 和 服務網格如何比較

Dapr 和Open Service Mesh 具體功能差異

綜上所述,我們可以將這兩個產品的特性整理如下。

  • Open Service Mesh是一個有Service Mesh 形態的產品。因此,主要興趣是從基礎設施的角度來運營網路。
  • Dapr 旨在使微服務對開發人員來說盡可能簡單,並且只涵蓋從軟體開發角度實現它所需的功能。

Dapr 和 Open Service Mesh 功能之間的具體區別官方文件中檢視。您可以看到流量路由和流量拆分功能超出了 Dapr 的範圍,它屬於Open Servvice Mesh的範圍。

image

如何正確使用Dapr 和 服務網格

接下來出現的問題是 “我應該以什麼標準正確使用 Dapr 和 Open Service Mesh ?”,具體看這個文件內容: FAQ:何時選擇使用 Dapr、服務網格或者兩者兼存

  • 如果您想使用 Dapr 提供的構建塊開發微服務,我們建議僅使用 Dapr。Dapr 也支援分散式跟蹤。
  • 對於“我要加密微服務之間的通訊”的用例, Dapr 只可以處理所有微服務都有 Dapr sidecar 的情況。但是,如果您想加密沒有 Dapr sidecar 的微服務或其他元件,您還需要使用 Service Mesh 產品。
  • 此外,如果你想為 A/B 測試等進行流量拆分,你需要與 Service Mesh 產品整合。
    • 例如,如果您希望使用 Dapr 的一個或多個構建塊,例如狀態管理或釋出/訂閱,並且您正在考慮僅將服務網格用於網路安全或者可觀察性,您可能會發現 Dapr 非常適合並不需要服務網格。
    • 通常,您會使用帶有 Dapr 的服務網格,即必須為所有應用程式加密網路上的流量。例如,您可能在應用程式中僅使用 Dapr 的一部分,而在您的應用程式中未使用 Dapr 的其他服務和程式也需要對其流量進行加密。在這種情況下,服務網格是更好的選擇,很可能您應該在服務網格上使用 mTLS 和分散式跟蹤,並在 Dapr 上禁用它。
    • 如果您需要 A/B 測試場景的流量拆分,您將從使用服務網格中受益,因為 Dapr 不提供這些功能。
      常見問題解答:何時選擇使用 Dapr、服務網格或兩者兼存
總結

我希望上面這些內容對你有幫助,這些內容都來自官方文件中關於Dapr 和服務網格的內容。 Dapr 的真正價值在於抽象了基礎設施層,使原始碼和基礎設施之間的關係鬆耦合/可插拔,使得當前的微服務的開發初期和後期開發,在面對基礎設施的的可變方面更有彈性。

相關文章