课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
微服务架构技术是随着互联网的不断发展而被众多程序员掌握的一种编程开发技术,而今天我们就通过案例分析来了解一下,微服务架构都有哪些设计模式。
Saga 模式——跨多个服务维护原子性
单个事务可能会跨越多个服务。例如,在电子商务应用程序中,新订单(与订单服务链接)不应超过客户信用额度(与客户服务链接),并且货品(与库存服务链接)应处于可用状态。这个事务根本不能使用本地 ACID 事务。
一个 saga 是一系列本地事务,这些事务可更新各个服务并发布一个消息 / 事件以触发下一个本地事务。有任何本地事务失败的情况下,saga 会执行一系列 补偿事务,以回退先前的本地事务所做的更改,从而保持 原子性。
基于编舞(Choreography)的 saga——参与者在没有中心化控制点的情况下交换 事件。
基于编排的 saga——一个中心化控制器告诉 saga 参与者要执行哪些本地事务。
在这两种模式之间具体选择哪一种,取决于工作流程的复杂性、参与者数量、耦合水平以及其他因素。
两阶段提交
与 saga 类似,一个事务会分为两个阶段:准备和提交阶段。在准备阶段,要求所有参与者准备数据;在提交阶段则进行实际更改。但是,由于同步存在副作用和性能问题,因此这种模式在微服务架构中被认为是行不通的。
事件源——面向状态的持久性策略的替代方案
保持数据的传统方法是更新已有数据来保持实体状态的 新版本。假设,如果我们必须更改用户实体的名称,我们将使用新的用户名来改变当前状态。如果我们需要在任何时间点或一段时间上重建状态该怎么办?在这种情况下,我们需要考虑这种持久性策略的替代方案。
与这种面向状态的持久性相反,事件源将每个状态突变存储为一个单独事件,而应用程序状态则存储为 不可变 事件的一个序列 / 日志,而不是修改数据。通过有选择地重播事件,我们可以随时了解应用程序的状态。应用程序在称为事件存储的仅附加事件日志中保持数据。一个著名的例子是事务数据库系统的事务日志。
事件源基于三个服务层:
命令:由一个命令处理器处理的状态更改请求。
事件:状态更改的不可变表示。
聚合:域模型当前状态的聚合表示。
事件源模式有很多优势,包括提供准确的审核日志、重建任意时间点的状态、方便的时间查询、时间旅行、高性能和可伸缩性等。Netflix 通过事件源解决了离线下载功能需求。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。