前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务--数据同步

微服务--数据同步

作者头像
喵叔
发布2022-09-28 09:17:54
6360
发布2022-09-28 09:17:54
举报
文章被收录于专栏:喵叔's 专栏喵叔's 专栏
一、案例

在某商城系统中有如下三个表:

  1. 商品表

序号

字段

1

商品编号

2

名称

3

分类

4

型号

5

生产日期

6

商品条码

  1. 订单表

序号

字段

1

订单编号

2

下单时间

3

下单用户

4

总金额

  1. 子订单表

序号

字段

1

子订单编号

2

商品编号

3

单价

4

数量

  1. 采购表

序号

字段

1

采购编号

2

下单日期

3

供应商

4

总金额

  1. 采购子表

序号

字段

1

子采购编号

2

商品编号

3

单价

4

数量

该商城按照微服务划分原则把商品相关的接口放在了商品服务中,把订单相关的接口放在订单服务中,把采购相关的接口放在采购服务中。并且后台管理系统具有如下查询功能:

  1. 根据商品型号、分类和生产日期、编码查询订单;
  2. 根据商品型号、分类和生产日期、编号查找采购单。

上面的这两种查询功能按照如下顺序执行:

  1. 先按照商品字段查询匹配的商品信息;
  2. 在订单服务中或者采购服务中查找对应商品的订单。

该方案存在一定的问题:

  1. 商品数量越多,查询出来符合要求的商品就越多,那么订单和采购服务查询的效率就会越来越低;
  2. 这里很明显,商品是一个核心服务,依赖这个核心服务的服务会越来越多,商品数量越来越多,那么商品服务就会出现请求超时的情况,进而造成依赖于它的服务也出现请求失败的问题。
二、数据冗余方案

要解决上一小节中的问题,我们首先会先到的方案是数据冗余。所谓的数据冗余就是在订单表和采购单表中增加商品信息的字段。这样每次查询订单和采购单的时候,就不需要依赖商品服务了,那么这里又出现了一个问题,如果商品更新了,怎么同步冗余数据。一般来说有两种方法:

  1. 每次更新商品后,再调用订单和采购服务更新冗余数据。这个方法会出现 数据一致性问题依赖问题。如果订单和采购服务的冗余数据更新失败,那么整个操作流程都要回滚,如果不进行回滚商品服务的数据和订单以及采购服务的冗余数据又不一致了,如果对整个流程进行回滚的话,就出现了非核心服务导致核心服务数据不正常的情况。从职责方面来说,我们更新商品信息关注的是商品服务,但现在又需要去调用其他的服务,显然不合理,并且后续如果被依赖的服务太多,那么每次更新商品服务就要去调用其他服务来更新冗余数据,增加更新失败的风险。
  2. 每次更新商品后,向MQ发布一条消息,订单和采购服务收到消息后更新各自的冗余数据。该方法商品服务不需要调用其他服务,只需要发送一条MQ即可,并且如果订单和采购服务的冗余数据更新失败了只需要使用MQ的重试机制即可,也不会影响到商品数据。但是这个方法依然存在几个问题,首先我们并不是只保存商品信息就行了,还需要保存商品分类和生产批号等冗余信息,那么就要订阅分类和生产批号等变更的消息;其次每个依赖商品服务的服务都需要实现冗余数据更新的逻辑,这样就造成了代码重复问题;最后这么多的消息订阅,就会出现MQ消息类型过多,调试的时候会搞不清楚消息被哪个节点消费了。
三、解耦业务逻辑的数据同步方案

为了解决上面的问题,又引入了解耦业务逻辑的数据同步方案,大致思路如下:

  1. 把商品和相关的表实时同步到需要一台和使用这些数据的数据库中;
  2. 查询采购和订单服务中的数据时,直接关联同步过来的商品表相关数据即可;
  3. 禁止采购和订单服务修改商品和相关的表。

这个方案避免了两个问题:

  1. 商品无需依赖其他服务,如果其他服务的冗余数据同步失败,也不需要回滚自身流程;
  2. 采购和订单服务不需要关注冗余数据同步。

但是这个方案的缺点是,增加了采购和订单数据库的存储空间。

四、总结

本篇文章简要介绍了微服务中数据同步的方案,在实际开发中具体使用哪种方案,视情况而定。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、案例
  • 二、数据冗余方案
  • 三、解耦业务逻辑的数据同步方案
  • 四、总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档