本系列文章為個人學習 Dapr 筆記,也提供給有興趣的朋友參考,若有錯誤或任何建議,也請各位前輩不吝提出。


從過去到現在,建構分散式應用程式 (Distributed applications) 不是一件容易的事情,雖然雲端服務與邊際運算相當方便,但要在短時間建構出可用的分散式應用程式並不太可能,更不用說跨語言與跨平台。 Distributed Application Runtime 是一個支援多雲端平台、多語言的 Runtime,讓開發人員可以輕鬆建構出具有彈性、狀態管理、秘密管理、中間套件與可監控的微服務應用,並提供最佳實踐,進而降低維護負擔。

目前 Dapr 提供 7 個建構模組,每個建構區塊皆可獨立運作,如下圖所示:





主要功能包含:

功能名稱 說明
服務調用
Service invocation
彈性的 Service-to-Service 調用,包含重試遠端服務
狀態管理
State Management
以 Key/Value 方式建立狀態管理,讓開發人員可以輕鬆地讓長時間執行、高可用性的 有狀態/無狀態服務 一起在應用程式中執行
發布訂閱
Pub & Sub
發布與訂閱事件
資源綁定 
Resource Bindings
以事件驅動 (Event Driven) 為基礎,透過 Trigger 與 資源綁定,可以從任何外部資源接收或發送事件
Actors 有狀態與無狀態物件的 Pattern,藉由方法狀態的封裝,可以簡化併發(Concurrency)。在 actor 執行時提供許多功能,包含啟用/停用 actor 的併發、狀態與生命週期管理 與 計時器與提醒(以喚醒 Actor)
觀察
Observability
Dapr 可以發送出 metrics, logs, 與 trace 來監控 Dapr 本身與使用者的應用程式。支援分散式追蹤,使用標準的 W3C Trace Context 與 Open Telemetry (可發送至不同監控工具),讓 Production 環境的診斷更加容易
秘密管理 
Secret Management
 Secret Management API 整合地端與雲端秘密儲存,讓應用程式可以取得並使用




Sidecar 架構

Dapr 會以 Sidecar 架構方式對外公開 API,在您的應用程式內不需要加入任何 Dapr 相關程式碼,讓整合變得更加容易。也因為透過 Sidecar 做了隔離,也提高可擴充性。




Dapr Sidecar 的架構下,不同服務皆透過 Dapr 進行互動,通訊過程中以 HTTP/gRPC (mTLS 加密) 方式進行。在此架構下也建議應用程式與自己的 Dapr 進行溝通。從下圖可知,每個服務在互動前會透過 name resolution component 進行名稱解析,進而找到服務 B 位置。





託管環境 (Hosting environments)

Dapr 可以在多種環境執行,包含 自託管 (self-hosted mode) 於不同作業系統Kubernetes 託管

  1. Windows
  2. Linux
  3. macOS
  4. Kubernetes


在自託管模式下,Dapr 會獨立執行一個 Sidecar 程序,讓您的服務可以透過 HTTP 或 gRPC 呼叫該程序。每個執行中的服務皆有個 Sidecar 程序用來設定 state store、pub/sub、binding component 與其他的 building blocks。




在 Kubernetes 託管環境中,Dapr 會作為 Sidecar Container 執行,並且與 Application Container 在同一個 Pod 內。dapr-sidecar-injector 與 dapr-operator 提供非常好的整合,將 dapr 作為 Sidecar Container 與應用程式一起啟動在同一個 Pod 內,並為 Cluster 內部署的 Dapr Component 提供更新通知。dapr-sentry 是一個服務認證中心,提供 Dapr Component 之前 TLS 資料加密服務。





語言與框架支援

目前支援的語言與框架狀態如下表,截至 2021-Dec-11 為止,可以看見 C++ 與 Rust 正在開發中。也呼應前文的介紹, Dapr 支援多種程式語言與誇 Web 框架。





自我託管環境安裝 Dapr (Windows) 

雖然 Dapr 可以使用 slim 模式而不需要仰賴 Container,但官方建議使用 Docker 做為開發環境,會有比較好的體驗。而這種安裝方式只有 Service invocation 可以使用,無其他 building block 可以使用。


前置條件:安裝 Docker Desktop for Windows,若您想要在 Azure 上使用 Windows 10 安裝 Docker,可以參考這篇文章 如何在 Azure Windows 10 上安裝 Docker Desktop for Windows


步驟 1. 以管理者權限開啟 PowerShell,輸入下列指令

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"





步驟 2. 將 c:\dapr  加入環境變數 Path 設定,操作步驟如下圖所示:




步驟 3. 關閉原有 PowerShell,重新以管理者身分開啟 PowerShell,輸入指令 dapr。若成功安裝,則會顯示下面畫面 (指令說明)




步驟 3. 第一次使用 dapr 請輸入 dapr init 進行初始化,會預設在 使用者資料夾\.dapr 下建立相關設定




步驟 4. 輸入 dapr --version,出現版本號碼,即表示整體安裝與設定已經完成




步驟 5. 您可以輸入 docker ps,即會看見 dapr 幫您建立了 Redis、Placement 與 Zipkin 服務,Dapr 將透過這些服務建構 building block。




步驟 6. 您可以開啟 使用者\.dapr 檢視內容,後續會有很多工作需要在此檢視與完成





參考資料

1. Dapr Docs (所有資料與流程圖皆參考官方網站,若有任何不妥請告知)