小麦带你学设计模式二

简介: 设计模式学习

事件源(Event Sourcing)

在微服务架构中,特别使用独享数据库时,微服务之间需要进行数据交换。对于弹性高可伸缩的和可容错的系统,它们应该通过交换事件进行异步通信。在这种情况,您可能希望进行类似更新数据库并发送消息这样的原子操作,如果在大数据量的分布式场景使用关系数据库,您将无法使用两阶段锁协议(2PL),因为它无法伸缩。而 NoSQL 数据库因为大多不支持两阶段锁协议甚至无法实现分布式事务。

在这些场景,可以基于事件的架构使用事件源模式。在传统数据库中,直接存储的是业务实体的当前“状态”,而在事件源中任何“状态”更新事件或其他重要事件都会被存储起来,而不是直接存储实体本身。这意味着业务实体的所有更改将被保存为一系列不可变的事件。因为数据是作为一系列事件存储的,而非直接更新存储,所以各项服务可以通过重放事件存储中的事件来计算出所需的数据状态。

优点

  • 为高可伸缩系统提供原子性操作。
  • 自动记录实体变更历史,包括时序回溯功能。
  • 松耦合和事件驱动的微服务。

缺点

  • 从事件存储中读取实体成为新的挑战,通常需要额外的数据存储(CQRS 模式)
  • 系统整体复杂性增加了,通常需要领域驱动设计
  • 系统需要处理事件重复(幂等)或丢失
  • 变更事件结构成为新的挑战

何时使用事件源

  • 使用关系数据库的、高可伸缩的事务型系统
  • 使用 NoSQL 数据库的事务型系统
  • 弹性高可伸缩微服务架构
  • 典型的消息驱动或事件驱动系统(电子商务、预订和预约系统)

何时不宜使用事件源

  • 使用 SQL 数据库的低可伸缩性事务型系统
  • 在服务可以同步交换数据(例如,通过 API)的简单微服务架构中
相关文章
|
设计模式 存储 负载均衡
|
存储 设计模式 NoSQL
|
设计模式 测试技术 API
|
存储 设计模式 前端开发
|
存储 设计模式 SQL
|
设计模式 存储 SQL
|
2月前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
105 11
|
3月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
8天前
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
66 40
|
9天前
|
设计模式 关系型数据库
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
43 19

热门文章

最新文章