组件

由构建块和应用程序使用的模块化功能

Dapr 采用模块化设计,功能以组件的形式交付。每个组件都有一个接口定义。所有组件都可以互换,因此您可以用具有相同接口的一个组件替换为另一个组件。

您可以通过以下方式贡献实现并扩展 Dapr 的组件接口能力:

一个构建块可以使用任意组件组合。例如,Actor状态管理构建块都使用状态组件

再举一个例子,发布订阅构建块使用发布订阅组件

您可以使用 dapr components CLI 命令获取托管环境中当前可用组件的列表。

组件规范

每个组件都有一个遵循的规范(或 spec)。组件在设计时通过 YAML 文件进行配置,该文件存储在以下位置之一:

  • 解决方案中的 components/local 文件夹,或
  • 调用 dapr init 时创建的全局 .dapr 文件夹中。

这些 YAML 文件遵循通用的 Dapr 组件架构,但每个都特定于组件规范。

重要的是要理解,组件规范值,特别是规范 metadata,可能会在同一组件类型的组件之间发生变化,例如在不同的状态存储之间,并且一些设计时规范值可以在运行时向组件 API 发出请求时被覆盖。因此,强烈建议查看组件规范,特别注意用于设置与组件交互的 metadata 的请求示例负载。

下图显示了每种组件类型的一些组件示例

内置组件和可插拔组件

Dapr 包含作为运行时一部分的内置组件。这些是社区开发并捐赠的公共组件,可在每个版本中使用。

Dapr 还允许用户创建自己的私有组件,称为可插拔组件。这些组件是自托管的(进程或容器),不需要用 Go 编写,存在于 Dapr 运行时之外,并且能够"插入" Dapr 以利用构建块 API。

在可能的情况下,鼓励将内置组件捐赠给 Dapr 项目和社区。

但是,可插拔组件非常适合您想要创建自己的未包含在 Dapr 项目中的私有组件的场景。 例如:

  • 您的组件可能特定于您的公司或存在 IP 问题,因此无法包含在 Dapr 组件仓库中。
  • 您希望将组件更新与 Dapr 发布周期解耦。

有关更多信息,请阅读可插拔组件概述

热重载

启用热重载功能后,组件可以在运行时进行"热重载"。 这意味着您可以在不重启 Dapr 运行时的情况下更新组件配置。 当在 Kubernetes API 中创建、更新或删除组件资源时,或者在自托管模式下 resources 目录中的文件发生更改时,会发生组件重新加载。 更新组件时,组件首先关闭,然后使用新配置重新初始化。 在重新加载和重新初始化期间,组件在短时间内不可用。

可用的组件类型

以下是 Dapr 提供的组件类型:

名称解析

名称解析组件与服务调用构建块一起使用,与托管环境集成并提供服务到服务的发现。例如,Kubernetes 名称解析组件与 Kubernetes DNS 服务集成,自托管模式使用 mDNS,VM 集群可以使用 Consul 名称解析组件。

发布订阅代理

发布订阅代理组件是消息代理,可以作为发布和订阅构建块的一部分在服务之间传递消息。

状态存储

状态存储组件是数据存储(数据库、文件、内存),作为状态管理构建块的一部分存储键值对。

绑定

外部资源可以连接到 Dapr,以便触发应用程序上的方法或从应用程序调用,作为绑定构建块的一部分。

密钥存储

密钥是您想要防范未经授权访问的任何私人信息。密钥存储用于存储可以在应用程序中检索和使用的密钥。

配置存储

配置存储用于保存应用程序数据,应用程序实例可以在启动时读取这些数据,或者在发生更改时收到通知。这允许动态配置。

锁组件用作分布式锁,以提供对资源(如队列或数据库)的互斥访问。

加密

加密组件用于执行加密操作,包括加密和解密消息,而不会向应用程序暴露密钥。

对话

Dapr 为开发人员提供了一种抽象与大语言模型 (LLM) 交互的方法,具有内置的安全性和可靠性功能。使用对话组件向不同的 LLM 发送提示以及对话上下文。

中间件

Dapr 允许将自定义中间件插入到 HTTP 请求处理管道中。中间件可以在请求路由到用户代码之前或响应返回给客户端之前对 HTTP 请求执行其他操作(例如身份验证、加密和消息转换)。中间件组件与服务调用构建块一起使用。