通过联动库实现服务间通信

不同层级的服务之间通信

当多个模块依赖同一个基础服务模块时看,模块之间通信开始变得复杂,不同服务间的通信,一般是通过RPC调用,但是对于基础服务的数据,频繁的RPC不仅仅导致业务代码的复杂,而且会带来性能上的损耗。

比如以下模块依赖
这里写图片描述

通讯录作为基础的业务模块是上层业务模块的运行的基础,有大量需要用到通讯录数据的地方。此时可以通过联动库的方式去解决频繁的RPC调用

联动库原理

联动库的实现一般是动态连接库,多个程序共用一个动态连接库,在连接库里进行模块的联动操作。
比如与第三方服务建立一个 socket 连接,并通过该连接将第三方服务的数据联动到本地进程的内存中,同时可以注册相应的回调函数。当第三方服务有变更时通过连接库的 socket 连接推送过来,更新本地数据,并回调到业务层去处理。 而对于的应用层,只需要调用动态库里的函数就可以获取第三方服务的数据了。此时的查询走的是本地的缓存,本质上其实还是RPC,只是将RPC的过程放到了动态库里,对于上层业务来说,只需要在启动的时候执行以下初始化操作即可。

缺点
  1. 联动的数据是直接copy了一份到本地进程的,会占用上层业务的内存资源,这种情况可以通过部分联动来缓解,只联动本进程需要的数据。
  2. 联动过程是在初始化启动的进行的,如果联动多个基础服务,而多个基础服务之间又存在互相联动的过程,可能会出现死循环,因此要设计好各个模块初始化顺序和联动模式。
  3. 依赖联动库的回调是不可靠的,如果模块挂掉或者网络原因,这次回调就会丢失,最终导致服务之间的数据不一致。此时可以考虑持久化事件,当上层服务消费完一个回调事件之后,底层库删除该事件,否则将会重新发起事件的回调。
优点
  1. 将多次RPC转化为一次RPC,提高了响应速度。
  2. 同一个基础服务的库可以提供给多个上层服务,对上层服务的代码侵入性达到最小。当基础服务有变动时,上层服务无需修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值