小麦带你学设计模式四

简介: 设计模式学习

Saga

如果微服务使用独享数据库,那么通过分布式事务管理一致性是一个巨大的挑战。你无法使用传统的两阶段提交协议,因为它要么不可伸缩(关系数据库),要么不被支持(多数非关系数据库)。

但您还是可以在微服务架构中使用 Saga 模式实现分布式事务。Saga 是 1987 年开发的一种古老模式,是关系数据库中关于大事务的一个替代概念。但这种模式的一种现代变种对分布式事务也非常有效。Saga 模式是一个本地事务序列,其每个事务在一个单独的微服务内更新数据存储并发布一个事件或消息。Saga 中的首个事务是由外部请求(事件或动作)初始化的,一旦本地事务完成(数据已保存在数据存储且消息或事件已发布),那么发布消息或事件则会触发 Saga 中的下一个本地事务。

如果本地事务失败,Saga 将执行一系列补偿事务来回滚前面本地事务的更改。

Saga 事务协调管理主要有两种形式:

  • 事件编排 Choreography:分散协调,每个微服务生产并监听其他微服务的事件或消息然后决定是否执行某个动作
  • 命令编排 Orchestration:集中协调,由一个协调器告诉参与的微服务哪个本地事务需要执行

优点

  • 为高可伸缩或松耦合的、事件驱动的微服务架构提供一致性事务
  • 为使用了不支持 2PC 的非关系数据库的微服务架构提供一致性事务

缺点

  • 需要处理瞬时故障,并且提供等幂性
  • 难以调试,而且复杂性随着微服务数量增加而增加

何时使用 Saga

  • 在使用了事件源的高可伸缩、松耦合的微服务中
  • 在使用了分布式非关系数据库的系统中

何时不宜使用 Saga

  • 使用关系数据库的低可伸缩性事务型系统
  • 在服务间存在循环依赖的系统中

面向前端的后端 (BFF)

在现代商业应用开发,特别是微服务架构中,前后端应用是分离和独立的服务,它们通过 API 或 GraphQL 连接。如果应用程序还有移动 App 客户端,那么 Web 端和移动客户端使用相同的后端微服务就会出现问题。因为移动客户端和 Web 客户端有不同的屏幕尺寸、显示屏、性能、能耗和网络带宽,它们的 API 需求不同。

面向前端的后端模式适用于需要为特殊 UI 定制单独后端的场景。它还提供了其他优势,比如作为下游微服务的封装,从而减少 UI 和下游微服务之间的频繁通信。此外,在高安全要求的场景中,BFF 为部署在 DMZ 网络中的下游微服务提供了更高的安全性。

优点

  • 分离 BFF 之间的关注点,使得我们可以为具体的 UI 优化他们
  • 提供更高的安全性
  • 减少 UI 和下游微服务之间频繁的通信

缺点

  • BFF 之间代码重复
  • 大量的 BFF 用于其他用户界面(例如,智能电视,Web,移动端,PC 桌面版)
  • 需要仔细的设计和实现,BFF 不应该包含任何业务逻辑,而应只包含特定客户端逻辑和行为

何时使用 BFF

  • 如果应用程序有多个含不同 API 需求的 UI
  • 出于安全需要,UI 和下游微服务之间需要额外的层
  • 如果在 UI 开发中使用微前端

何时不宜使用 BFF

  • 如果应用程序虽有多个 UI,但使用的 API 相同
  • 如果核心微服务不是部署在 DMZ 网络中

可用技术示例

任何后端框架(Node.js,Spring,Django,Laravel,Flask,Play,…)都能支持。

相关文章
|
设计模式 存储 负载均衡
|
存储 设计模式 NoSQL
|
设计模式 测试技术 API
|
存储 设计模式 SQL
|
存储 设计模式 SQL
|
设计模式 存储 SQL
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
1天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
17天前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
16 3
|
2月前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式

热门文章

最新文章