当前位置: 首页 > 科技观察

5种最重要的分布式系统设计模式

时间:2023-03-13 17:31:38 科技观察

分布式应用程序是现代软件开发行业的主要内容。它们是云存储服务的关键,并允许大型Web应用程序保持响应。当程序员构建这些系统时,他们需要可以用作起点并在共享词汇表中进行通信的基本构建块。这就是分布式系统设计模式变得无价的地方。虽然它们有时会被过度使用,但了解如何使用它们是招聘人员正在寻找的一项关键技能,并且在高级系统设计面试中脱颖而出至关重要。今天,我们将探讨五种优秀的分布式系统设计模式,以帮助您了解它们的优缺点以及何时使用它们。什么是分布式系统设计模式?设计模式是验证和测试适合特定用例的每个系统的方法。它们不是实现,而是抽象的结构化系统。大多数设计模式都是多年来由许多不同的开发人员开发和更新的,这意味着它们通常是非常有效的起点。设计模式是构建块,允许程序员从现有知识中汲取灵感,而不是从头开始设计每个系统。他们还为系统设计创建了一套标准模型,帮助其他开发人员了解他们的项目如何与给定系统交互。创造性的设计模式在构建新对象时提供了一个基准。结构模式定义了解决方案的整体结构。行为模式描述对象以及它们如何相互通信。分布式系统设计模式是开发分布式系统时使用的设计模式,分布式系统基本上是计算机和数据中心的集合,充当最终用户的一台计算机。这些分布式设计模式概述了一个软件架构,了解不同节点如何相互通信,哪些节点处理每个任务,以及不同任务的流程。在为大规模云计算和可扩展的微服务软件系统设计分布式系统架构时,这些模式被广泛使用。分布式设计模式的类型大多数分布式设计模式都基于它们所使用的三类功能之一:对象通信:描述消息传递协议和系统不同组件进行通信的权限。安全性:处理机密性、完整性和可用性问题,以保护系统免受未经授权的访问。事件驱动:描述产生、检测、消费和响应系统事件的模式。1.命令和查询职责分离(CQRS)CQRS模式着重于分离分布式系统的读写操作,以提高可扩展性和安全性。该模型使用命令将数据写入持久存储,并使用查询来定位和获取数据。这些由接收用户请求的指挥中心处理。然后指挥中心获取数据并进行必要的修改,保存数据,并通知阅读服务。读取服务然后更新读取模型以将更改反映给用户。好处:通过委派任务降低系统复杂性。明确区分业务逻辑和验证。帮助整理他们的工作。减少对共享数据的意外更改次数。减少对数据进行修改访问的实体数量。缺点:需要命令和读取模型之间不断的来回通信。发送高吞吐量查询时可能会导致延迟增加。服务进程之间没有通信方式。用例:CQRS最适合数据密集型应用程序,如SQL或NoSQL数据库管理系统。它还有助于数据密集型微服务架构。对于处理有状态应用程序很重要,因为编写者/读者的区别有助于实现不变性。2.Two-PhaseCommit(2PC)2PC在其事务方法和依赖的核心命令方面与CQR类似,但分区是由它们的类型和它们的完成阶段处理的。这两个阶段是准备阶段(中央控制告诉服务准备数据)和提交阶段(向服务发送准备好的数据)。默认情况下,2PC系统中的所有服务都处于锁定状态,即无法发送数据。锁定时,服务会填写准备阶段,以便它们准备好发送解锁。协调器一个一个地解锁服务并请求它们的数据。如果一个服务还没有准备好提交它的数据,协调器将转移到另一个服务。一旦发送了所有准备好的数据,所有服务都将解锁以等待来自协调器的新任务。2PC基本上保证了一次只能运行一个服务,使得流程更加抗拒,更符合CQRS。好处:由于缺乏并发请求而导致的错误持久性和抵抗力。可扩展——可以轻松处理大型数据池,因为它可以处理来自单台机器的数据。允许同时隔离和数据共享。缺点:由于其同步性质,不易出现瓶颈和阻塞。比其他设计模式需要更多的资源。用例:2PC最适合处理高风险事务操作以实现资源高效准确性的分布式系统。它具有抗错误性,即使在大规模情况下也很容易跟踪错误。3.SAGASAGA是一种异步模式,不使用中央控制器,而是完全在服务之间进行通信。这克服了前面提到的同步模式的一些缺点。SAGA使用活动总线允许服务在微服务系统中相互通信。总线在服务之间发送和接收请求,每个参与的服务创建一个本地事务。然后,参与服务每次都会发出其他服务的活动。所有其他服务都监听事件。第一个接收活动的服务将执行所需的操作。如果该服务无法完成操作,则将其发送给其他服务。这种结构类似于2PC设计,如果一个人无法完成任务,则服务是循环的。然而,Saga移除了中央控制元素以更好地管理流量并减少所需的来回通信量。好处:个人服务可以处理更长的交易。伟大的分布式系统源于去中心化。由于服务之间的对等通信,瓶颈减少了。缺点:异步自治使得很难跟踪哪些服务正在执行各种任务。编排复杂,调试困难。与以前的模型相比,服务隔离更少。用例:SAGA的去中心化方法非常适合可同时处理许多并行请求的可扩展无服务器功能。AWS在很多函数中使用了基于SAGA的设计,例如步骤和LAMBDA函数。4.复制负载均衡服务(RLB)RLBS模式是最简单和最常用的设计模式。在最基本的层面上,它由多个相同的服务组成,所有服务都向中央负载均衡器报告。每个服务都能够处理任务,并且在失败时可以进行复制。负载均衡器接收来自最终用户的请求,并以循环方式或有时使用更复杂的路由算法将它们分发给服务。重复的服务确保应用程序保持用户请求的高可用性,并且如果服务的一个实例失败,可以重新分配工作。RLBS通常与AzureKubernetes一起使用,AzureKubernetes是Microsoft的开源容器编排技术,可提供基于工作流的自动服务扩展。好处:最终用户观点的一致性。可以从失败的服务中快速恢复。高度可扩展以提供更多服务。非常适合并发。缺点:基于负载均衡器算法的性能不一致。资源密集型管理服务。用例:RLBS非常适合全面不一致但必须保持低延迟的工作负载,例如Netflix或AmazonPrime等娱乐网络应用程序。5.分片服务的基于副本设计的替代方案是创建各种服务,每个服务只能满足某种请求。这称为“分片”,因为您将请求流分成不相等的部分。例如,您可能有一个接受所有缓存请求的分片服务,而另一个只处理高优先级请求。负载均衡器在每个请求传入时对其进行评估,并将其分发到适当的分片。分叉服务通常用于构建有状态服务,因为状态的大小通常太大,对于单个无状态容器来说通常太大。分片允许您扩展单个分片以满足国家的规模。分叉服务还允许您更快地处理高优先级请求。专用于高优先级请求的分片始终可用于处理请求,而不是将它们放入队列中。好处:允许你为公共请求做分级分片。易于确定请求的优先级。由于自然排序,调试简单。缺点:可能需要大量资源来维护许多分片。如果不成比例地使用分片,将导致性能下降。用例:当系统接收到可预测的请求类型不平衡但某些请求具有优先级时,分段服务是最好的。

猜你喜欢