[Dapr] What is Dapr?

Dapr 在 2019 第一次公開時,那時候版本還是 0.1 時,就有留意到,想不到幾年後,不僅進入 CNCF 還變成很多人推薦的框架,所以重新拾回研究一下 Dapr 的架構及如何使用在工作上

為什麼會回來看 Dapr,最主要的原因是目前的工作,系統都是以微服務的形式跑在自架的 K8s 上,一旦到達一個規模整個管理跟實做上要考慮的事情變的相對複雜,而 Dapr 可以降低這部分的工作並以一致的模式套用在不同的語言跟技術框架上

What is Dapr

官網上是這樣子介紹的

APIs for building portable and reliable microservices

Leverage industry best practices and focus on your application’s logic.

image-20221105101325259

從圖片上可以知道 Dapr 是走 sidecar 模式,但好家在他底層是使用 go 實做,執行起來也不會太笨重,並提供簡化不少原系統要處理的東西。而且 Dapr sidecar 之間的溝通是採用 gRPC 的模式來降低整體的負擔,將效能影響降至最低

Dapr 架構

Dapr at 20,000 feet

從這張圖尚可知道,原本的應用程式可透過 HTTP 或 gRPC 的方式與 Dapr 的元件溝通,在這模式下,應用程式間的互動會由 代理人 Dapr 來處理,之後我會說明為什麼我會將其定義成 代理人 的原因

Dapr 提供幾個積木供我們使用 (如下表),讓我們有抽換背後對應的服務 (抽象化)

Building block Description
State management Support contextual information for long running stateful services.
Service invocation Invoke direct, secure service-to-service calls using platform agnostic protocols and well-known endpoints.
Publish and subscribe Implement secure, scalable pub/sub messaging between services.
Bindings Trigger code from events raised by external resources with bi-directional communication.
Observability Monitor and measure message calls across networked services.
Secrets Securely access external secret stores.
Actors Encapsulate logic and data in reusable actor objects.

Dapr building blocks integration

一開始有提到 Dapr 是使用 sidecar 模式與 application 做互動,所以架構會長的像這樣

Sidecar architecture

Hosting Environment

Dapr 的執行環境有分 self-hostedcontainer 模式

Self-hosted sidecar architecture

Kubernetes-hosted sidecar architecture

所以在本機開發環境如果沒有 docker 也還是可以透過 self-hosted 的模式進行開發,不會影響之後的部屬,self-hosted 可透過 Dapr cli 來完成相關的操作 (Dapr CLI installer)

Service Mesh & Dapr

Service Mesh 是另外一個偉大的坑,其負責範圍其實很多,科普一下

服務網格是一個可設定的基礎結構層,內建功能可處理服務對服務通訊、復原、負載平衡和遙測擷取。 它會將這些考慮的責任移出服務,並移入服務網格層。

Dapr 也遵循一樣的模式,所以接下來的問題會是 Dapr 可以取代原本的 service mesh 嗎? 其實 Dapr 可以與原有的 Service Mesh 共存,負責的業務範圍會不太一樣,Dapr 提供系統服務,service mesh 提供服務間的網路溝通

Dapr and Service Mesh together

參考資料