本系列文章為個人學習 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 託管
- Windows
- Linux
- macOS
- 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"
0 留言