
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/daprDapr 1.6.0 是 Dapr 在组件生态与运行时稳定性上迈出关键一步的版本聚焦于为下一批组件准备stable稳定认证并带来了状态存储过滤/查询 API、Actor 提醒Reminder重命名、可配置优雅关闭等新能力。本文以官方发布说明为主体结合当前仓库源码详细拆解该版本的组件变更、Runtime 新特性、SDK 进展以及本地与 Kubernetes 环境的完整升级路径帮助你快速评估并平滑迁移到 Dapr 1.6.0。版本概览1.6.0 的核心主题Dapr 1.6.0 的发布重点可以概括为三条主线组件认证升级根据社区反馈本版本集中为下一批组件准备stable认证补齐认证测试并修复质量缺陷。多个组件正式被标记为beta状态其中一部分成为下一版本stable的有力候选。运行时新能力新增状态存储过滤与查询 API、Actor Reminder 重命名支持并围绕高可用、优雅关闭、探针定制等运维场景做了大量修复与增强。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 Storesecret store阿里云运维编排服务OOS参数仓库作为新的密钥存储组件接入相关实现随本版本合入 daprd对应 pkg/components/secretstores 目录下的组件注册体系。Oracle Cloud Infrastructure (OCI) object storagestate storeOracle 云对象存储正式成为受支持的状态存储组件对应 issue #4095 Incorporate OCI StorageService state store component in daprd。移除的组件Cloudstate state store该alpha组件不再随版本分发。运行时与组件仓库分别通过 PR #3897 与 #1303 移除了相关实现这也是本版本最重要的破坏性变更之一。如果你的配置中仍在使用 Cloudstate升级前必须迁移到其他状态存储。运行时Runtime新特性与源码解读状态存储过滤与查询 APIQuery 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、分页Token与Metadata返回前还会通过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 #3983daprd 的优雅关闭时长从硬编码改为可通过启动参数配置。在 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.initialDelaySeconds、readinessProbe.periodSeconds等字段渲染。此外sidecar injector chart 新增了hostNetwork设置issue #4074。重复 Actor 状态存储直接终止 sidecarPR #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 panicissues #4054/#4083、gRPC 请求早于 runtime 初始化到达时 daprd 崩溃issue #3982等。SDK 进展三大 Alpha API 落地本版本 SDK 侧的工作围绕三个能力的多语言覆盖展开Application Configuration APIAlphaConfiguration API 用于在运行时获取应用配置此前已有部分语言支持1.6.0 补齐了Python、Java 与 .NET.NET SDK支持 Configuration APIissue #787Java SDK支持 Configuration APIissue #659Python SDK支持 Get Configuration APIissue #308。Query and Filtering APIAlpha状态查询能力在Python、JavaScript、Go 与 .NET四个 SDK 中同步落地.NET SDK支持 statestore query APIissue #777Go SDK支持 statestore query APIissue #215Python SDK支持 statestore query APIissue #296JavaScript SDKQuery State APIissue #139。Pub/sub routingGo SDKGo 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 SDKgRPC metadata API 字段发布弃用通知issue #324建议迁移到新字段。.NET SDKActor 状态在 Actor 执行以异常结束时会被重置此前会保留这是对异常语义的行为修正依赖旧行为的应用需要适配。升级到 Dapr 1.6.0本地 / 自托管模式升级首先使用当前安装的 CLI 卸载 Dapr。注意这会删除默认的$HOME/.dapr目录、二进制文件以及dapr_redis、dapr_placement、dapr_zipkin容器Linux 用户若 docker 命令需要 sudo 则需加 sudodapr uninstall --all下载最新 CLI 并把dapr二进制放入 PATH然后以指定运行时版本初始化dapr init --runtime-version1.6.0等待更新完成后用以下命令确认 CLI 与运行时均为 1.6.0$ dapr --version CLI version: 1.6.0 Runtime version: 1.6.0Kubernetes 升级Kubernetes 下支持通过 Helm 3 或 Dapr CLI 进行零停机升级。使用 CLI 升级下载最新 CLI 并放入 PATH 后执行dapr upgrade --runtime-version 1.6.0 -k以高可用模式升级dapr upgrade --runtime-version 1.6.0 --enable-hatrue -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 --namespacedapr-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-version1.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 执行滚动重启以接入新版本 sidecarkubectl rollout restart deploy/deployment-name兼容性提醒当前仓库的 Helm Chartcharts/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),仅供参考