发布于 2025-03-11 24 阅读
0

分布式系统的 9 种软件架构模式

大家好,在现代软件开发中,分布式系统非常流行,但架构师和开发人员面临的挑战是设计能够有效管理数据并促进各个组件之间无缝通信的系统。

架构模式为分布式系统中遇到的常见问题提供了经过验证的解决方案,确保了可靠性、可扩展性和可维护性。

在这些模式中,一些模式脱颖而出,成为有效管理数据和通信流的基础,我们将在本文中看到。

这些也是系统设计面试的重要主题,了解这些模式对于解决系统设计问题和给面试官留下深刻印象大有帮助。

除了准备常见的系统设计问题(如API 网关与负载均衡器正向代理与反向代理以及常见的系统设计问题)之外,了解这些模式也是有意义的。

让我们进一步了解这些模式,以理解它们的原理和应用。

顺便说一句,如果你正在准备系统设计面试,并且想要深入学习系统设计,那么你也可以查看ByteByteGoDesign GuruExponentEducativeCodeemia.ioUdemy等网站,它们有很多很棒的系统设计课程

此外,扎实掌握各种架构模式(如点对点模式、API 网关)的知识对于设计能够经受生产时间考验的系统大有裨益,关于这一点,这里有一张来自DesignGuru.io的关于微服务架构的精美图表:

微服务架构

分布式系统的 9 种最佳架构模式

在过去,您已经了解了基本的微服务设计模式,例如事件源 SAGA每个微服务的数据库 API 网关断路器,还分享了设计微服务的最佳实践 ,现在是时候了解数据通信的常见架构模式的简要概述了。

1. 点对点(P2P)模式

点对点模式促进两个或多个组件之间的直接通信,而不需要中央协调器。

在这种去中心化的模型中,网络中的每个节点都可以充当客户端和服务器,从而实现高效的资源共享和协作。

P2P 架构通常用于文件共享系统、分散式应用程序 (DApps) 和区块链网络,其中弹性和可扩展性至关重要。

P2P 架构如下所示:

点对点 (P2P) 模式


2. API 网关模式

API网关作为客户端请求访问应用程序内后端服务的统一入口点。

通过将多个 API 合并到单个界面,它简化了客户端-服务器交互并实施了安全、身份验证和速率限制策略。

API 网关是微服务架构中必不可少的组件,它支持服务发现、负载平衡和协议转换,同时抽象后端系统的复杂性。

它看起来是这样的:

API 网关模式

如果你喜欢看,这是ByteByteGo 的另一个精彩视频,其中解释了 API 网关


3. Pub-Sub(发布-订阅)

发布-订阅模式通过消息代理或事件总线(如Kafka、Solace、RabbitMQ或 ActiveMQ)将消息生产者(发布者)与消费者(订阅者)分离。

发布者向预定义的主题或频道广播消息,而订阅者表达对特定主题的兴趣并异步接收相关消息。

发布-订阅架构有利于实现松散耦合、可扩展性和容错性,使其成为实时消息系统、事件驱动的微服务和物联网平台的理想选择。

发布-订阅模式如下所示:

发布订阅模式


4. 请求-响应模式

请求-响应模式表示分布式系统中的基本交互模型,其中客户端向服务器发送请求并等待相应的响应。

这种同步通信范式在 Web 应用程序、RESTful API 和 RPC(远程过程调用)框架中很流行。

请求-响应交互确保可预测的行为并支持错误处理,使其适用于事务工作流和面向用户的界面。

请求-响应模型的实际运行方式如下:

请求-响应模式


5.事件源模式

事件源是一种分布式系统模式,用于将应用程序的状态保存为一系列不可变的事件。

不是直接存储当前状态,而是存储表示状态转换的事件并在需要时重播以重建应用程序状态。

事件源支持可审计性、时间查询和可重放性,使其非常适合金融系统、协作编辑工具和历史数据至关重要的领域驱动设计。

事件源模式如下所示:

面试时的软件架构图

如果你喜欢观看的话,这里有一个关于事件源的精彩视频,值得一看:


6. ETL(提取、转换、加载)模式

ETL 是一种数据集成模式,用于从多个来源提取数据,将其转换为标准化格式,并将其加载到目标数据库或数据仓库中。

此模式对于商业智能、数据分析和数据仓库项目中的数据迁移、同步和合并任务至关重要。

ETL 管道自动化数据工作流程、处理数据质量问题并支持大型数据集的批处理。

ETL 在操作中的表现如下:

ETL(提取、转换、加载)模式


7. 配料模式

批处理涉及在一段时间内累积数据或直到达到某个阈值,然后将其作为单个单元进行处理。

通过将多个操作聚合成更大的批次,它可以减少开销并提高数据处理管道的效率。

批处理通常用于数据提取、ETL 流程和分布式计算框架,以优化资源利用率并最大限度地减少延迟。

批处理模式如下所示:

批处理模式


9.流处理模式

流处理支持实时连续提取、处理和分析数据流。与对静态数据集进行操作的批处理不同,流处理系统可以低延迟和高吞吐量处理无限数据流。

流式架构支持事件驱动处理、复杂事件处理 (CEP) 以及金融、物联网网络安全等领域的实时分析应用程序。

下面是来自Hazlecast 的一张精美图表,展示了流处理的实际运行:

软件架构模式


10. 编排模式

编排涉及一个中央协调器(编排器)来管理分布式组件或服务之间的交互以执行工作流或业务流程。

通过协调任务执行、处理异常和强制依赖关系,编排可确保跨多个系统的复杂工作流有序执行。

编排引擎用于工作流自动化、业务流程管理 (BPM) 和微服务编排,以简化操作并提高灵活性。

以下是使用Saga Orchestrator 模式后的效果

软件架构模式

下面是来自ByteByteGo的一张精美图表,它以更直观的方式解释了所有这些架构风格

系统设计面试的 10 个软件架构模式


最佳系统设计面试资源

此外,这里还精选了最佳系统设计书籍、在线课程和练习网站,您可以查看这些内容以更好地准备系统设计面试。这些课程中的大多数也回答了我在这里分享的问题。

  1. DesignGuru 的 Grokking 系统设计课程:一个交互式学习平台,通过实践练习和真实场景来加强您的系统设计技能。

  2. Codeemia.io:这是另一个练习面试系统设计问题的绝佳平台。它有超过 120 个系统设计问题,其中许多都是免费的,并且有适当的结构来解决它们。

  3. Alex Xu 撰写的《系统设计面试》:本书深入探讨了系统设计的概念、策略和面试准备技巧。

  4. Martin Kleppmann 撰写的《设计数据密集型应用程序》:一本全面的指南,涵盖了设计可扩展且可靠系统的原则和实践。

  5. LeetCode 系统设计标签:LeetCode 是一个流行的技术面试准备平台。LeetCode 上的系统设计标签包含各种练习问题。

  6. GitHub 上的“系统设计入门”:精选的资源列表,包括文章、书籍和视频,可帮助您准备系统设计面试。

  7. Educative 的系统设计课程:一个交互式学习平台,包含实践练习和真实场景,以加强您的系统设计技能。

  8. 高可扩展性博客:该博客提供有关高流量网站和可扩展系统架构的文章和案例研究。

  9. YouTube 频道:查看“Gaurav Sen”和“Tech Dummies”等频道,获取有关系统设计概念和面试准备的精彩视频。

  10. ByteByteGo:Alex Xu 撰写的一本用于系统设计面试准备的现场书籍和课程。它包含系统设计面试书籍第 1 卷和第 2 卷的所有内容,并将在即将推出的第 3 卷中更新。

  11. Exponent:一个专门为亚马逊和谷歌等 MAANG 公司提供面试准备的专业网站,他们还有很棒的系统设计课程和许多其他材料,可以帮助您破解 FAANG 面试。

如何准备系统设计

图片来源 - ByteByteGo

你还应该通过参与实际项目和参加模拟面试,将理论知识与实际应用结合起来。不断的练习和学习无疑会提高你在系统设计面试中的熟练程度。


这就是9 种基本软件架构模式。这些模式中的大多数也适用于分布式系统,并且对于系统设计面试也非常重要。

简而言之,有效管理数据和通信流对于构建健壮且可扩展的分布式系统至关重要。

点对点、API 网关、发布-订阅、请求-响应、事件源、ETL、批处理、流处理和编排等架构模式为解决系统设计和实施中的各种挑战提供了有价值的解决方案。

通过了解这些软件架构和分布式系统模式及其各自的优势和权衡,架构师和开发人员可以做出明智的决策来设计满足其应用程序和用户不断变化的需求的系统。