背景
已有的一个 service 服务,虽然提供了 rpc 服务,但是是业务核心。
为了避免影响,batch 跑批服务希望把当用的 rpc 服务部分本地化,避免远程调用损耗+影响业务。
但是要如何是如何实现这个拆分呢?
方案1-直接 copy
方式:直接把 rpc 从头到尾复制一遍到 batch。
优点:service 无影响,不需要回归验证。
缺点:需要拷贝的地方比较多,且后续修改需要改2个地方。
方案2-代码拆分为共同依赖
方式:把这个服务,或者相关的一些服务,抽为一个通用的 common 包,service 和 batch 共同依赖
优点:一次修改即可
缺点:对 service 影响比较大,存在风险。抽离工作量也比较大。
方案3-折中
方式: 最后决定选择一个比较折中的方式。把 rpc 这个服务的核心实现部分打包,这部分比较稳定,同时 service 可以基本保持不变,直接 service 的子模块打包,然后自己引用。(类似 facade)
batch 引用这个实现部分,然后自己实现上层的基本逻辑
优点:后续修改基本也是修改一次,对 service 影响比较少
缺点:需要子模块打包,同时 batch 需要实现一部分自己的逻辑。可能需要多次修改。
小结
几种方式都可以。
可以结合自己的场景使用。