背景

已有的一个 service 服务,虽然提供了 rpc 服务,但是是业务核心。

为了避免影响,batch 跑批服务希望把当用的 rpc 服务部分本地化,避免远程调用损耗+影响业务。

但是要如何是如何实现这个拆分呢?

方案1-直接 copy

方式:直接把 rpc 从头到尾复制一遍到 batch。

优点:service 无影响,不需要回归验证。

缺点:需要拷贝的地方比较多,且后续修改需要改2个地方。

方案2-代码拆分为共同依赖

方式:把这个服务,或者相关的一些服务,抽为一个通用的 common 包,service 和 batch 共同依赖

优点:一次修改即可

缺点:对 service 影响比较大,存在风险。抽离工作量也比较大。

方案3-折中

方式: 最后决定选择一个比较折中的方式。把 rpc 这个服务的核心实现部分打包,这部分比较稳定,同时 service 可以基本保持不变,直接 service 的子模块打包,然后自己引用。(类似 facade)

batch 引用这个实现部分,然后自己实现上层的基本逻辑

优点:后续修改基本也是修改一次,对 service 影响比较少

缺点:需要子模块打包,同时 batch 需要实现一部分自己的逻辑。可能需要多次修改。

小结

几种方式都可以。

可以结合自己的场景使用。