Dapr 1.5.0 版本发布全解析:状态查询 API、配置管理构建块与升级实战指南
2026/9/13 2:59:47 网站建设 项目流程

Dapr 1.5.0 版本发布全解析:状态查询 API、配置管理构建块与升级实战指南

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

Dapr 1.5.0 是 Dapr 运行时在稳定化道路上迈出的重要一步:三大组件(Kafka Pub/Sub、Azure Key Vault Secret Store、Azure SQL Server State Store)正式升级为Stable状态,新增了 Alpha 阶段的状态存储查询 API(Query API)与全新的配置管理构建块(Configuration API building block),同时带来 Actor 可靠性增强、Go SDK Actor 支持以及 ARM64 Mac 原生支持等多项能力。本文以 v1.5.0 发布说明 为主体,结合当前仓库源码,系统梳理本版本的亮点、变更明细,并给出本地与 Kubernetes 两种环境的完整升级实操步骤。

版本亮点总览

Dapr 1.5.0 的更新集中在以下几个方面:

  • 组件认证标准变更:Dapr 指导与技术委员会(STC)投票决定将组件认证标准从GA更名为Stable,并把三个组件升级为Stable状态,标志着它们适合用于生产环境。
  • 状态管理构建块新增查询 API(Alpha):支持对保存在状态存储中的键值数据进行检索、过滤与排序。
  • 新增配置管理构建块(Alpha):提供跨不同配置存储的抽象,支持读取键值配置并订阅配置项更新通知(本版本仅支持 gRPC)。
  • Actor 可靠性增强:改进 Actor 分区表分发可靠性,并修复 Postgres 状态存储对 Actor 的支持。
  • Go SDK 支持虚拟 Actor
  • ARM64 Mac(Preview)支持:CLI、sidecar 与 Dashboard 原生编译 ARM64 版本,并修复 Homebrew 安装 CLI 的问题。
  • 新增组件:Azure CosmosDB Gremlin API Binding 与阿里云 Tablestore Binding。

组件升级至 Stable:认证标准与意义

Dapr 1.5.0 依据 STC 的表决结果(dapr/community#99),将组件认证标准从GA更名为Stable。本次升级为Stable的三个组件是:

组件类别说明
Apache KafkaPub/Sub消息发布订阅组件,支持 Kafka 版本设置与 TLS 修复
Azure Key VaultSecret Store支持托管身份(Managed Identity)认证的秘密存储
Azure SQL ServerState Store关系型状态存储组件,本次通过认证并加入一致性测试

此外,RabbitMQ pub/sub、MySQL state store 与 PostgreSQL state store 也进行了多项修复。例如:

  • RabbitMQ pub/sub 修复了忽略durable元数据、通道关闭处理不当、遇到unexpected command received错误时重连等问题;
  • PostgreSQL state store 修复并加入一致性测试(conformance tests);
  • MySQL 新增一致性测试。

这些修复都来自 components-contrib 仓库的对应 issue/PR,体现了组件层面对生产稳定性的持续投入。

状态管理查询 API(Alpha)

设计定位

状态管理构建块本次新增了查询 API,目前处于Alpha状态。需要明确的是:它并不是完整查询语言(如 SQL)的替代品,而是聚焦于检索、过滤和排序通过状态存储 API 保存的键值数据。

虽然状态存储本质上是键值存储,但 value 可能是一个具有自身层级、键和值的 JSON 文档。查询 API 正是允许你使用这些 JSON 文档内部的键和值来检索对应文档。

协议定义与调用链

在 gRPC 协议层,该 API 通过 dapr.proto 中的QueryStateAlpha1RPC 暴露:

rpc QueryStateAlpha1(QueryStateRequest) returns (QueryStateResponse) {}

HTTP 层则暴露为POST /v1.0-alpha1/state/{storeName}/query,见 pkg/api/http/http.go 中的端点注册。

请求由 pkg/api/universal/state_query.go 中的QueryStateAlpha1处理,其核心流程为:

  1. 获取状态存储:通过GetStateStore从组件注册表中按名称取出状态存储实例;
  2. 能力检查:将存储断言为state.Querier接口,若组件未实现查询能力则返回QueryUnsupported错误;
  3. 加密存储防护:若该状态存储启用了 Dapr 加密(encryption.EncryptedStateStore),则拒绝查询并返回"cannot query encrypted store"错误;
  4. 解析查询体:将请求中的 JSON 查询字符串反序列化为state.QueryRequest,并合并元数据;
  5. 执行查询:通过 Resiliency 策略运行器(resiliency.NewRunner)调用querier.Query(ctx, &req),从而将查询纳入重试与熔断策略管理;
  6. 结果归一化:把组件返回的结果转换为QueryStateItem,还原原始键名(GetOriginalStateKey),并携带 ETag、分页 Token 与元数据返回。

这一实现还通过diag.DefaultComponentMonitoring.StateInvoked(ctx, storeName, diag.StateQuery, ...)将查询调用纳入组件监控指标,便于观测查询的成功率与耗时。

查询 JSON 结构

查询请求体为 JSON,其顶层结构包括:

  • filter:过滤条件,可包含EQINAND等运算;
  • sort:排序规则,包含keyorderASC/DESC);
  • page:分页信息,包含limit(每页条数)与token(下一页游标,来自上一次响应的token);
  • pagination(部分存储):limittoken的别名形式,具体取决于组件支持情况。

典型的查询请求体示例:

{ "filter": { "EQ": { "person.org": "Awesome Team" } }, "sort": [ { "key": "person.id", "order": "DESC" } ], "page": { "limit": 10 } }

响应体QueryStateResponse包含resultsQueryStateItem数组,每项含keydataetagerror)、token(用于下一页)与metadata

需要注意的是:并非所有状态存储都实现了查询能力,只有实现了state.Querier接口的组件(如支持查询的 Redis、MongoDB、PostgreSQL、CosmosDB 等)才可用;查询能力以组件文档中标注的支持情况为准。

配置管理构建块(Alpha)

设计背景与定位

消费应用配置是编写应用时的常见任务,配置存储(configuration store)常被用来管理这类数据。配置项往往是动态的,且与消费它的应用需求紧密耦合。Configuration API 提供了对不同存储的抽象,对外暴露键值数据,并重点支持订阅配置项更新通知的能力。

本版本的初始实现仅支持 gRPC,HTTP 将在稳定版本之前提供(例如\v1.0\configuration\myconfigstore形式的路径)。不过从当前仓库源码看,HTTP 端点已经实现并注册(见下文),说明该能力在后续版本中逐步完善为双协议。

gRPC 服务定义

configuration.proto 与 dapr.proto 定义了以下核心 RPC:

// 获取配置 rpc GetConfiguration(GetConfigurationRequest) returns (GetConfigurationResponse) {} rpc GetConfigurationAlpha1(GetConfigurationRequest) returns (GetConfigurationResponse) {} // 订阅配置更新(gRPC 流式返回) rpc SubscribeConfiguration(SubscribeConfigurationRequest) returns (stream SubscribeConfigurationResponse) {} rpc SubscribeConfigurationAlpha1(SubscribeConfigurationRequest) returns (stream SubscribeConfigurationResponse) {} // 取消订阅 rpc UnsubscribeConfiguration(UnsubscribeConfigurationRequest) returns (UnsubscribeConfigurationResponse) {} rpc UnsubscribeConfigurationAlpha1(UnsubscribeConfigurationRequest) returns (UnsubscribeConfigurationResponse) {}

三种操作与 HTTP 端点

从 pkg/api/http/http.go 的端点注册可以看出,本仓库同时维护了v1.0-alpha1v1.0两套端点:

操作gRPCHTTP
获取配置GetConfigurationGET/POST /v1.0-alpha1/configuration/{storeName}?key=...(及 v1.0 版本)
订阅配置SubscribeConfiguration(流式)GET /v1.0-alpha1/configuration/{storeName}/subscribe?key=...
取消订阅UnsubscribeConfigurationGET /v1.0-alpha1/configuration/{storeName}/{subscribeID}/unsubscribe

关键实现细节(pkg/api/http/http.go):

  • 订阅回调configurationEventHandler.updateEventHandler在收到组件层的configuration.UpdateEvent后,会构造POST /configuration/{storeName}/{key}请求,把配置更新推送给应用侧 HTTP 端点(通过appChannel.InvokeMethod),并遵循入站 Resiliency 策略(ComponentInboundPolicy),失败时按策略重试。
  • 元数据透传:请求中的元数据(如连接参数、认证信息)通过getMetadataFromRequest透传给存储组件。
  • 订阅 IDstore.Subscribe返回subscribeID,应用持有该 ID 即可在后续调用UnsubscribeConfiguration取消订阅。
  • 错误处理:未配置任何配置存储时返回ConfigurationStoreNotConfigured(500);指定存储不存在时返回ConfigurationStoreNotFound(400)。

应用侧需要实现一个接收配置更新回调的 HTTP 端点(如POST /configuration/{storeName}/{key}),Dapr 会把更新事件以 JSON 形式 POST 过来。

Actor 相关增强

Go SDK 支持虚拟 Actor

虚拟 Actor 现已可在 Dapr Go SDK 中使用(对应 go-sdk#21 目录,包含路由、状态、提醒(reminders)、定时器(timers)、哈希分片与表(table)等子模块,是构建有状态 Actor 应用的核心。

Actor 可靠性改进

本版本对 Actor 运行时进行了可靠性增强,对应上游 issue dapr/1914 与 dapr/3533:

  • 改进 Actor 分区表(partition table)分发可靠性(issue 1914):分区表是 placement 服务在 Actor 进程间分发归属的关键数据,分发不可靠会导致 Actor 调用路由错误或重复激活;
  • 修复 Postgres 对 Actor 的支持(issue 3533):修复了 PostgreSQL 状态存储下 Actor 状态持久化的相关问题。

此外还修复了 placement 心跳循环在 nil gRPC 流上发送导致的 panic(issue 3727),以及绑定事件 panic(PR 3804)等问题。

ARM64 Mac 支持(Preview)与 CLI 改进

Dapr CLI、sidecar 与 Dashboard 现在为ARM64 Mac(含 M1)原生编译,同时修复了通过 Homebrew 安装 Dapr CLI 的问题。与之对应,Dashboard 也为 Darwin ARM64 生成二进制(dashboard#174)。

CLI 层面还包含以下改进:

  • 支持 Unix domain socket(cli#788);
  • 列出 Pods 时使用输入参数指定的命名空间(cli#798);
  • 允许通过环境变量为dapr init指定 runtime-version(cli#806)。

新增组件

本版本新增两个绑定组件:

  • Azure CosmosDB Gremlin API Binding:允许通过 Gremlin 图查询语法与 CosmosDB 图数据库交互;
  • 阿里云 Tablestore Binding:对接阿里云表格存储服务。

其他值得关注的变化

Dapr Runtime 修复与增强

  • HTTP OPA 中间件崩溃修复(issue 3216):修复 HTTP OPA 中间件在特定场景下的崩溃;
  • 支持 PATCH 请求的服务调用(issue 3696):服务调用(service invocation)构建块新增对 HTTP PATCH 方法的支持;
  • 按应用覆盖 sidecar 镜像(issue 3745):Kubernetes 下可通过dapr.io/sidecar-image注解为单个应用指定 sidecar 镜像,该注解在 pkg/injector/annotations/annotations.go 中被定义为KeySidecarImage = "dapr.io/sidecar-image"
  • Pod 级自定义标签参数(issue 3435):新增参数支持在 Pod 级别添加自定义标签;
  • Kafka pubsub 支持 Kafka 版本设置(issue 3806)与组件侧 Broker 版本覆盖选项;
  • 为 fasthttp server 与 gRPC server 传递ReadBufferSize参数(issue 3319);
  • 自动设置 GOMAXPROCS 以匹配 Linux 容器 CPU 配额(PR 3781),提升容器化部署下的调度效率;
  • 干净关闭 HTTP 与 gRPC 服务器(issue 3810):Dapr 关闭时优雅清理服务器资源;
  • 修复 gRPC 入站请求指标为空(PR 3768)与元数据头未通过 gRPC 代理发送(issue 3561)等问题;
  • PodDisruptionBudget API 版本适配(PR 3799):在支持的集群上改用policy/v1

Helm Chart 与运维相关

  • Helm Chart 增加 tolerations 支持(issue 3534):values.yaml中提供tolerations配置项(见 charts/dapr/values.yaml),允许控制面 Pod 调度到带污点的节点;
  • 修复 1.4.3 升级后 operator 崩溃回退的问题(issue 3756,与 Helm 不升级 CRD 定义相关);
  • operator 隐藏调试日志(PR 3543);
  • kubernetes-admin加入允许列表(issue 3571)。

各 SDK 更新

  • .NET SDK:支持 .NET 6 preview 4 新 Minimal APIs、支持 gRPC 代理、修复[FromState]缺失路由键的错误报告、多个 topic 调用同一端点等问题;
  • Go SDK:新增 Actor 支持、PublishEventAPI 元数据支持与 API 整理、gRPC 4MB 消息限制可配置、HTTP 服务停止方法修复、客户端在无 daprd 连接时初始化失败等;
  • Python SDK:修复invoke_bindingdata参数未发送到输出绑定、DaprJSONEncoderbug 等。

升级到 Dapr 1.5.0

升级目标是零中断地完成版本切换。注意:升级完成后,必须重启业务 Deployment,让 Pod 拉取新版本 sidecar 镜像。

本地 / 自托管环境

先用当前已安装的 CLI 卸载 Dapr。注意:该操作会删除默认的$HOME/.dapr目录、二进制文件以及dapr_redisdapr_placementdapr_zipkin容器。Linux 用户若 docker 命令需要 sudo,请加 sudo:

dapr uninstall --all

对于 RC 版本,请下载最新 CLI 版本并将dapr二进制放入 PATH。之后初始化指定版本的运行时:

dapr init --runtime-version=1.5.0

等待更新完成后,验证版本:

$ dapr --version CLI version: 1.5.0 Runtime version: 1.5.0

Kubernetes 环境

从旧版本升级(零停机)

可以使用 Helm 3 或 Dapr CLI 完成零停机升级。

方式一:使用 Dapr CLI

dapr upgrade --runtime-version 1.5.0 -k

以高可用模式升级:

dapr upgrade --runtime-version 1.5.0 --enable-ha=true -k

等待操作完成后,用dapr status -k检查状态。务必重启业务 Deployment 以拉起新版本 sidecar。

方式二:使用 Helm

helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update helm upgrade dapr dapr/dapr --version 1.5.0 --namespace=dapr-system --wait

等待操作完成后,用dapr status -k检查状态。同样需要重启业务 Deployment。

全新安装

可参考 Kubernetes 部署完整指南,也可以直接用 Helm 3 安装:

helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update kubectl create namespace dapr-system helm install dapr dapr/dapr --version 1.5.0 --namespace dapr-system --wait

或者使用 CLI 安装:

dapr init --runtime-version=1.5.0 -k
安装后验证

验证控制面 Pod 健康状态:

$ dapr status -k NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED dapr-dashboard dapr-system True Running 1 0.9.0 15s 2021-11-09 13:07.39 dapr-sidecar-injector dapr-system True Running 1 1.5.0 15s 2021-11-09 13:07.39 dapr-sentry dapr-system True Running 1 1.5.0 15s 2021-11-09 13:07.39 dapr-operator dapr-system True Running 1 1.5.0 15s 2021-11-09 13:07.39 dapr-placement dapr-system True Running 1 1.5.0 15s 2021-11-09 13:07.39

安装完成后,对业务 Deployment 执行滚动重启以加载新 sidecar:

kubectl rollout restart deploy/<deployment-name>

破坏性变更

无。Dapr 1.5.0 未引入破坏性变更,可安全升级。

深入阅读指引

  • 完整发布说明:docs/release_notes/v1.5.0.md
  • 状态查询 API 实现:pkg/api/universal/state_query.go、dapr/proto/runtime/v1/dapr.proto
  • 配置 API HTTP 实现:pkg/api/http/http.go(端点注册)、pkg/api/http/http.go(订阅回调与取消订阅)
  • 配置 API gRPC 定义:dapr/proto/runtime/v1/dapr.proto
  • sidecar 镜像注解定义:pkg/injector/annotations/annotations.go
  • Helm tolerations 配置:charts/dapr/values.yaml
  • 各版本发布说明索引:docs/release_notes

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询