Dapr - 組件 -Components-

前言:

 前面文章對 Dapr 的構建塊進行了解,接下來對 Dapr 中對構建塊的實現——組件

一、組件

Dapr 使用模塊化設計,將功能作爲組件來提供。每個組件都有接口定義。所有的組件都是可插拔的,因此在理想的情況下,你可以用一個具有相同接口的組件換掉另一個。用於生產的每個組件, 需要保持一套技術要求,以確保組件的功能兼容性和強度。

 組件需包含:

 當前支持組件類型:

 可以發現當前支持的組件類型與構建塊相對應。

二、組件定義格式

 Dapr 使用 CustomResourceDefinition 定義和註冊組件。所有組件都定義爲 CRD,可應用於 Dapr 運行的任何託管環境。

 格式

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: [COMPONENT-NAME]
  namespace: [COMPONENT-NAMESPACE]
spec:
  type: [COMPONENT-TYPE]
  version: v1
  initTimeout: [TIMEOUT-DURATION]
  ignoreErrors: [BOOLEAN]
  metadata:
  - name: [METADATA-NAME]
    value: [METADATA-VALUE]

 格式說明:  

LZMEv6

 特殊值:

  元數據值可以包含一個 {uuid} 標籤,當 Dapr sidecar 啓動時,該標記將被隨機生成的 UUID 所取代。每個啓動都會生成新的 UUID。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: messagebus
spec:
  type: pubsub.mqtt
  version: v1
  metadata:
    - name: consumerID
      value: "{uuid}"
    - name: url
      value: "tcp://admin:public@localhost:1883"
    - name: qos
      value: 1
    - name: retain
      value: "false"
    - name: cleanSession
      value: "false"

三、組件應用

 1、祕鑰倉儲組件:

  描述文件格式:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: secretstore
  namespace: default
spec:
  type: secretstores.<NAME>
  version: v1
  metadata:
  - name: <KEY>
    value: <VALUE>
  - name: <KEY>
    value: <VALUE>
...

  密鑰存儲的類型由type字段決定,連接地址和其他元數據等放在**.metadata**部分。

  當前支持祕鑰存儲通用類型:

vNCF27

 2、中間件組件

  Dapr 允許通過鏈接一系列中間件組件來定義自定義處理管道。請求在路由到用戶代碼之前經過所有已定義的中間件組件,然後在返回到客戶機之前,按相反順序經過已定義的中間件,如下圖中所示。

   中間件描述文件格式:

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: <COMPONENT NAME>
  namespace: <NAMESPACE>
spec:
  type: middleware.http.<MIDDLEWARE TYPE>
  version: v1
  metadata:
  - name: <KEY>
    value: <VALUE>
  - name: <KEY>
    value: <VALUE>
...

  中間件類型由 type 字段決定。組件設置值,如速率限制,OAuth 憑據和其他設置被放入 metadata 部分。

  當前支持 http 類型 type 包含

J1RrAw

  接下來在 Dapr 配置中配置中間件順序,格式如下:

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:
  name: appconfig
spec:
  httpPipeline:
    handlers:
    - name: <COMPONENT NAME>
      type: middleware.http.<MIDDLEWARE TYPE>
    - name: <COMPONENT NAME>
      type: middleware.http.<MIDDLEWARE TYPE>

 3、限定組件作用作用域

  Dapr 組件的名稱空間(注意與 Kubernetes 名稱空間概念區分),這意味着 Dapr runtime 實例只能訪問已部署到同一名稱空間的組件。

  當 Dapr 運行時,它將自己的配置名稱空間與其加載的組件的命名空間進行匹配,並且僅初始化與其名稱空間匹配的組件。並且不會加載不同命名空間中的所有其他組件。

  名稱空間可用於限制組件訪問特定的 Dapr 實例。

例如:指定組件的命名空間

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: production
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis-master:6379

  如果設置命名空間後,則在調用服務時需指定命名空間:如

https://localhost:3500/v1.0/invoke/myapp.production/method/ping

  開發人員和操作員可能希望將一個數據庫的訪問權限限制爲某個應用程序或一組特定應用程序。爲此,Dapr 允許您在組件 YAML 上指定 scopes` 作用域。添加到組件的這些應用程序作用域僅限制具有特定 ID 的應用程序才能使用該組件。

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  namespace: production
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis-master:6379
scopes:
- app1
- app2

  上面示例演示如何給予兩個啓用的 Dapr 應用訪問權限, 使用 app1和app2 兩個應用程序可以訪問名爲 `statestore` 的 Redis 組件,這個組件部署在 `production` 命名空間

四、總結

  組件就是構建塊的功能實現,接來下準備對 Dapr 實現的商場項目進一步探索。進一步對 Dapr 深入瞭解及應用

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Vyuv_Ox76unyCZ50ZlIIrQ