Dapr组件(Components)

摘要:
格式:apiVersion:dapr.io/v1alpha1kind:Componentmetadata:name:[COMPONENT-NAME]namespace:[COMPONENT-NAMESPACE]spec:type:[COMPONENT-TYPE]version:v1initTimeout:[TIMEOUT-DURATION]ignoreErrors:[BOOLEAN]metadata:-name:[METADATA-NAME]value:[METADATA-VALUE]格式说明:  字段必填详情ExampleapiVersionY您正在调用的Dapr版本APIdapr.io/v1alpha1kindYCRD的类型。apiVersion:dapr.io/v1alpha1kind:Componentmetadata:name:messagebusspec:type:pubsub.mqttversion:v1metadata:-name:consumerIDvalue:"{uuid}"-name:urlvalue:"tcp://admin:public@localhost:1883"-name:qosvalue:1-name:retainvalue:"false"-name:cleanSessionvalue:"false"三、组件应用1、秘钥仓储组件:描述文件格式:apiVersion:dapr.io/v1alpha1kind:Componentmetadata:name:secretstorenamespace:defaultspec:type:secretstores.version:v1metadata:-name:value:-name:value:...密钥存储的类型由type字段决定,连接地址和其他元数据等放在.metadata部分。当前支持秘钥存储通用类型:Name状态组件版本自从LocalenvironmentvariablesBetav11.0LocalfileBetav11.0HashiCorpVaultAlphav11.0KubernetessecretsGAv11.02、中间件组件Dapr允许通过链接一系列中间件组件来定义自定义处理管道。组件设置值,如速率限制,OAuth凭据和其他设置被放入metadata部分。

前言:

前面文章对Dapr的构建块进行了解,接下来对Dapr中对构建块的实现——组件

一、组件

Dapr 使用模块化设计,将功能作为组件来提供。 每个组件都有接口定义。 所有的组件都是可插拔的,因此在理想的情况下,你可以用一个具有相同接口的组件换掉另一个。 用于生产的每个组件, 需要保持一套技术要求,以确保组件的功能兼容性和强度。

组件需包含:

  • 符合定义的Dapr接口
  • 功能正确和强健
  • 完善的文档和维护

当前支持组件类型:

  • 状态存储:状态存储组件是存储键值对的数据存储(数据库、文件、内存),其作为状态管理的构建模块之一。
  • 服务发现:服务发现组件与服务调用构建块配合使用,与托管环境集成以提供服务到服务发现。
  • 中间件:Dapr 允许将自定义中间件插入请求处理管道。 中间件可以在请求路由到用户代码之前,或者在将请求返回给客户端之前,对请求执行额外的操作(例如,认证,加密和消息转换)。 中间件组件与服务调用基础结构块一起使用。
  • Pub/Sub代理:发布/订阅 组件是消息分发器,可以作为应用程序之间进行消息发布 & 订阅构建块。
  • 绑定:绑定构建块使得外部资源可以连接到 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]

格式说明:  

字段必填详情Example
apiVersionY您正在调用的Dapr版本(如果适用的话为 Kubernetes) APIdapr.io/v1alpha1
kindYCRD的类型。 组件必须始终是ComponentComponent (组件)
metadata-有关组件注册的信息
metadata.nameY组件的名称prod-statestore
metadata.namespaceN主机环境的命名空间myapp-namespace
spec-关于组件资源的详细信息
spec.typeY组件类型state.redis
spec.versionY组件版本v1
spec.initTimeoutN组件初始化的超时时间 默认为30秒5m,1h,20s
spec.ignoreErrorsN如果组件加载失败,请告诉Dapr sidecar 继续初始化。 默认为 falsefalse
spec.metadata-一个组件特定配置的键/值。 查看你的组件字段定义

特殊值:

元数据值可以包含一个{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部分。

当前支持秘钥存储通用类型:

Name状态组件版本自从
Local environment variablesBetav11.0
Local fileBetav11.0
HashiCorp VaultAlphav11.0
Kubernetes secretsGAv11.0

2、中间件组件

Dapr 允许通过链接一系列中间件组件来定义自定义处理管道。 请求在路由到用户代码之前经过所有已定义的中间件组件,然后在返回到客户机之前,按相反顺序经过已定义的中间件,如下图中所示。

Dapr组件(Components)第1张

中间件描述文件格式:

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包含

Name说明状态组件版本
Rate limit限制每秒允许的 HTTP 请求的最大数量Alphav1
OAuth2在Web API上启用OAuth2授权授权流程Alphav1
OAuth2 client credentials在Web API上启用OAuth2客户端凭证授予流程Alphav1
Bearer使用OpenID Connect在 Web API 上验证Bearer TokenAlphav1
Open Policy AgentRego/OPA策略应用到传入的Dapr HTTP请求中Alphav1
Uppercase将请求的正文转换为大写字母GA (For local development)v1

接下来在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深入了解及应用

免责声明:文章转载自《Dapr组件(Components)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小程序:前端防止用户重复提交&amp;amp;即时消息(IM)重复发送问题解决discuz安装步骤下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker的内核,性能与调优

Docker的内核,性能与调优 首先我们抛出3个问题: docker容器的内核与宿主机内核是怎样的关系? 容器在运行时如何调用系统资源? docker的性能参数有没有作用范围? 能够将这3个问题全部解答,关于docker的内核与调优策略便有了一定程度的认识。   一、容器与宿主机的内核关系 —— 共享内核 docker镜像是一个“应用程序和它运行依赖...

综合而强大的DATASNAP

从DELPHI2009开始,DATASNAP技术上完全是全新的架构,多层架构不再基于微软的COM,摆脱COM就等于摆脱了WINDOWS的束缚。 TCP/IP通信不再需要先开启scktsrvr.exe程序,相信吃过scktsrvr.exe苦头的人不少,比如多核CPU环境容易挂掉(在DELPHI7的时代,多核CPU的电脑还不流行,当时根本没有考虑到多核的问题)...

rocket mq 入门文档

原文地址: http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/ 感谢原作者 十分钟入门RocketMQ 本文首先引出消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件否可以解...

WCF中的数据契约(Continued)

版本化数据契约 变化是不可避免的。业务的改变,技术的改变,规则的改变,这些都会造成软件契约的变化。面对软件的变化,一个稳定的版本策略是必不可少的。必须注意对不可避免的变化进行预先的筹划,并对当前的客户端保证向后的兼容性。 最常见的对版本化契约的需求是,当现有数据契约中添加新的成员时。按照不间断的版本更改的描述,你可以自由更改,而不需要终止现有的客户端。但...

Java中针对Yaml格式数据操作记录

写在前面 最近由于涉及的功能需要对Nacos配置信息通过代码实现发布,在此过程中,涉及到String字符串转换Map,Map转换为Yaml格式的字符串等方法,由于之前没有接触过此方面内容,所以特在此进行记录,以做备忘! 1、Nacos获取配置 Nacos获取配置信息,返回结果为String格式字符串,这里可以参看Nacos中文文档(地址为:https://...

C#-MVC开发常见异常处理

一、EF框架问题 错误的提示为:Model compatibility cannot be checked because the database does not contain model metadata.Model compatibility can only be checked for databases created using Cod...