news 2026/9/12 13:17:24

Dapr 1.6.0 版本全解析:组件认证升级、状态查询 API 与零停机升级指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Dapr 1.6.0 版本全解析:组件认证升级、状态查询 API 与零停机升级指南

Dapr 1.6.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.6.0 是 Dapr 在组件生态与运行时稳定性上迈出关键一步的版本,聚焦于为下一批组件准备stable(稳定)认证,并带来了状态存储过滤/查询 API、Actor 提醒(Reminder)重命名、可配置优雅关闭等新能力。本文以官方发布说明为主体,结合当前仓库源码,详细拆解该版本的组件变更、Runtime 新特性、SDK 进展以及本地与 Kubernetes 环境的完整升级路径,帮助你快速评估并平滑迁移到 Dapr 1.6.0。

版本概览:1.6.0 的核心主题

Dapr 1.6.0 的发布重点可以概括为三条主线:

  1. 组件认证升级:根据社区反馈,本版本集中为下一批组件准备stable认证,补齐认证测试并修复质量缺陷。多个组件正式被标记为beta状态,其中一部分成为下一版本stable的有力候选。
  2. 运行时新能力:新增状态存储过滤与查询 API、Actor Reminder 重命名支持,并围绕高可用、优雅关闭、探针定制等运维场景做了大量修复与增强。
  3. SDK 功能对齐:Application Configuration API、Query and Filtering API、Pub/sub routing 等能力在多个官方 SDK 中落地。

注意:本版本包含少量破坏性变更,升级前请务必阅读升级指南。

组件生态演进:认证升级、新增与移除

新晋 beta 状态的组件

本版本根据组件认证生命周期流程,为以下组件补充了认证测试并解决质量问题,正式标记为beta

组件类型备注
MQTTpub/substable候选
RabbitMQpub/substable候选
Azure Blob Storage输出 bindingstable候选
Azure CosmosDB输出 bindingstable候选
Azure Service Bus Queues输出 bindingstable候选
Azure Event Hubspub/sub
AWS SNS/SQSpub/sub

其中 MQTT、RabbitMQ、Azure Blob Storage、Azure CosmosDB、Azure Service Bus Queues 五个组件被视为即将晋升stable的候选,值得在生产环境选型时重点关注。

既有组件的能力增强

  • Kafka OAuth 2.0 支持:pub/sub 与 binding 两类 Kafka 组件均新增了 OAuth 2.0 认证方式,适用于使用 Confluent Cloud 等托管 Kafka 服务的场景。
  • Azure Event Hubs pub/sub 改进:针对 topic 与分区处理做了大量优化,支持在发布时指定分区键(partition key),并修复了同一 Event Hubs 组件下多个订阅者工作异常的问题。
  • Apache Pulsar pub/sub 多项新能力
    • Tenant namespace 支持;
    • Backoff(退避)策略;
    • Token 认证支持;
    • 支持禁用消息批量(batching)。

新增组件

  • Alibaba Cloud OOS Parameter Store(secret store):阿里云运维编排服务(OOS)参数仓库作为新的密钥存储组件接入,相关实现随本版本合入 daprd(对应 pkg/components/secretstores 目录下的组件注册体系)。
  • Oracle Cloud Infrastructure (OCI) object storage(state store):Oracle 云对象存储正式成为受支持的状态存储组件(对应 issue #4095 "Incorporate OCI StorageService state store component in daprd")。

移除的组件

  • Cloudstate state store:该alpha组件不再随版本分发。运行时与组件仓库分别通过 PR #3897 与 #1303 移除了相关实现,这也是本版本最重要的破坏性变更之一。如果你的配置中仍在使用 Cloudstate,升级前必须迁移到其他状态存储。

运行时(Runtime)新特性与源码解读

状态存储过滤与查询 API(Query State API)

这是 1.6.0 运行时最重要的新增能力(issue #1339):面向支持查询的状态存储(如 MongoDB、PostgreSQL、CosmosDB、Redis 等),提供基于查询语句的过滤与检索接口。

从当前仓库源码看,该能力的 gRPC 端点为QueryStateAlpha1,在 pkg/api/grpc/endpoints.go 中被归类为state.v1alpha1版本族:

"state.v1alpha1": { daprRuntimePrefix + "v1.Dapr/QueryStateAlpha1", },

其核心实现位于 pkg/api/universal/state_query.go,调用链展示了几个关键设计:

func (a *Universal) QueryStateAlpha1(ctx context.Context, in *runtimev1pb.QueryStateRequest) (*runtimev1pb.QueryStateResponse, error) { store, err := a.GetStateStore(in.GetStoreName()) ... querier, ok := store.(state.Querier) // 1. 类型断言:只有实现 state.Querier 的存储才支持查询 if !ok { err = errors.StateStore(in.GetStoreName()).QueryUnsupported() ... } if encryption.EncryptedStateStore(in.GetStoreName()) { err = errors.StateStore(in.GetStoreName()).QueryFailed("cannot query encrypted store") // 2. 客户端加密与查询互斥 ... } var req state.QueryRequest if err = json.Unmarshal([]byte(in.GetQuery()), &req.Query); err != nil { // 3. 查询体为 JSON ... } req.Metadata = in.GetMetadata() start := time.Now() policyRunner := resiliency.NewRunner*state.QueryResponse, resiliency.Statestore), // 4. 走组件级弹性策略 ) resp, err := policyRunner(func(ctx context.Context) (*state.QueryResponse, error) { return querier.Query(ctx, &req) }) ... }

从中可以提炼出三条实践要点:

  • 并非所有状态存储都支持查询:运行时通过store.(state.Querier)接口断言来判断,不支持的存储会返回 "query unsupported" 错误。
  • 客户端加密与查询互斥:若对某个状态存储启用了客户端加密(见 pkg/encryption 模块),查询请求会被明确拒绝(issue #4126 修复了二者共存时的错误行为)。
  • 查询体是 JSON:请求中的query字段以 JSON 形式传入,运行时解析后交给组件的Query实现;结果通过QueryStateResponse返回,携带Results、分页TokenMetadata,返回前还会通过stateLoader.GetOriginalStateKey还原带前缀的原始键名。

该版本同时修复了 "QueryStateAlpha1 return data nil" 的问题(PR #4039),确保无结果时返回空响应而非 nil 数据。对应地,Python、JavaScript、Go、.NET 四个 SDK 在本版本补齐了该 API 的支持(见下文 SDK 章节)。

Actor Reminder 重命名支持

运行时新增了 Actor Reminder 重命名能力(issue #3273),允许在 Actor 运行期间调整提醒的名称。从 pkg/api/grpc/endpoints.go 的actors.v1端点族可以看到 Reminder 相关 API 已形成完整闭环:

"actors.v1": { daprRuntimePrefix + "v1.Dapr/RegisterActorTimer", daprRuntimePrefix + "v1.Dapr/UnregisterActorTimer", daprRuntimePrefix + "v1.Dapr/RegisterActorReminder", daprRuntimePrefix + "v1.Dapr/GetActorReminder", daprRuntimePrefix + "v1.Dapr/UnregisterActorReminder", ... },

Reminder 的创建、注销与底层存储调度实现在 pkg/actors/reminders 与 pkg/actors/internal/scheduler 等目录中,period的解析支持 ISO-8601 格式(见 pkg/actors/api/period.go)。本版本还修复了 Reminder 与 Timer 的 ISO-8601 时间 off-by-one 错误(issue #3995)、创建 Timer 的 duetime 计算问题(PR #4075),并改进了 Actor 状态存储加载冲突时的日志与 Reminder 分区逻辑(PR #4021)。

运维与可靠性增强

  • 优雅关闭周期可配置(issue #3983):daprd 的优雅关闭时长从硬编码改为可通过启动参数配置。在 pkg/runtime/config.go 中可以看到其默认值逻辑:

    if c.DaprGracefulShutdownSeconds < 0 { intc.gracefulShutdownDuration = DefaultGracefulShutdownDuration } else { intc.gracefulShutdownDuration = time.Duration(c.DaprGracefulShutdownSeconds) * time.Second }

    即通过dapr-graceful-shutdown-seconds参数(负数时回退到默认值)控制 daprd 对shutdownAPI 命令的响应及时性(issue #3930 修复了 shutdown 响应不及时的问题)。

  • Helm Chart 支持自定义存活/就绪探针(PR #4049):控制平面组件的探针参数可以在 values 中定制,例如 operator 部署模板 charts/dapr/charts/dapr_operator/templates/dapr_operator_deployment.yaml 中按livenessProbe.initialDelaySecondsreadinessProbe.periodSeconds等字段渲染。此外,sidecar injector chart 新增了hostNetwork设置(issue #4074)。

  • 重复 Actor 状态存储直接终止 sidecar(PR #4087):启动时若检测到重复的 Actor 状态存储配置,daprd 会直接退出,避免运行期行为不可预期。

  • 跨命名空间 gRPC 代理调用修复(issue #3807):修复了 Kubernetes 环境下跨命名空间 gRPC 代理调用失败的问题;operator 也修复了组件更新时跨命名空间读取 Secret 受限(issue #3949)以及为组件更新增加命名空间校验(PR #3952)的问题。

  • 订阅重试/dapr/subscribe在失败或应用未就绪时支持重试,并会等待应用进入 Ready 状态(issue #3839)。

  • 其他值得关注的修复:HTTP 中间件创建错误不再被忽略(issue #3657)、CosmosDB 状态存储分区在负载下的可靠性(issue #3716)、global.ha.enabled: true时 deployment 出现两个 affinity 元素的问题(issue #3788)、daprd --version日志输出、AppID 长度校验(issue #4023)、组件字段错误导致 daprd panic(issues #4054/#4083)、gRPC 请求早于 runtime 初始化到达时 daprd 崩溃(issue #3982)等。

SDK 进展:三大 Alpha API 落地

本版本 SDK 侧的工作围绕三个能力的多语言覆盖展开:

Application Configuration API(Alpha)

Configuration API 用于在运行时获取应用配置,此前已有部分语言支持,1.6.0 补齐了Python、Java 与 .NET

  • .NET SDK:支持 Configuration API(issue #787);
  • Java SDK:支持 Configuration API(issue #659);
  • Python SDK:支持 Get Configuration API(issue #308)。

Query and Filtering API(Alpha)

状态查询能力在Python、JavaScript、Go 与 .NET四个 SDK 中同步落地:

  • .NET SDK:支持 statestore query API(issue #777);
  • Go SDK:支持 statestore query API(issue #215);
  • Python SDK:支持 statestore query API(issue #296);
  • JavaScript SDK:Query State API(issue #139)。

Pub/sub routing(Go SDK)

Go SDK 新增 Pub/sub routing 支持(issue #226),至此路由能力在多语言 SDK 中进一步对齐。Go SDK 还同时新增了 Unix domain socket 支持(PR #206)与 Actor timer/reminder 的 TTL、时间/间隔格式支持(issue #222)。

此外,各 SDK 还有一些体验性修复,例如 .NET SDK 修复了 Actor 执行以异常结束时状态被重置的问题(issue #762,同时列为破坏性变更,详见下文)、Java SDK 迁出 JCenter Maven 仓库(issue #608)、Python SDK 为 gRPC metadata API 字段发布弃用通知(issue #324)等。

破坏性变更与弃用

升级前请确认以下变更对你的影响:

  • Dapr Runtime:移除了 Cloudstate 状态存储(对应 pkg/components/state 注册表中的 alpha 组件条目一并删除),若仍在引用该组件需迁移。
  • Python SDK:gRPC metadata API 字段发布弃用通知(issue #324),建议迁移到新字段。
  • .NET SDK:Actor 状态在 Actor 执行以异常结束时会被重置(此前会保留),这是对异常语义的行为修正,依赖旧行为的应用需要适配。

升级到 Dapr 1.6.0

本地 / 自托管模式升级

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

dapr uninstall --all

下载最新 CLI 并把dapr二进制放入 PATH,然后以指定运行时版本初始化:

dapr init --runtime-version=1.6.0

等待更新完成后,用以下命令确认 CLI 与运行时均为 1.6.0:

$ dapr --version CLI version: 1.6.0 Runtime version: 1.6.0

Kubernetes 升级

Kubernetes 下支持通过 Helm 3 或 Dapr CLI 进行零停机升级

使用 CLI 升级

下载最新 CLI 并放入 PATH 后执行:

dapr upgrade --runtime-version 1.6.0 -k

以高可用模式升级:

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

等待操作完成后用dapr status -k检查状态。

注意:升级完成后,务必重启你的 Deployment,使 sidecar 拉取到最新版本的 daprd 镜像。

使用 Helm 升级
helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update helm upgrade dapr dapr/dapr --version 1.6.0 --namespace=dapr-system --wait

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

在集群上全新安装

使用 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.6.0 --namespace dapr-system --wait
使用 CLI 安装
dapr init --runtime-version=1.6.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 2022-01-18 13:07.39 dapr-sidecar-injector dapr-system True Running 1 1.6.0 15s 2022-01-18 13:07.39 dapr-sentry dapr-system True Running 1 1.6.0 15s 2022-01-18 13:07.39 dapr-operator dapr-system True Running 1 1.6.0 15s 2022-01-18 13:07.39 dapr-placement dapr-system True Running 1 1.6.0 15s 2022-01-18 13:07.39

安装完成后,对业务 Deployment 执行滚动重启以接入新版本 sidecar:

kubectl rollout restart deploy/<deployment-name>

兼容性提醒

  • 当前仓库的 Helm Chart(charts/dapr)与运行时实现已包含本版本之后的持续演进,升级时应以发布说明中的版本号与官方安装指引为准;
  • 若你使用了被标记为alpha/beta的组件或 API(如 Query State API),请留意其后续可能的行为调整与版本迁移。

结语

Dapr 1.6.0 是一个"组件就绪"与"运行时健壮性"并重的版本:七个组件晋升beta、Kafka/Pulsar/Event Hubs 等主流消息组件的能力增强、OCI 与阿里云 OOS 等新组件接入,配合状态查询 API、Reminder 重命名、可配置优雅关闭等运行时新能力,让它在生产可用性上又前进了一步。对于正在评估或已经使用 Dapr 的团队,建议在升级前重点核对破坏性变更清单(Cloudstate 移除、Python metadata 字段弃用、.NET Actor 状态语义修正),并按照本文的本地/集群升级路径,在测试环境先行验证后滚动发布。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 13:15:10

工业项目为何偏爱TCP以太网温湿度传感器?选型与调试实战解析

我当时在一个自动化改造项目的选型会上&#xff0c;甲方工程师反复强调一句&#xff1a;“温湿度传感器必须是TCP协议、以太网口&#xff0c;最好带Modbus TCP。”底下有人小声嘀咕&#xff1a;不就是测个温度和湿度嘛&#xff0c;RS485不也一样能读&#xff1f;现场那么长一段…

作者头像 李华
网站建设 2026/9/12 13:14:50

Python正则表达式re模块核心功能与优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 13:12:59

个人数据检测系统实战:敏感数据识别与分级管理

简介&#xff1a;这是一套面向安全研究与学习场景的个人数据泄露检测系统&#xff0c;基于Flask框架构建Web应用&#xff0c;核心功能涵盖QQ绑定、手机号、邮箱等信息的泄露查询与展示。压缩包共2000个文件&#xff0c;以Python源码&#xff08;py&#xff09;和编译中间文件&a…

作者头像 李华