微服务之间如何共享数据

由于服务拆分之后,各服务之间只负责自己相关的业务领域,但是对于整体系统来说,总会遇到跨服务共享一些数据的需求,比如 Customer Service 想调用 Payment Service 客户最近5条订单数据

微服务之间如何共享数据_第1张图片

调用方式有如下几种

1. 直接访问对方DB

微服务之间如何共享数据_第2张图片

缺点是显而易见的,直接访问对方DB了,那还分什么服务呢?

2. Payment Service 开发HTTP接口供 Customer Service 调用

微服务之间如何共享数据_第3张图片

这种方式是很多人常规的想法,其实也无可厚非,在比较小规模的系统内也是可行的一种方案,但是有着一些缺点

1. 系统内部间调用,HTTP接口方案虽然通用,但效率不是最高

2. 接口缓存层面如果做在 Payment Service 上,那么在下单时还需要额外关注这个接口的缓存刷新,或者采用接口定时缓存失效的策略,但无论哪种策略都无法解决获取数量可能变化导致的缓存范围不可控的问题。随时有可能由获取5条数据变成10条

3. 扩展性不佳,当出现有多个 Payment Service 时,每个 Service 提供的接口可能并不一致,需要单独处理,并且也无法做到数据的合并和排序

3. 使用消息队列,当 Payment Service 有新数据是就发布,Customer Service 进行订阅,这样只需要在Customer Service中保留需要的前5条数据即可

微服务之间如何共享数据_第4张图片

 

原文:

https://www.ru-rocker.com/2020/08/23/a-food-for-thought-how-to-share-data-among-services-in-a-microservice-world-part-1/

https://www.ru-rocker.com/2020/08/23/a-food-for-thought-how-to-share-data-among-services-in-a-microservice-world-part-2/

你可能感兴趣的:(微服务)