ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Dapr 0.10.0 版本发布深度解析:多 Pub/Sub、状态 Bulk Get 与事务 API、Kubernetes 生产升级指南

Dapr 0.10.0 版本发布深度解析:多 Pub/Sub、状态 Bulk Get 与事务 API、Kubernetes 生产升级指南 Dapr 0.10.0 版本发布深度解析多 Pub/Sub、状态 Bulk Get 与事务 API、Kubernetes 生产升级指南【免费下载链接】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 官方发布的 v0.10.0 版本说明见 docs/release_notes/v0.10.0.md系统梳理该版本在 Dapr Runtime、CLI、组件生态与各语言 SDK 中的关键演进重点剖析三项影响深远的破坏性变更——多 Pub/Sub 组件支持、状态重试选项移除、Java SDK 服务调用签名变化——并结合当前仓库源码如 pkg/api/http/http.go、pkg/api/grpc/grpc.go印证其底层实现。读完本文你将掌握从旧版本平滑升级到 0.10.0 的完整操作路径自托管与 Kubernetes 双场景理解新版发布 API 与状态 API 的调用形态并能够正确迁移你的应用代码。版本定位v0.10.0 是 Dapr 走向 v1.0 前的重要里程碑。从该版本开始发布重心明显转向生产环境中的稳定性、可靠性与可升级性upgradability等运维议题同时持续吸纳社区与用户的反馈并修复缺陷。一、版本亮点总览v0.10.0 在距离上一个版本六周后发布核心亮点如下多 Pub/Sub 组件支持可以在同一个应用中同时发布/订阅来自多个不同 pub/sub 组件的主题发布端与订阅端 API 均发生变更见下文破坏性变更章节Windows 容器支持Dapr 运行时开始支持在 Windows 容器中运行适用于 Kubernetes 混合集群场景状态存储新增 Bulk Get API一次性按批量键读取状态显著降低多次往返开销状态存储新增事务TransactionsAPI在支持事务的状态组件上以原子方式执行多键操作Kubernetes 控制平面高可用HAHelm Chart 新增 HA 选项控制平面可多副本运行Kubernetes 生产部署与升级指南官方文档新增生产环境部署与升级最佳实践各语言 SDK 增强Go、Python SDK 能力大幅提升Dashboard 也新增多项特性CLI 新增命令查看根证书到期时间、导出 TLS 证书、init -k支持自定义命名空间新组件InfluxDB 输出绑定、非交互式 OAuth2 中间件client credentials 授权、Azure Blob Storage 状态存储。二、Dapr Runtime 新特性与源码佐证2.1 多 Pub/Sub 组件支持0.10.0 之前Dapr 运行时同一时间只能加载一个 pub/sub 组件0.10.0 之后支持同时加载多个 pub/sub 组件应用可针对不同组件发布与订阅。从当前仓库源码可以印证这一点。在 pkg/runtime/compstore/subscriptions.go 中订阅结构NamedSubscription显式携带PubsubName字段PubsubName: comp.Spec.Pubsubname用于标识该订阅属于哪个 pub/sub 组件同文件后续代码如sub.PubsubName || sub.Topic的键构造说明订阅在内部以「组件名 主题」为维度去重与路由这正是多组件并存的数据结构基础。在运行时组件加载侧pkg/runtime/processor/pubsub/pubsub.go 通过pubsubName : comp.Name将每个组件以其配置名注册进compStore多个组件可各自独立注册互不干扰。2.2 状态存储 Bulk Get APIBulk Get 允许一次请求读取多个键的状态gRPC 与 HTTP 两个通道均已支持。gRPC服务端点注册见 pkg/api/grpc/endpoints.gov1.Dapr/GetBulkState。其核心实现位于 pkg/api/grpc/grpc.go将请求中的键数组批量转换为state.GetRequest通过store.BulkGet(ctx, reqs, state.BulkGetOpts{Parallelism: ...})调用底层状态组件返回的每个条目包含键、数据、ETag 与可选的单键错误若状态存储启用了加密还会对每个条目单独尝试解密encryption.TryDecryptValue。HTTP路由注册见 pkg/api/http/http.goPOST/PUT /v1.0/state/{storeName}/bulk处理器为onBulkGetStatepkg/api/http/http.go同样通过store.BulkGet执行并挂载弹性策略resiliency policy与组件监控指标。2.3 状态存储事务TransactionsAPI事务 API 让支持事务的状态组件如 Redis、SQL Server 等能够以原子方式在一次调用中执行多个 upsert/delete 操作。gRPC端点v1.Dapr/ExecuteStateTransaction注册于 pkg/api/grpc/endpoints.go实现位于 pkg/api/grpc/grpc.go底层判断存储是否实现state.TransactionalStore接口并调用其Multi方法参见 pkg/api/http/http.go 中 HTTP 侧onPostStateTransaction的同类逻辑。HTTP路由注册见 pkg/api/http/http.goPOST/PUT /v1.0/state/{storeName}/transaction。2.4 其他运行时改进Kubernetes Operator 重构使用 Kubebuilder 重构支持多副本协调multi-replica reconciliation为控制平面高可用奠定基础感谢贡献者 yittgWindows 容器支持运行时可在 Windows 容器中运行并新增了对应的 Windows e2e 测试稳定性修复修复高 RPS 下的 actor 稳定性 bug、actor 提醒reminder重复触发与覆盖overwritebug、actor 定时器timer的竞态条件可观测性新增 stdout 日志导出器感谢 brendandburns修复grpc_client_method与grpc_client_status指标标签恒为空的问题感谢 kirk91Grafana 仪表盘随发布资产一起提供gRPC 调用新增traceparent头以支持 W3C 分布式追踪安全启用 API 认证令牌时sidecar 启动会打印相应日志条目协议与规范Pub/Sub 云事件CloudEvents升级至 1.0 规范并在规范中新增topic字段感谢 allymparker组件定义引入版本化机制versioning scheme工程化Go 版本升级到 1.15移除 glog 依赖与冗余命令行参数移除状态重试选项见破坏性变更章节修复 sidecar 首次安装后无法解析密钥secrets的问题。三、Dapr CLI 新能力0.10.0 的 CLIdapr命令围绕多 pub/sub、证书管理与安装体验做了如下变更publish命令支持多 pub/sub新增必填参数--pubsub指定目标组件例如dapr publish --pubsub pubsub --topic myevent --data { name: yoda }新增导出 Kubernetes 集群中现有 TLS 证书的命令新增查看 TLS 根证书到期日期的命令dapr init -kKubernetes 初始化支持自定义命名空间、HA 模式以及启用/禁用 TLSCLI 命令行参数调整为与daprd保持一致修复 standalone/Kubernetes 两种模式下版本标志不一致的问题自托管模式下init与uninstall行为调整详见升级章节的说明。四、组件生态新增与修复新增 OAuth2 客户端授权中间件client credentials 授权模式非交互式感谢 h2floh新增 Azure Blob Storage 状态存储感谢 ksivamuthu新增 InfluxDB 输出绑定感谢 gbaekeMQTT pub/sub 新增 TLS 支持感谢 kumaya修复SQL Server 在 gRPC 下的数据序列化问题与连接泄漏问题修复 RabbitMQ pub/sub 消费者独占性consumer exclusivitybug输出绑定output binding操作列表更新事务性状态请求新增Metadata字段Kubernetes events 输入绑定支持新的负载格式。五、各语言 SDK 同步演进多 pub/sub 是所有 SDK 的共同主线同时每个 SDK 各有侧重SDK主要变更Java多 pub/sub 支持invokeService增加HttpExtension参数破坏性变更见下文移除状态重试选项修复 gRPC manager 无法关闭的问题.NET多 pub/sub 支持新增 Bulk Get API 与 API 令牌注入proto 包改用Any类型感谢 akkie修复无 model binder 时的空引用异常感谢 altinorenGo多 pub/sub 支持新增 Bulk Get API 与状态事务 API新增服务端回调包装器移除状态重试选项Python多 pub/sub 支持新增状态存储、密钥、pub/sub、bindings API 的包装方法新增 gRPC 包装层与 app 回调服务端包装支持基于 FastAPI 的 actor 服务支持 API 令牌认证Rust多 pub/sub 支持JavaScript多 pub/sub 支持各 SDK 的订阅结构均已新增pubsubName字段publish 方法也统一接收pubsubName参数。升级到 0.10.0 时务必同步升级你所使用的 SDK 版本。六、破坏性变更详解本版本包含若干破坏性变更breaking changes升级前请务必阅读本节。6.1 多 Pub/Sub 带来的 API 变更发布端Publisher发布 API 路径新增了 pub/sub 组件名参数旧POST http://localhost:daprPort/v1.0/publish/topic 新POST http://localhost:daprPort/v1.0/publish/pubsubname/topic从当前仓库源码可以印证新路径的形态pkg/api/http/http.go 将发布路由注册为publish/{pubsubname}/*处理器onPublish并在 pkg/api/http/http.go 的onPublish实现中通过validateAndGetPubsubAndTopic解析组件名与主题。测试用例同样验证了该路径约定见 pkg/api/http/http_test.goapiPath : apiVersionV1 /publish/pubsubname/topic。订阅端Subscriber订阅负载中新增了pubsubName字段用于声明该订阅属于哪个 pub/sub 组件。以下示例以 JavaScript 为例其他语言同样适用// 旧 app.get(/dapr/subscribe, (req, res) { res.json([ { topic: newOrder, route: orders, } ]); }) // 新 app.get(/dapr/subscribe, (req, res) { res.json([ { topic: newOrder, route: orders, pubsubName: messagebus } ]); })CLI publish 命令dapr publish现在要求必填--pubsub参数dapr publish --pubsub pubsub --topic myevent --data { name: yoda }6.2 状态重试选项移除状态操作的重试retry选项被移除。如果此前从未使用过重试选项则该变更对你不构成影响。官方状态 API 参考文档已同步更新移除重试相关参数。仓库中 gRPC 状态相关实现如 pkg/api/grpc/grpc.go 的GetBulkState、GetState等已不再包含重试参数重试能力统一交由全局的弹性策略resiliency policy承载。6.3 Java SDK 服务调用签名变更Service Invocation 方法现在必须接收一个HttpExtension参数// 旧 client.invokeService(serviceAppId, method, message); // 新 client.invokeService(serviceAppId, method, message, HttpExtension.NONE);6.4 CLI 安装路径变更dapr init现在将运行时二进制daprd安装到Mac/Linux$HOME/.dapr/binWindows%USERPROFILE%\.dapr\同时dapr init与dapr uninstall命令中的--install-path参数已被移除。七、升级到 Dapr 0.10.0 指南官方说明特别提示本版本包含数个破坏性变更见上文请按照以下步骤执行避免在终端看到红色报错。7.1 自托管Local Machine / Self-hosted升级第一步使用当前已安装的 CLI 卸载 Dapr。该操作会删除默认的$HOME/.dapr目录、二进制文件以及dapr_redis、dapr_placement、dapr_zipkin容器。Linux 用户若将二进制安装到了默认路径/usr/local/bin/或 docker 命令需要 sudo则需要使用 sudo 执行dapr uninstall --all第二步获取最新版 CLI下载后将dapr二进制放入 PATH。第三步初始化dapr init等待更新完成后通过以下命令确认运行时版本为 0.10.0dapr --version7.2 Kubernetes 升级从 0.9.0 升级使用 Helm 安装如果此前使用 Helm 安装从本版本开始支持直接升级 Dapr 到新版本如果此前使用 CLI 安装请直接跳到「从零开始Starting fresh」小节。特别说明仅在本版本中由于 Go 1.15 的破坏性变更Go 1.15 中 CommonName 相关变更旧证书将不会延续使用升级后需要重新签发证书。第一步获取最新 CLI按上文方式获取最新版 Dapr CLI 并放入 PATH。第二步执行升级更新 Helm 仓库helm repo update执行升级命令使用--reset-values以重置为 Chart 默认值helm upgrade dapr dapr/dapr --version 0.10.0 --namespace dapr-system --reset-values等待所有 Pod 进入 Running 状态kubectl get pods -w -n dapr-system验证控制平面已更新且健康dapr status -k最后对启用 Dapr 的 Deployment 执行滚动重启使新 Pod 拉起新版本 sidecarkubectl rollout restart deploy/DEPLOYMENT-NAME从零开始Starting fresh如果此前使用 Dapr CLI 安装请使用现有 CLI 卸载可忽略出现的任何错误dapr uninstall --kubernetes如果此前使用Helm 2.X安装helm del --purge dapr如果此前使用Helm 3.X安装helm uninstall dapr -n dapr-system更新 Helm 仓库helm repo update若你使用 Helm 将 Dapr 安装到了dapr-system之外的命名空间请相应调整卸载命令中的命名空间。随后可按官方安装指南使用 Helm 3 重新安装或直接使用 CLIdapr init --kubernetes安装后验证验证控制平面 Pod 正在运行且健康dapr status -k预期输出示例四个控制平面服务均处于 Running 状态且版本为 0.10.0dapr-sentry dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-operator dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-sidecar-injector dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21 dapr-placement dapr-system True Running 0.10.0 1d 2020-08-18 10:15.21安装完成后对部署执行滚动重启以拉取新版本 sidecarkubectl rollout restart deploy/deployment-name八、与当前仓库的对应关系v0.10.0 中引入的核心能力在当前仓库代码中均有对应实现可供读者深入研读多 pub/sub 组件订阅结构携带PubsubName见 pkg/runtime/compstore/subscriptions.go组件按名注册见 pkg/runtime/processor/pubsub/pubsub.go发布 API含组件名路径路由注册 pkg/api/http/http.go、处理器实现 pkg/api/http/http.go、gRPC 校验逻辑 pkg/api/grpc/grpc.go、路径测试 pkg/api/http/http_test.go状态 Bulk GetgRPC 端点 pkg/api/grpc/endpoints.go、实现 pkg/api/grpc/grpc.go、HTTP 路由与处理器 pkg/api/http/http.go 与 pkg/api/http/http.go状态事务 APIgRPC 端点 pkg/api/grpc/endpoints.go、实现 pkg/api/grpc/grpc.go、HTTP 路由 pkg/api/http/http.go、底层TransactionalStore.Multi调用 pkg/api/http/http.go。结语Dapr v0.10.0 是 v1.0 前夕的一次重要能力整合多 pub/sub 组件让消息路由的拓扑表达能力大幅提升状态 Bulk Get 与事务 API 补齐了高性能与原子操作两大关键诉求Kubernetes 控制平面高可用与生产升级指南则标志着 Dapr 正式向生产环境迈进。对于开发者而言升级的核心动作可归纳为三点发布/订阅 API 补上组件名、移除状态重试相关配置、Java 服务调用补上HttpExtension参数。完成这三处适配后即可按本文的升级步骤平滑迁移到 0.10.0。【免费下载链接】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),仅供参考
返回列表