ARTICLE DETAIL

资讯详情

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

Cadence Cassandra Schema 管理指南:使用 cadence-cassandra-tool 完成建库、版本化迁移与生产部署

Cadence Cassandra Schema 管理指南:使用 cadence-cassandra-tool 完成建库、版本化迁移与生产部署 后端任务调度工作流自动化微服务【免费下载链接】cadenceCadence is a distributed, scalable, durable, and highly available orchestration engine to execute asynchronous long-running business logic in a scalable and resilient way.项目地址https://gitcode.com/gh_mirrors/cad/cadence点击查看免费下载Cadence 是一个分布式、可扩展、持久且高可用的工作流编排引擎其默认的持久化后端之一便是 Apache Cassandra。本文围绕仓库中 tools/cassandra/README.md 所描述的核心操作系统讲解cadence-cassandra-tool的获取方式、本地开发环境一键建库、生产环境一次性初始化、以及随版本发布滚动升级 schema 的完整流程并结合源码剖析其背后的版本化管理机制。读完本文你将能够独立完成 Cadence 在 Cassandra 上的 Keyspace 创建、schema 版本初始化、增量升级与兼容性校验并理解每一步命令在源码层的实际行为。一、cadence-cassandra-tool 是什么cadence-cassandra-tool是 Cadence 仓库中专门用于 Cassandra 运维的命令行工具。按照 tools/cassandra/README.md 的说明该包承载了 cadence cassandra operations 的全部工具化能力。其入口定义在 tools/cassandra/main.go通过BuildCLIOptions()构建一个基于urfave/cli的命令行应用工具名为cadence-cassandra-tool版本号为0.0.1。从源码结构看该工具实际由三层组成tools/cassandra/main.go定义全局连接参数与三个子命令setup-schema、update-schema、create-Keyspacetools/cassandra/handler.go实现每个子命令对应的处理器函数setupSchema、updateSchema、createKeyspace同时提供VerifyCompatibleVersion/CheckCompatibleVersion供服务端在启动时校验 schema 版本兼容性tools/cassandra/cqlclient.go基于 gocql 驱动封装CqlClient负责执行 CQL 语句、读写 schema 版本表等底层操作。它支持的三个核心子命令分别是子命令别名用途setup-schemasetup在指定 Keyspace 中初始化 schema 版本表并可加载初始 .cql schema 文件update-schemaupdate将 Keyspace 中的 schema 升级到指定或最新版本支持 dryrun 预演create-Keyspacecreate创建 Keyspace未指定数据中心时使用 SimpleStrategy指定--dc时使用 NetworkTopologyStrategy二、获取 cadence-cassandra-tool方式一通过 Homebrew 安装生产环境中可直接通过 Homebrew 安装官方 CLIbrew install cadence-workflow该包内置了cadence-cassandra-toolschema 文件随包安装到/usr/local/etc/cadence/schema/。如果需要安装旧版本的 schema 工具可以参考官方讨论区的说明但更推荐的方式是用新版本的 schema 工具配合旧版本的 schema 文件使用。只需在仓库中检出旧版本即可例如git checkout v0.21.3这样即可获得 v0.21.3 版本的 schema 目录 中的 schema 文件配合新版工具完成旧库的初始化或升级。方式二自行编译在仓库根目录执行make cadence-cassandra-tool该 Makefile 目标定义于 Makefile实际执行./scripts/build-with-ldflags.sh -o cadence-cassandra-tool cmd/tools/cassandra/main.go产出名为cadence-cassandra-tool的二进制文件。执行make命令的前提条件Go 工具链版本等可参考 CONTRIBUTING.md。提示ubercadence/server的 Docker 镜像中也包含该二进制可直接从镜像中提取使用无需本地编译。三、本地开发环境一键建库对于本地开发tools/cassandra/README.md 给出的方式极为简单make install-schema该 Makefile 目标见 Makefile实际依次执行了 6 条命令等价于完整的建 Keyspace → 初始化版本表 → 升级到最新 schema三步流程分别作用于cadence与cadence_visibility两个 Keyspace./cadence-cassandra-tool create -k cadence --rf 1 ./cadence-cassandra-tool -k cadence setup-schema -v 0.0 ./cadence-cassandra-tool -k cadence update-schema -d ./schema/cassandra/cadence/versioned ./cadence-cassandra-tool create -k cadence_visibility --rf 1 ./cadence-cassandra-tool -k cadence_visibility setup-schema -v 0.0 ./cadence-cassandra-tool -k cadence_visibility update-schema -d ./schema/cassandra/visibility/versioned从源码看setup-schema -v 0.0只负责创建版本表并把初始版本记录为0.0真正的表结构由update-schema -d versioned 目录按版本逐个执行。这也是为什么本地开发只需要一条make install-schema即可拥有完整可用的数据库结构。四、生产环境一次性建库与 schema 初始化4.1 创建 Keyspace新集群首次部署时首先需要创建 Keyspacecadence-cassandra-tool --ep $CASSANDRA_SEEDS create -k $KEYSPACE --rf $RF该命令默认使用 Cassandra 的SimpleStrategy复制策略。对于生产环境tools/cassandra/README.md 明确建议使用复制因子为 3 的 NetworkTopologyStrategy。要实现这一点只需增加--dc参数指定数据中心名称源码中doCreateKeyspace见 tools/cassandra/handler.go会判断若datacenter非空则调用CreateNTSKeyspace(name, datacenter)否则调用CreateKeyspace(name)。对应的底层 CQL见 tools/cassandra/cqlclient.go为CREATE KEYSPACE IF NOT EXISTS keyspace WITH replication { class : SimpleStrategy, replication_factor : rf }; -- 或 NetworkTopologyStrategy 形式 CREATE KEYSPACE IF NOT EXISTS keyspace WITH replication { class : NetworkTopologyStrategy, datacenter : rf };注意create-Keyspace命令在连接时会临时使用system系统 KeyspaceSystemKeyspace system因此它不要求目标 Keyspace 已存在。关于节点数与复制因子的规划README 建议参考 Cassandra 容量规划工具同时特别指出Cadence 默认使用Quorum作为读写一致性级别因此复制因子的选择必须与集群规模匹配否则会影响可用性与性能。4.2 初始化 schema 版本表并升级到最新Keyspace 创建完成后需要分别在业务与可见性两个 Keyspace 上初始化版本表并升级 schema以下命令直接取自 tools/cassandra/README.md# 业务数据 Keyspace ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence setup-schema -v 0.0 # 升级到最新版本 ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence update-schema -d ./schema/cassandra/cadence/versioned # 可见性数据 Keyspace ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence_visibility setup-schema -v 0.0 ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence_visibility update-schema -d ./schema/cassandra/visibility/versionedsetup-schema -v 0.0做了什么从 tools/common/schema/setuptask.go 的SetupTask.Run()可以看清其完整流程若指定--overwrite先DropAllTables()清空 Keyspace 内所有表和类型源码实现见 tools/cassandra/cqlclient.go会先列出所有表/类型再逐个DROP默认创建两张 schema 版本表schema_version记录 Keyspace 当前版本与最低兼容版本schema_update_history记录每次升级的旧版本、新版本、manifest MD5 与描述建表 CQL 见 tools/cassandra/cqlclient.go若通过-f指定了 .cql schema 文件则解析并逐条执行其中的 DDL将schema_version表的初始版本写为0.0并在schema_update_history中写入一条initial version记录。也就是说setup-schema建立了版本锚点之后所有update-schema都基于这个锚点向前演进。五、随版本发布滚动升级 schemaschema 初始化完成后后续的升级只能向上进行。每次发版需要升级数据库结构时使用update-schema# 预演dryrun只打印将要执行的 CQL不真正执行 ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence update-schema -d ./schema/cassandra/cadence/versioned -v x.xx -dryrun # 实际执行升级到版本 x.xx ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence update-schema -d ./schema/cassandra/cadence/versioned -v x.xx # 可见性 Keyspace 同样处理 ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence_visibility update-schema -d ./schema/cassandra/visibility/versioned -v x.xx --dryrun ./cadence-cassandra-tool -ep 127.0.0.1 -k cadence_visibility update-schema -d ./schema/cassandra/visibility/versioned -v x.xxupdate-schema的底层逻辑见 tools/common/schema/updatetask.goReadSchemaVersion()读取当前版本BuildChangeSet(currVer)扫描versioned目录找出所有大于当前版本且不超过目标版本-v未指定则到最新的版本目录若为--dryrun仅打印每个版本的 manifest 与 CQL 语句不执行否则executeUpdates逐个版本先执行该版本目录中所有 .cql 文件语句再将schema_version更新为新版本、向schema_update_history写入升级日志每步完成会打印Schema updated from X to Y及耗时。值得留意的是升级过程的安全校验见 tools/common/schema/updatetask.go每个版本目录中的 CQL 语句必须以CREATE、ALTER、INSERT、DROP四个白名单前缀之一开头否则报错终止——这是防止意外执行非 DDL/非受控语句的保护机制。版本目录与 manifest 格式versioned目录下每个子目录代表一个 schema 版本形如v0.1、v0.2…也支持s0.0-0.23这种合并压缩目录用于一次性从旧版本跳到新版本目录内包含manifest.json与若干 .cql 文件。manifest 格式参见 schema/cassandra/cadence/versioned/v0.1/manifest.json{ CurrVersion: 0.1, MinCompatibleVersion: 0.1, Description: base version of schema, SchemaUpdateCqlFiles: [ base.cql ] }字段含义tools/common/schema/updatetask.goCurrVersion本版本号须与目录名一致MinCompatibleVersion代码能够兼容的最低 schema 版本Description本次变更描述SchemaUpdateCqlFiles本次升级需要执行的 .cql 文件列表manifest 文件本身还会被计算 MD5写入schema_update_history以便审计。六、全局连接参数与常用 Flag 速查cadence-cassandra-tool的全局参数定义在 tools/cassandra/main.go除--ep、-k等常用项外还支持认证、TLS 与超时控制Flag别名默认值说明环境变量--endpoint-ep127.0.0.1Cassandra 主机名或 IPCASSANDRA_HOST--port-p9042Cassandra 端口CASSANDRA_DB_PORT--user-u空认证用户名CASSANDRA_USER--password-pw空认证密码CASSANDRA_PASSWORD--allowed-authenticators-aa空自定义认证器白名单---timeout-t30秒请求超时CASSANDRA_TIMEOUT--connect-timeout-2秒连接超时---keyspace-kcadence目标 Keyspace 名CASSANDRA_KEYSPACE--quiet-qfalse出错时不返回非零退出码---protocol-version-pv自动CQL 协议版本CASSANDRA_PROTO_VERSION--tls-false启用 TLSCASSANDRA_ENABLE_TLS--tls-cert-file/--tls-key-file/--tls-ca-file-空TLS 证书/私钥/CA 文件CASSANDRA_TLS_CERT/_KEY/_CA--tls-enable-host-verification-false启用 TLS 主机名校验CASSANDRA_TLS_VERIFY_HOST--tls-server-name-空TLS ServerNameSNICASSANDRA_TLS_SERVER_NAME子命令专属参数setup-schema-v/--version初始版本不可与--disable-versioning同用、-f/--schema-file.cql 文件路径、-d/--disable-versioning跳过版本表创建、-o/--overwrite先清空所有表再建update-schema-v/--version目标版本缺省为最新、-d/--schema-dirversioned 目录、--dryrun仅预演create-Keyspace-k/--keyspaceKeyspace 名、--dc/--datacenter指定则用 NetworkTopologyStrategy、--rf/--replication-factor复制因子默认 1。参数校验逻辑见 tools/cassandra/handler.goendpoint 与 keyspace 为必填端口缺省补9042复制因子缺省补1。客户端创建时带有指数退避重试初始 1 秒、最大 10 秒、最多 3 次见 tools/cassandra/cqlclient.go可在 Cassandra 尚未就绪时自动等待重连。七、服务端启动时的 schema 版本兼容性校验除运维工具外Cadence 服务端在启动时也会校验 Cassandra 中的 schema 版本是否与当前代码版本兼容。VerifyCompatibleVersion见 tools/cassandra/handler.go会同时检查配置中的默认数据存储与可见性存储对每个 DataStore若使用NoSQL插件则直接校验若使用ShardedNoSQL分片存储则遍历所有分片连接逐一校验插件名必须为cassandra否则报unknown NoSQL plugin name最终调用schema.VerifyCompatibleVersion比对 Keyspace 中schema_version表的当前版本是否 ≥ 代码期望版本期望版本常量见 schema/cassandra/version.go业务库Version 0.53、可见性库VisibilityVersion 0.10。这样做的意义在于如果升级 schema 后发生了代码回滚代码期望的版本会低于 Cassandra 中实际的版本服务端可以据此感知到不匹配并提前告警避免在错误的 schema 状态下运行。八、schema 文件目录结构与扩展新版本本仓库的 Cassandra schema 文件统一维护在 schema/cassandra 目录下结构如下参见 schema/cassandra/README.mdschema/cassandra/ ├── cadence/ # 业务数据模型 │ ├── keyspace.cql # Keyspace 定义 │ ├── schema.cql # 最新完整 schema 快照 │ └── versioned/ # 每个版本一个子目录 │ ├── v0.1/ (manifest.json base.cql) │ ├── v0.2/ ... │ └── s0.0-0.23/ # 合并压缩版本从 0.0 直达 0.23 └── visibility/ # 可见性数据模型 ├── keyspace.cql ├── schema.cql └── versioned/ ├── v0.1/ ... └── v0.10/当需要为业务新增 schema 变更时官方建议的流程为将变更追加到对应 Keyspace 的schema.cql最新快照在versioned下新建版本目录如vx.x写入manifest.json和变更 .cql 文件同步更新 tools/common/schema/updatetask_test.go 中TestReadSchemaDirFromEmbeddings的版本清单使用./cadence-cassandra-tool执行update-schema完成升级。业务 Keyspace 目前已有 53 个增量版本v0.1 → v0.53可见性 Keyspace 有 10 个版本v0.1 → v0.10完整版本清单可在 schema/cassandra/cadence/versioned 与 schema/cassandra/visibility/versioned 中查看。每个版本目录均需满足 manifest 中的CurrVersion与目录名一致、CQL 语句符合白名单前缀等约束这些约束由BuildChangeSet在升级时强制校验见 tools/common/schema/updatetask.go。九、多集群场景与常见运维要点多集群XDC部署仓库提供了make install-schema-xdc目标见 Makefile会为cadence_cluster0/1/2与cadence_visibility_cluster0/1/2共 6 个 Keyspace 依次执行建库、setup、update 三步可直接作为跨数据中心部署的参考模板。升级前务必 dryrunupdate-schema --dryrun会打印每个版本的 manifest 与待执行 CQL且不触碰数据库是发版前核对变更影响的标准动作见 tools/common/schema/updatetask.go。-q/--quiet模式适用于自动化脚本——出错时不返回非零退出码避免脚本因数据库未就绪等瞬时故障中断见 tools/cassandra/main.go。一致性级别Cadence 默认以Quorum级别读写生产环境的复制因子与节点规划需与其匹配避免因副本不足导致请求失败。通过 tools/cassandra/README.md 提供的一整套命令配合 tools/cassandra 目录下的源码实现与 schema/cassandra 的版本化 schema 文件开发者可以清晰、可控地完成 Cadence 在 Cassandra 上的从零建库到持续演进的全生命周期管理。赞分享后端任务调度工作流自动化微服务【免费下载链接】cadenceCadence is a distributed, scalable, durable, and highly available orchestration engine to execute asynchronous long-running business logic in a scalable and resilient way.项目地址https://gitcode.com/gh_mirrors/cad/cadence点击查看免费下载相关推荐Temporal Cassandra Schema 管理实战temporal-cassandra-tool 从本地开发到生产集群的初始化与版本升级Temporal Cassandra Schema 管理实战temporal cassandra tool 从本地开发到生产集群的初始化与版本升级 Tempo后端工作流自动化任务调度ScyllaDB 模块交互架构解析从模块依赖图到源码级数据通路ScyllaDB 模块交互架构解析从模块依赖图到源码级数据通路 本篇基于仓库中的模块索引文档 docs/dev/modules.md https://link后端任务调度工作流自动化微服务Temporal 服务 Cassandra Schema 目录结构与版本化迁移指南Temporal 服务 Cassandra Schema 目录结构与版本化迁移指南 本指南围绕 Temporal 服务开源仓库中 schema/cassandr后端工作流自动化任务调度上一篇go-gin-example安全扫描使用OWASP ZAP检测安全漏洞下一篇expo/html-elements 演进史从 CHANGELOG 看 Expo 通用语义化 HTML 组件的跨端实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表