=== loveFluffy1 is now known as loveFluffy === qiao|afk is now known as qiao === toxync11- is now known as toxync11 [06:30] 本周要加税到25%了 [08:24] cherrot, 大佬啊有问题请教 [08:26] cherrot, 我想做一个微服务间接口依赖的分析工具,有什么好的建议吗?类似我改动了服务A内接口a的调用的函数,服务B的接口b调用了服务A中的a,然后我能改动a之后我能知道服务B的接口b会受到影响 [08:26] cherrot, 粗糙的想法一个静态代码分析,一个是用什么已知的调用栈走一遍然后过滤 [08:28] violetzijing: 自己维护一个有向图? [08:28] violetzijing: 竟然搞起静态分析了。。 [08:28] 人肉维护? [08:29] violetzijing: 没搞过,没思路。但微服务不应该打破向下兼容 [08:29] 人肉维护不如代码 [08:29] 人懒,而且人会离职 [08:29] cherrot, 我们打破了两次 [08:30] cherrot, 一次 P1 一次 P2 [08:30] 不能再出了 [08:30] violetzijing: 补充单测可行么 [08:30] violetzijing: 因为就算有依赖关系,又能起什么作用么? [08:31] cherrot, 不行,服务太多了,而且没有服务间统一的单测 [08:31] cherrot, 开发大家肯定只看自己的,出问题就开始杀别人了 [08:31] cherrot, 起码有个调用链,有个 warning 吧 [08:31] violetzijing: 顶多知道这个改动可能影响到a,b,c服务,但具体会不会产生影响,你也分析不出来 [08:32] cherrot, 我们昨天的 bug 就是服务 A 修改了升级了,服务 B 并没有考虑到影响,没有升级,当然这也是接口变动直接导致的 [08:32] violetzijing: 预发布升级过程中发现不了么 [08:33] cherrot, 我现在改我被别人依赖的接口的时候都是跑去挨个问一遍他们有没有问题,而且随时可能有新的服务调用到我的接口,我如果不去主动搜索或者别人来问我,我可能是不知道的 [08:33] cherrot, 巧的就是条件巧,预发布的时候没发现 [08:34] violetzijing: 我猜go应该有静态分析工具列出包依赖,你过滤出rpc相关的包应该就能出依赖图了 [08:35] cherrot, 可以,我去探索一下 [08:35] violetzijing: 我们更麻烦,所以向下兼容是要仔细考虑的,但之前测试没覆盖的case出了问题也只能认。很多策略上的假设隐含打破了向下兼容,但代码上不容易看出来,没办法。 [08:37] violetzijing: 重点还是得放在API的设计review阶段。如果拿不准有没有影响,就宁愿用新接口,升级rpc版本,这样切割的更干净。如果想废弃老接口的支持,只用广播一遍就行了。 [08:37] violetzijing: 这样大家的依赖关系就是“你有没有依赖我的v2版本的接口“,而不是”你有没有依赖我v2接口里的xxx特性“ [08:38] 只增不改不删 [08:38] cherrot, hmm 接口改动我们吃了这次亏肯定会注意了,现在还怕的就是逻辑改动了 lol [08:41] violetzijing: 看来你现在只需要一个“我要做改动了应该广播给谁”的工具 :D [08:41] * cherrot 说起向下兼容就绝望 [08:43] cherrot, 差不多的东西 [08:43] cherrot, 二十多个微服务,身体受不了啊 [08:43] cherrot, 我们的 service 还是处在调用链下层的,大家都来调用 [08:46] 随手一搜还挺多~ https://www.google.com/search?q=go+dependency+graph&oq=go+dependency+graph [08:46] ⇪ f: go dependency graph - Google Search [08:49] cherrot, cool === toxync11- is now known as toxync11 === qiao is now known as qiao|away === loveFluffy1 is now known as loveFluffy