软考系统架构设计师案例分析例题及答案解析!

系统架构设计师 责任编辑:龙小林 2025-11-28

添加老师微信

备考咨询

加我微信

案例场景

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

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

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

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

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

李工认为由于不同服务使用了各自的不同数据库,使得跨服务操作可能存在数据不一致。

比如订单与支付的数据一致性问题,系统通过订单服务在本地NoSQL 数据库中创建订单记录,同时在支付服务的关系数据库中创建支付记录,且必须保证订单记录和支付记录的一致性,该问题在系统构建时需要考虑。

问题内容:

[问题1](7分)

李工建议采用两阶段提交协议(2PC)来解决服务数据的一致性问题。请用200字以内的文字简要说明 2PC;说明2PC是否能解决该问题,并简要解释原因。

[问题2] (8分)

王工建议采用分布式数据管理方案,用事件驱动架构来解决服务数据的一致性问题,在订单服务和支付服务之间通过可靠的消息队列实现事件的传递,其基本操作步骤如下,请填写其中的空白处。

(1)订单服务接收订购请求,创建一个订单,该记录状态为(a),发布一个“创建订单”事件;

(2) (b) 接收“创建订单”事件,记录(c),发布一个“支付完成”事件;

(3)订单服务接收“支付完成”事件,修改订单记录状态为(d)。

[问题3](10分)

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

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


试题答案:

[问题1]

1、两阶段提交协议 2PC经常用来管理分布式事务。

(1)2PC包含协调者和参与者两类站点,只有协调者才拥有提交或撤销事务的决定权,而其他参与者各自负责在其本地数据库中执行写操作,并向协调者提出撤销或提交事务的意向。

(2)2PC分为两个阶段:表决阶段和执行阶段。

①表决阶段,目的是形成一个共同的决定。协调者给所有参与者发送“准备提交”消息,并进入等待状态,所有参与者给与回复“建议提交”或“建议撤销”。只要有一个结点选择撤销,则整体事务撤销,否则,执行该事务。

②执行阶段,目的是实现这个协调者的决定。根据协调者的指令,参与者或者提交事务,或者撤销事务,并给协调者发送确认消息。

2、两阶段提交协议 2PC 不能解决当前问题。

(1)分布式数据库遵循的是CAP 原则,会在一定程度上牺牲一致性。

(2)大多数 NoSQL 数据库并不支持2PC。

(3)分布式两阶段提交协议2PC一般针对的对象在逻辑上是一个整体,对某一个整体事务需要在多个物理节点上执行时,进行表决和执行,对多个数据库的不同服务并不是很合适。

[问题2]

(a)未支付

(b)支付服务

(c)支付信息

(d) 已支付

[问题3]

使用本地事务发布事件:

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

缺点:

由于开发者必须牢记发布事件,因此有很大可能出错。此外这一方法对于某些使用NoSQL数据库的应用是个挑战,因为NoSQL 本身交易和查询能力有限。

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取

!
咨询在线老师!