1. 程式人生 > 其它 >手把手教你學Dapr - 2. 必須知道的概念

手把手教你學Dapr - 2. 必須知道的概念

Sidecar 邊車

Dapr API提供Http和gRPC兩種通訊方式。

執行方式則可以是容器也可以是程序(Windows開發推薦使用Self Hosted,後續會解釋)。

這樣的好處是與執行環境無關,且獨立執行不需要應用包含Dapr執行時的程式碼。只需要通過SDK整合即可,這使得Dapr與應用的邏輯分離。

Building blocks 構建塊

官方解釋:可通過標準HTTP或gRPC api訪問的模組化最佳實踐

通俗一點來說,就是API

目前支援的構建塊如下,但1.5很快會出一個新的Configuration API(從這個新的API又印證了構建塊的本質),由阿里-敖小劍牽頭整理的

Github Issue:

https://github.com/dapr/dapr/issues/2988

這個提案很長,很曲折。仔細看會發現中外開發大環境下的一些思想碰撞。微軟相對保守,阿里相對激進但也更務實。最終長達幾個月的激烈討論下定版。

期間本人也有幸與阿里-敖小劍阿里-儀式(Layotto的研發同學,Layotto相容Dapr協議,是螞蟻在做)開過語音會議一起聊過對於Configuration API的一些設計問題。

  • 服務呼叫

  • 狀態管理

  • 釋出訂閱

  • 繫結

  • Actor(這個不建議翻譯回中文)

  • 可觀測性

  • 安全

Components 元件

官方解釋:被用於構建塊和應用程式的模組化功能

Dapr 使用模組化設計,將功能作為元件來提供。 每個元件都有介面定義。 所有元件都是可插拔的,因此您可以將元件換為另一個具有相同介面的元件。

結合構建塊來看,元件有介面定義。而構建塊則通過介面將元件的功能串聯起來

基於對Dapr設計的理解,我們的MASA Framework也定義出了 BuildingBlocks 和 Contrib,與dapr會有些許不同

原因如下:

  1. 由BuildingBlocks定義標準、串業務流程

  2. 讓Contrib變成我們的最佳實踐,並允許開發重新定義BuildingBlocks的具體實現,在保證功能完整的前提下提供更符合業務場景的功能又有參考程式碼

  3. 聚焦核心程式碼穩定性,提供單元測試覆蓋率保障,共享大眾智慧

元件與構建塊並不是一一對應的,元件可以被不同的構建塊複用,比如Actor構建塊內的狀態管理也是用的狀態儲存元件

  • 狀態儲存

  • 服務發現

  • 中介軟體

  • 釋出訂閱代理

  • 繫結

  • 金鑰儲存

Configuration 配置

官方解釋:變更Dapr Sidecar或全域性Dapr系統服務的行為

配置定義和部署形式為YAML檔案

在官方文件的Component sepcs可以看到每個元件提供了多少種實現,每個實現特性支援情況

除此之外不同元件的配置檔案格式也是應有盡有

官方文件對於元件配置的講解非常詳細,這裡舉個例子,Redis狀態管理的配置檔案格式

你需要變更的部分已經用<*>和 # * 做了標記

參考自:https://docs.dapr.io/reference/components-reference/supported-state-stores/setup-redis/

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: <HOST>
- name: redisPassword
value: <PASSWORD>
- name: enableTLS
value: <bool> # Optional. Allowed: true, false.
- name: failover
value: <bool> # Optional. Allowed: true, false.
- name: sentinelMasterName
value: <string> # Optional
- name: maxRetries
value: # Optional
- name: maxRetryBackoff
value: # Optional
- name: ttlInSeconds
value: <int> # Optional

Observability 可觀測性

官方解釋:通過跟蹤、指標、日誌和健康狀況監視應用

在構建應用程式時,瞭解系統如何執行是運維的一個重要部分——這包括有能力觀測應用程式的內部呼叫,評估其效能並在發生問題時立即意識到問題

這對任何系統都是一種挑戰,而對於由多個微服務組成的分散式系統來說更是如此

分散式跟蹤

配置傳送跟蹤資料,輕鬆整合多個監控後端

OpenTelemetry collector

配置OpenTelemetry收集器,使用支援OpenTelemetry的監控後端

Dapr Sidecar和系統服務的可觀測性

配置收集Dapr Sidecar和相關服務的指標和日誌

Security 安全性

Dapr 用於加密傳輸中資料的安全機制之一是 相互認證(mutual authentication)TLS 或簡寫為 mTLS

  • 雙向身份驗證

  • 通過加密通道通訊

Sidecar與應用通訊

Dapr Sidecar通過localhost與應用通訊,並提供Token API級別身份驗證

Sidecar之間的通訊

Dapr預設開啟mTLS(可以手動關閉,有一定的效能損耗,大多數情況下可以忽略不計)。Dapr利用Sentry的系統服務充當證書頒發機構,包括證書輪換。

證書預設有效期為24小時,時鐘偏差為15分鐘。

Self Hosted mTLS

K8s mTLS

Sidecar與系統服務之間的通訊

Dapr Sidecar和Dapr系統服務之間是強制性mTLS的,包括Sentry(證書頒發機構)、Placement(Actor安置服務)和K8s Operator

K8s中系統服務的mTLS

  • Dapr Sidecar與Dapr系統服務(Actor Placement, Sidecar Injector, Sentry, Operator)之間是通過mTLS

  • Kubelet與Dapr Sidecar之間也是通過mTLS

  • Dapr Sidecar或者Dapr系統服務與Components之間也是通過mTLS

  • Dapr Sidecar與應用之間不是

其實Dapr在安全方面做的工作很多,這裡就不繼續一一列舉了

我們正在行動,新的框架、新的生態

我們的目標是自由的易用的可塑性強的功能豐富的健壯的

所以我們借鑑Building blocks的設計理念,正在做一個新的框架MASA Framework,它有哪些特點呢?

  • 原生支援Dapr,且允許將Dapr替換成傳統通訊方式

  • 架構不限,單體應用、SOA、微服務都支援

  • 支援.Net原生框架,降低學習負擔,除特定領域必須引入的概念,堅持不造新輪子

  • 豐富的生態支援,除了框架以外還有元件庫、許可權中心、配置中心、故障排查中心、報警中心等一系列產品

  • 核心程式碼庫的單元測試覆蓋率90%+

  • 開源、免費、社群驅動

  • 還有什麼?我們在等你,一起來討論

經過幾個月的生產專案實踐,已完成POC,目前正在把之前的積累重構到新的開源專案中

目前原始碼已開始同步到Github(文件站點在規劃中,會慢慢完善起來):

MASA.BuildingBlocks

MASA.Contrib

MASA.Utils

MASA.EShop

BlazorComponent

MASA.Blazor

QQ群:7424099

微信群:加技術運營微信(MasaStackTechOps),備註來意,邀請進群

自動簽名

歡迎加入技術交流群:

招.Net中/高階開發工程師:座標杭州下沙,聯絡方式進群找群主,薪資範圍16-30K,有住房補貼