作者回复: 应该是必须“按并行运行和绞杀植物模式去处理”,否则风险太大。 如果要绞杀一个表,可以: 1. 先建立新表,将旧表数据迁移到新表中,这时新表没人用,所以是安全的 2. 在读取时,通过开关控制读取新旧表,可以进行对比测试 3. 在写入时,新旧表双写 这样在并行运行一段时间后,你就有信心用新表替换旧表了。
作者回复: 感谢分享。 对于作业第二题,其实我想问的是,除了课中给出的方案外,还有没有其他方案,你可以再思考一下。 对于你的问题,你其实缺少的是一个特性开关管理和A/B测试工具,很多开源工具其实是两者结合的。我推荐几个,你可以调研一下看哪个适合。包括: - ConfigCat(configcat.com/) - Flagger(flagger.app) - Flagr(github.com/checkr/flagr)
作者回复: 如果表结构都变了,加开关就很难了,需要两套schema以及数据备份。其实我课程中一直强调一点,就是一次只做一件事,数据拆分和数据库重新设计不要同时进行。
作者回复: 感谢分享。 不知道你说的第1个方案是不是指给请求加correlation id,如果是的话,可以考虑开发一个库,从切面层在request head里加,后续的转发请求也都在head里加上同样的id,方便跟踪。
作者回复: 薪酬服务完全拆分出去了,因此对于遗留系统通知模块的依赖,需要替换成API调用
作者回复: 绞杀植物、抽象分支、扩张收缩、并行运行,这些模式都有相似之处,但是关注点不同,所以名字不一样。绞杀植物主要关注的是长期共存然后替换;抽象分支关注建立抽象层,再逐个替换;扩张收缩关注的是先建新接口,再删除旧接口;并行运行关注的是同时运行,A/B测试加以验证。
作者回复: 可以用SonarQube扫描代码,逐个缺陷去修复,修复之后再扫描代码,对比缺陷数量。 重构主要的思路就是坏味道驱动,重构后的代码没有明显的坏味道就可以了。希望对你有帮助。
作者回复: 开关工具其实很简单,读配置或数据库就可以了,完全可以自己写。现成的工具也是有的,ConfigCat、Flagr、Flagger等,但并不一定适配你的场景了。