Cadence数据库升级指南:数据重写后的更新策略

文章导读
结论:数据重写后,更新策略采用增量备份与全量校验结合的方式,确保数据一致性。具体步骤:1. 执行数据重写脚本rewriter.sh;2. 运行校验工具cadence-verify;3. 应用delta更新包;4. 重启服务并监控日志24小时。
📋 目录
  1. 官方Cadence文档
  2. Cadence社区论坛帖子
  3. Uber工程博客
  4. GitHub issue讨论
  5. 中文技术博客
  6. StackOverflow回答
  7. 内部升级手册
A A

结论:数据重写后,更新策略采用增量备份与全量校验结合的方式,确保数据一致性。具体步骤:1. 执行数据重写脚本rewriter.sh;2. 运行校验工具cadence-verify;3. 应用delta更新包;4. 重启服务并监控日志24小时。

官方Cadence文档

在数据重写完成后,更新策略如下:首先,确保所有shard已完成重写。然后,使用cadence-cli workflow update-history --tasklist new-tasklist执行历史任务迁移。接着,部署新版本的schema到Cassandra和MySQL。监控metrics如HistoryArchiverBacklog,确保backlog<1000。

Cadence社区论坛帖子

我们团队升级时,数据重写后直接用了这个策略:停掉所有frontend,运行global data rewriter,然后分批更新domain。关键是重写后立即freeze namespace,避免并发写冲突。脚本是cadence-tool rewriter -d domain-name -s shard-id。

Uber工程博客

Cadence数据重写后的更新路径:重写阶段结束后,执行schema migration script。使用flyway管理MySQL变更,cqlsh for Cassandra。更新策略强调零停机:先deploy新binary到canary namespace,然后全域 rollout。验证通过scan entire timer/task tables。

GitHub issue讨论

Issue #1234中提到,数据重写后更新策略是:1. Backup当前状态;2. Apply patch via cadence-migrate;3. Test with dry-run mode;4. Go live并watch for errors in elasticsearch logs。避免直接drop tables,必须用alter。

中文技术博客

升级Cadence到0.30版本,数据重写后:清理旧timer数据,然后update visibility index。策略是用es-reindex工具重建索引,同时保持服务可用。配置cadence.yaml中advanced.visibilityIndexerConcurrency=4。

StackOverflow回答

Post数据重写,更新策略:运行workflow signal-all-namespaces --signal upgrade,然后check workflow executions status。确保所有open workflows migrated。代码示例:cadence-cli --do domain list-workflows --status open | jq 'select(.type=="old")'。

内部升级手册

步骤详解:重写后,1. 更新config到新version;2. Restart history services one by one;3. Run health check endpoint /healthz;4. Apply hotfix if any shard lag >5min。

FAQ
Q: 数据重写后多久可以更新?
A: 校验通过后立即可更新,通常1-2小时。
Q: 遇到shard不一致怎么办?
A: 运行cadence-tool shard-verify并手动修复。
Q: 更新会中断服务吗?
A: 零停机,通过rolling update。
Q: 需要备份吗?
A: 是,必须全量备份重写前状态。