Cadence工作流集群能否无停机切换到基于ElasticSearch的高级可见性功能?
Cadence可见性存储从Cassandra无停机切换到ElasticSearch方案可行性说明
结论:该无停机切换方案完全可行,Cadence原生支持双写可见性存储的灰度切换能力,可完全满足你提出的三项无停机要求,具体落地流程如下:
前置准备阶段
- 提前部署与当前Cadence版本兼容的ElasticSearch集群,导入Cadence官方提供的可见性索引模板,完成权限配置确保Cadence服务可正常读写ES
- 修改Cadence集群配置:
- 开启
enableDoubleVisibility参数为true - 保留Cassandra作为主可见性存储,新增ES作为从可见性存储
- 配置读请求默认优先走主存储Cassandra,ES仅作为备份写入节点
- 开启
- 滚动重启所有Cadence服务节点(frontend、history、matching、worker),滚动重启过程不会中断业务,已有工作流可继续执行,新工作流也可正常提交
双跑校验阶段
- 保持双写配置运行至少一个集群最长工作流的运行周期,确保所有存量工作流的可见性事件均已同步写入ES
- 抽样比对Cassandra与ES中可见性数据的一致性,包括工作流执行状态、起止时间、自定义搜索属性等,同时验证Java客户端
getResult调用完全正常,该阶段所有读请求仍走Cassandra,不会对业务逻辑产生任何影响 - 该阶段已经完全满足三项无停机要求:
- 切换前已启动的工作流可正常执行直至结束
- 切换过程中新提交的工作流可正常启动运行
- 所有工作流的基础可见性功能均可正常使用,
getResult调用依赖的可见性查询能力完全正常
流量切换阶段
- 灰度调整可见性读流量配比,先切1%流量到ES,观察服务错误日志、业务调用成功率,尤其是
getResult调用的耗时和成功率是否出现异常 - 无异常情况下逐步提升读流量占比到10%、50%、100%,整个过程可随时回滚,只要将读流量切回Cassandra即可
- 全量读流量切到ES且稳定运行72小时以上后,关闭双写配置,将主可见性存储调整为ES,移除Cassandra可见性存储相关配置
- 滚动重启所有Cadence服务节点,完成最终切换
注意事项
- 若当前Cadence版本低于0.22.0,需先升级到支持双可见性存储的版本再执行切换
- 业务自定义的搜索属性需提前在ES索引中完成字段映射配置,避免双写阶段数据写入失败
- 建议先在预发环境完整模拟切换流程,验证所有配置和业务逻辑正常后再在生产环境执行
内容的提问来源于stack exchange,提问作者Tamas Weisz
相关产品推荐
相关产品推荐

