• hk
    2022-11-17 来自河北
    姚老师你好,我想问下,如果重构涉及到数据库表的改造,比如直接用新表,旧表不用了,也可以按并行运行和绞杀植物模式去处理吗?按个人理解,当然理解浅薄,数据库相对于代码和架构,应该是最难的,还牵涉到老数据的问题。所以想请教下老师在这块有什么经验和方法可以更换的处理数据库演进这块?谢谢

    作者回复: 应该是必须“按并行运行和绞杀植物模式去处理”,否则风险太大。 如果要绞杀一个表,可以: 1. 先建立新表,将旧表数据迁移到新表中,这时新表没人用,所以是安全的 2. 在读取时,通过开关控制读取新旧表,可以进行对比测试 3. 在写入时,新旧表双写 这样在并行运行一段时间后,你就有信心用新表替换旧表了。

    
    2
  • 刘大明
    2022-04-22
    试着回答一下第二个问题。 在无测试的情况下重构,我首先想到的第一步,就是通过ide的快捷键直接调用重构的一些操作。在不济,就参考<重构>一书里面的一些操作手法,也可以保障重构的有效性。 上家公司每次重构或者上线一个新功能都喜欢加开关,来手动的去做开关导流,但是确有个坏毛病,旧的代码也不清理,这样就导致,代码里面充斥着各种开关判断。 问题1.关于开关的管理,老师有什么好的经验吗?或者好用的开源软件来去管理,每次开关多达几十个,可能到了后面,很多开关都不知道是什么意思。 问题2.关于导流,老师有什么好的经验吗?上家公司都是我早上上班之后,手动的开启开关,当客户反馈新功能报错或者不好用的时候,在手动的关闭开关,有没有什么好办法,只切部分流量到新功能这种。

    作者回复: 感谢分享。 对于作业第二题,其实我想问的是,除了课中给出的方案外,还有没有其他方案,你可以再思考一下。 对于你的问题,你其实缺少的是一个特性开关管理和A/B测试工具,很多开源工具其实是两者结合的。我推荐几个,你可以调研一下看哪个适合。包括: - ConfigCat(configcat.com/) - Flagger(flagger.app) - Flagr(github.com/checkr/flagr)

    
    2
  • Geek_d8e0b2
    2022-07-09
    目前重构的项目基本上表结构都变化了怎么去做开关呢,非常难受

    作者回复: 如果表结构都变了,加开关就很难了,需要两套schema以及数据备份。其实我课程中一直强调一点,就是一次只做一件事,数据拆分和数据库重新设计不要同时进行。

    
    1
  • aoe
    2022-04-22
    目前正在做一个关于分布式事务最终一致性的重构,开始前的方案有两个: 1、业务开始前生成一个 traceId,将它保存在所有步骤中(工作量太大,放弃) 2、优先解决出问题最多的服务,提升事务的可靠性 - 可行,采用;就按老师说的来:建立开关、增量迁移、并行运行、代码清理 - 因为刚在02课学习了遗留系统现代化的三个原则—2. 以价值驱动为指引 - 完成这个功能带来的收益最大

    作者回复: 感谢分享。 不知道你说的第1个方案是不是指给请求加correlation id,如果是的话,可以考虑开发一个库,从切面层在request head里加,后续的转发请求也都在head里加上同样的id,方便跟踪。

    共 2 条评论
    1
  • Geek_70dc13
    2022-07-22 来自河北
    问题三有点抽象.新薪酬服务在对接一遍通知服务(毕竟最终也是要的)另外新薪酬服务只替换了部分功能,也不妨碍通知功能..没太理解

    作者回复: 薪酬服务完全拆分出去了,因此对于遗留系统通知模块的依赖,需要替换成API调用

    
    
  • Geek_6a6d13
    2022-05-13
    文中在如何实现绞杀植物模式的第三步说,"并行运行和绞杀植物模式一样,也是一种常用的架构现代化模式",可以理解成并行运行既是绞杀模式包含的一部分,同时也可以单独出来成为一种模式,是吗?

    作者回复: 绞杀植物、抽象分支、扩张收缩、并行运行,这些模式都有相似之处,但是关注点不同,所以名字不一样。绞杀植物主要关注的是长期共存然后替换;抽象分支关注建立抽象层,再逐个替换;扩张收缩关注的是先建新接口,再删除旧接口;并行运行关注的是同时运行,A/B测试加以验证。

    
    
  • 子夜枯灯
    2022-05-10
    现在在做的项目重构功能最大一个难处,在于简历测试机制。一个持续开始四五年的项目完全没有单元测试及自动化测试,全靠人力测试。在于验证重构质量上面,老师有哪些推荐的开源工具或者思路提供么?谢谢

    作者回复: 可以用SonarQube扫描代码,逐个缺陷去修复,修复之后再扫描代码,对比缺陷数量。 重构主要的思路就是坏味道驱动,重构后的代码没有明显的坏味道就可以了。希望对你有帮助。

    
    
  • killer
    2022-04-22
    细粒度的每个功能点一个开关,有可能是一个mq的监听方法,或者某个方法级别的,我们要自己开发这种开关工具吗?有没有现成的解决方案

    作者回复: 开关工具其实很简单,读配置或数据库就可以了,完全可以自己写。现成的工具也是有的,ConfigCat、Flagr、Flagger等,但并不一定适配你的场景了。

    
    
  • 公号-技术夜未眠
    2022-04-22
    干货满满,看得出来老师实战经验很丰富
    
    1
  • Spoon
    2023-03-06 来自浙江
    问题3:使用MQ发消息
    
    