分布式系统5种顶级设计模式
分布式应用程序是现代软件开发行业的主要内容。它们对于云存储服务至关重要,并允许大规模的 Web 应用程序保持响应性。当程序员构建这些系统时,他们需要基本的构建块,它们可以用作起点并以共享的词汇表进行交流。 这就是分布式系统设计模式变得无价的地方。我们将探索5种顶级分布式系统设计模式,以帮助您了解它们的优点、缺点以及何时使用它们。 以下是要介绍的内容: 什么是分布式系统设计模式? 设计模式是经过尝试和测试的构建系统的方法,每个系统都适合特定的用例。它们不是实现,而是构建系统的抽象方法。大多数设计模式已经由许多不同的开发人员开发和更新多年,这意味着它们通常是非常有效的起点。 设计模式是构建块,允许程序员从现有知识中汲取知识,而不是从每个系统从头开始。他们还为系统设计创建了一组标准模型,帮助其他开发人员了解他们的项目如何与给定系统交互。 创建型设计模式在构建新对象时提供了基线。结构模式定义了解决方案的整体结构。行为模式描述对象以及它们如何相互通信。 分布式系统设计模式是开发分布式系统时使用的设计模式,分布式系统本质上是计算机和数据中心的集合,充当最终用户的一台计算机。这些分布式设计模式概述了不同节点如何相互通信、哪些节点处理每个任务以及不同任务的流程流的软件架构。 这些模式在设计大规模云计算和可扩展微服务软件系统的分布式系统架构时被广泛使用。 分布式设计模式的类型 大多数分布式设计模式根据它们使用的功能分为以下三类之一: 一、命令和查询职责分离(CQRS,Command and Query Responsibility Segregation) CQRS 模式侧重于分离分布式系统的读取和写入操作,以提高可伸缩性和安全性。该模型使用命令将数据写入持久存储并使用查询来定位和获取数据。 这些由接收用户请求的命令中心处理。然后命令中心获取数据并进行任何必要的修改,保存数据,并通知读取服务。然后读取服务更新读取模型以向用户显示更改。 优点 缺点 用例 CQRS 最适合数据密集型应用程序,例如 SQL 或 NoSQL 数据库管理系统。它对于数据量大的微服务架构也很有帮助。它非常适合处理有状态的应用程序,因为写入者/读取者的区别有助于处理不可变状态。 二、两阶段提交(2PC,Two-Phase Commit) 2PC 在其事务方法和对中央命令的依赖方面与 CQRS 类似,但分区是根据它们的类型和它们所处的完成阶段来处理的。这两个阶段是准备阶段(中央控制告诉服务准备数据)和提交阶段(通知服务发送准备好的数据)。 默认情况下,2PC 系统中的所有服务都被锁定,这意味着它们无法发送数据。锁定时,服务会完成准备阶段,因此一旦解锁就可以发送。协调器--解锁服务并请求它们的数据。如果服务尚未准备好提交其数据,则协调器将转到另一个服务。一旦发送了所有准备好的数据,所有服务都会解锁以等待协调器的新任务。 2PC 本质上确保一次只能运行一项服务,这使得该过程比 CQRS 更具抵抗力和一致性。 优点 缺点 用例 2PC 最适合处理高风险事务操作的分布式系统,这些操作有利于准确性而不是资源效率。它可以抵抗错误,并且即使在大规模错误发生时也很容易跟踪错误。 三、Saga Saga 是一种异步模式,它不使用中央控制器,而是完全在服务之间进行通信。这克服了之前介绍的同步模式的一些缺点。 Saga 使用事件总线允许服务在微服务系统中相互通信。总线在服务之间发送和接收请求,每个参与的服务创建一个本地事务。然后,参与的服务各自发出一个事件供其他服务接收。其他服务都监听事件。接收事件的第一个服务将执行所需的操作。如果该服务未能完成操作,则会将其发送到其他服务。 这种结构类似于 2PC 设计,如果无法完成任务,服务将被循环。然而,Saga 移除了中央控制元素,以更好地管理流程并减少所需的来回通信量。 优点 缺点 用例 Saga 的分散式方法非常适合同时处理许多并行请求的可扩展无服务器功能。AWS 在 step 和 lambda 函数等许多函数中使用基于 Saga 的设计。 四、复制负载平衡服务 (RLBS,Replicated Load-Balanced Services) RLBS 模式是最简单、最常用的设计模式。在最基本的层面上,它由多个相同的服务组成,这些服务都向中央负载均衡器报告。每个服务都能够处理任务,并且在它们失败时可以复制。负载均衡器接收来自最终用户的请求,并以循环方式或有时使用更复杂的路由算法将它们分发给服务。 重复的服务确保应用程序对用户请求保持高可用性,并且可以在服务的一个实例失败时重新分配工作。 RLBS 通常与 Azure Kubernetes 一起使用,Azure Kubernetes 是一种由 Microsoft 开发的开源容器编排技术云计算分布式系统,可提供基于工作流的自动服务扩展。 优点 缺点 用例 RLBS 非常适合全天工作负载不一致但必须保持低延迟的前端系统,例如 Netflix 或 Amazon Prime 等娱乐网络应用程序。 五、分片服务(Sharded Services) 基于副本的设计的替代方案是创建一个服务选择,每个服务只完成某种类型的请求。这称为“分片”,因为您将请求流拆分为多个不相等的部分。例如,您可能有一个分片服务接受所有缓存请求,而另一个分片服务只处理高优先级请求。负载均衡器会在每个请求进入时对其进行评估,并将其分发到适当的分片以完成。 分片服务通常用于构建有状态服务,因为状态的大小通常对于单个无状态容器来说太大了。分片使您可以扩展单个分片以满足状态的大小。 分片服务还允许您更快地处理高优先级请求。专用于高优先级请求的分片始终可以在这些请求进入的那一刻处理这些请求,而不是将它们放入队列中。 优点 缺点 用例 当您的系统收到可预测的请求类型不平衡时,分片服务是最好的,但某些请求具有优先级。 原文链接:top-5-distributed-system-design-patterns (编辑:温州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |