组件

构建模块和应用所使用的模块化功能

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

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

构建块可以使用组件的任意组合。 例如,Actors状态管理构建块都使用state components

作为另一个例子,发布/订阅 构建块使用发布/订阅组件

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

注意

对于将数据返回到应用的任何组件,建议相应地设置 Dapr sidecar 的内存容量(进程或容器),以避免潜在的 OOM 恐慌。 例如,在docker中使用--memory选项。 对于 Kubernetes,请使用 dapr.io/sidecar-memory-limit 注解。 For processes this depends on the OS and/or process orchestration tools.*

组件规范

每个组件都有一个符合的规范(或规范)。 组件在设计时使用存储在以下任一位置的 YAML 文件进行配置:

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

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

重要的是要理解组件规范值,特别是规范 metadata,可以在相同组件类型的组件之间更改,例如在不同的状态存储之间,并且一些设计时规范值可以在运行时被覆盖对组件 API 的请求。 因此,强烈建议查看组件规范,请特别注意请求的示例有效负载,以设置用于与组件交互的元数据。

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

内置和可插拔组件

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

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

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

不过,可插拔组件非常适合想要创建自己的私有组件的方案,这些组件不包含在 Dapr 项目中。 例如:

  • 你的组件可能特定于你的公司或带来 IP 问题,因此它不能包含在 Dapr component 存储库中。
  • 您希望组件更新与 Dapr 发布周期解耦。

了解更多信息,请阅读可插拔组件概述

热重载

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

可用的组件类型

以下是 Dapr 提供的组件:

状态存储

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

命名解析

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

发布/订阅代理

发布/订阅组件是消息分发器,可以作为发布和订阅构建块的一部分来传递消息给/从服务。

绑定

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

Secret stores(密钥存储)

一个秘密是任何你想保护的私人信息,以防止不需要的访问。 秘密存储用来存储可在应用中检索和使用的密钥。

配置存储

配置存储用于保存应用数据,配置可在应用启动或者配置更改的时候被应用读取。 配置存储支持动态加载(热更新)。

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

Workflows

一个工作流程是定义可靠业务流程或数据流的自定义应用程序逻辑。 工作流组件是工作流运行时(或引擎),运行为该工作流编写的业务逻辑并将其状态存储到状态存储中。

Cryptography

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

中间件

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

注意

由于可插拔组件不需要用Go编写,因此它们遵循与内置Dapr组件不同的实现过程。 了解有关开发内置组件的更多信息,请阅读开发新组件