刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

试题四(共25分)

阅读以下关于微服务架构中的数据管理的叙述,在答题纸上回答问题1至问题3。

【说明】

某大型电商平台构建了一个在线B2B商店系统。该系统采用微服务架构,将系统功能分解为多个松散耦合且可独立部署的较小组件或服务。最终设计的系统包括了电商系统中常见的服务:客户服务、订单服务、支付服务等,其中:

1、 客户服务负责对客户相关的信息进行管理和维护;

2、 订单服务负责对订单信息的管理和维护;

3、支付服务负责对在线支付功能和信息的管理和维护等。

为了确保微服务之间的松耦合,每个服务都有自己的数据,其中,订单服务使用了 NoSQL 数据库,客户服务和支付服务使用了关系数据库。

李工认为由于不同服务使用了各自的不同数据库,使得跨服务操作可能存在数据不一致。比如订单与支付的数据一致性问题,系统通过订单服务在本地 NoSQL 数据库中创建订单记录,同时在支付服务的关系数据库中创建支付记录,且必须保证订单记录和支付记录的一致性,该问题在系统构建时需要考虑。

【问题3】(10分)

李工提出王工的方案会有数据库更新和发布事件的原子性问题,例如订单服务创建订单记录和发布“创建订单”事件需要原子性保障,否则会出现数据不一致状态。

王工认为可以使用本地事务发布事件的方法来解决该问题。请给出使用本地事务发布事件的基本方法,并说明该方法的缺点。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

问题3;

(1)一个实现原子化的方法是使用本地事务来更新业务实体和事件列表,由一个独立进程来发布事件。具体来说,就是在存储业务实体状态的数据库中,使用一个事件表来充当消息队列。应用启动一个(本地)数据库事务,更新业务实体的状态,在事件表中插入一个事件,并提交该事务。一个独立的消息发布线程或进程查询该事件表,将事件发布到消息代理,并标注该事件为已发布。

(2)缺点:数据更新操作与所要发布的事件之间的对应关系,是由应用的开发者实现的,因此有很大可能出错。


解析:

问题3要求解决的是数据库更新和发布事件的原子性问题。使用本地事务发布事件是一种解决方法。在存储业务实体状态的数据库中,通过事件表来记录并发布事件,可以保证数据更新和事件发布的原子性。

然而,这种方法也有其缺点。首先,开发者需要明确数据更新与事件发布之间的对应关系,这依赖于开发者的经验和技能,出错的可能性较大。其次,在高并发场景下,如果消息发布线程无法及时处理事件表中的数据,可能会导致事件积压,影响系统性能。最后,随着服务数量的增加和事务复杂度的提高,本地事务的管理和协调可能会变得更加复杂,可能会限制系统的可扩展性。

创作类型:
原创

本文链接:【问题3】(10分)李工提出王工的方案会有数据库更新和发布事件的原子性问题,例如订单服务创建订单记录

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share