组件
Dapr 采用模块化设计,功能以组件的形式交付。每个组件都有一个接口定义。所有组件都可以互换,因此您可以用具有相同接口的一个组件替换为另一个组件。
您可以通过以下方式贡献实现并扩展 Dapr 的组件接口能力:
一个构建块可以使用任意组件组合。例如,Actor和状态管理构建块都使用状态组件。
您可以使用 dapr components CLI 命令获取托管环境中当前可用组件的列表。
注意
对于任何向应用返回数据的组件,建议相应地设置 Dapr 边车(进程或容器)的内存容量,以避免潜在的 OOM 恐慌。例如,在 Docker 中使用--memory 选项。对于 Kubernetes,使用 dapr.io/sidecar-memory-limit 注解。对于进程,这取决于操作系统和/或进程编排工具。*组件规范
每个组件都有一个遵循的规范(或 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 请求执行其他操作(例如身份验证、加密和消息转换)。中间件组件与服务调用构建块一起使用。