通过松散耦合的架构和最佳 DevOps 实践使您的公司适应最新的技术和趋势。

@高效码农  December 3, 2022

松散耦合架构是一种软件应用程序开发模型,其中多个组件相互连接但彼此不严重依赖。尽管每个服务都是为执行单个任务而创建的独立实体,但这些组件共同创建了一个通用网络或系统。

松散耦合架构的主要目的是创建一个不会因单个组件故障而失败的系统。面向服务的架构 (SOA) 通常包含松散耦合的架构。

松散耦合架构示例

考虑一个实例,其中您在程序中创建了两个类:A 和 B。当 A 类的方法调用 B 类的方法或使用 B 类中定义的变量实例时,这两个类是紧密耦合的。但是,当 A 类依赖于 B 类的接口而不是 B 类中定义的方法时,这两个类是松散耦合的。

松耦合架构

上面是一个使用松散耦合系统的订餐应用程序示例。该应用程序包含不同的服务,例如订单服务、餐厅服务、送货服务和客户服务。当客户订购食品时,订单服务负责处理它。餐厅服务接收此数据并准备食物,而送货服务处理送货部分。客户服务在需要时为客户提供帮助。在这种情况下,每个单独的服务都不会严重依赖任何其他服务。所有服务都通过 API 进行通信,以便发送和接收所需的信息。因此,当一个服务崩溃时,可以在不影响应用程序其他组件的情况下立即替换它。同样,订单服务可以在高峰时段或季节自动缩放。

松耦合架构与紧耦合架构

松散耦合与紧耦合架构是需要深思的一个重要问题。在软件开发领域,耦合是指一个对象对另一个对象的依赖。一个对象对另一个对象的了解程度或一个对象对另一个对象的依赖程度决定了系统是松耦合还是紧耦合。当依赖级别较低时,我们说它是松散耦合的。基本上,这意味着一个对象知道其他对象通过 API 公开的内容。类似地,当对一个系统的更改不会强制更改另一个系统时,两个系统是松散耦合的。 

松散耦合系统中的每项服务都是为单一目的或职责而设计的,并且可以独立部署、管理、扩展和删除。每个服务都包含一个用于通信的接口(REST API)。鉴于每项服务都可以使用不同的编程语言、平台、技术和框架,因此很容易在不影响系统的情况下更改单个服务、执行测试、扩展服务和删除它们。松散耦合的体系结构可容纳广泛的 API 和与接口分离的可互操作资源模式。

另一方面,紧耦合架构中的对象严重依赖于系统的其他组件。每个对象都必须与其他对象或组件协作和协调才能完成功能。在这种情况下,一个类的逻辑被另一个类调用。这意味着一个对象或类需要另一个对象或类来完成一项任务。因此,每个类承担多重责任,对一个类所做的更改也会迫使一个或多个其他类发生更改。 

松耦合与紧耦合架构

微服务在松耦合架构中的重要性

微服务是一种架构设计,有助于将应用程序开发为小型独立服务,这些服务运行自己的进程并使用轻量级协议和消息传递系统进行通信,使它们与平台和语言无关。每个服务都是独立的、可测试的、高度可维护的、可独立部署的,并实现了一种业务能力。最重要的是,每个服务都由一个小团队维护、部署、创建和拥有。微服务是面向服务的架构的一个显着变体,它利用了松散耦合的架构方法。事实上,松耦合是微服务架构的关键组成部分。

微服务架构对于创建松耦合系统非常重要,因为耦合在软件系统设计中是不可避免的。例如,在电子商务门户中,订单服务应使用 API 与客户服务或送货服务进行通信。也就是说,微服务允许您将这种耦合保持在最低限度。

微服务由一组协作服务组成,这些服务使用不同的耦合方法协同工作。

  • 运行时耦合:一项​​服务的可用性影响另一项服务的可用性的程度。
  • 设计时耦合:一个服务的变化触发另一个服务变化的程度。
  • 基础设施耦合:一个服务的资源消耗对另一个服务的资源消耗的影响程度。

每种耦合方法都会带来其自身的挑战。例如,运行时耦合会在发生更改时降低可用性。因此,您将在微服务架构中遇到长长的调用队列。

当您实现设计时耦合时,API 中的一个小更改需要更改与该 API 交互的所有服务。因此,涉及这些服务的所有团队都必须协作并讨论更改。因此,保持设计时耦合尽可能松散非常重要,尤其是当涉及不同的协作团队时。 

微服务使在设计时耦合模型中实现松散耦合变得容易,同时使您能够使用精益开发和 DevOps CI/CD 最佳实践有效地应对耦合挑战。 

哪些 AWS 服务可用于松耦合架构?

Amazon Simple Queuing Service (SQS) 和 Simple Notification Service (SNS) 是强大的机制,可以帮助您构建高度可扩展和松散耦合的架构,并在平台、网络和操作级别进行耦合。

  • Amazon Simple Queuing Service (SQS): 当客户下订单时,接收该订单的应用程序会将其作为消息发送到 SQS。消息排队并由 AWS Lambda 等函数使用。处理完消息后,它会自动删除。
  • Amazon Simple Notification Service (SNS):作为“发布-订阅”模型工作,其中应用程序将订单消息发送到 SNS 主题,然后将其复制到各个端点以并行运行流程。
  •  AWS Lambda:无服务器计算引擎。
  •  AWS Fargate:用于无服务器计算的容器即服务。
  •  AWS AutoScaling: 自动缩放服务。
  •  Amazon S3: 存储服务。
  •  Amazon API Gateway: API 管理服务。
  •  AWS CloudWatch:用于管理 SQS 中的消息。

用于松散耦合架构的 AWS

松耦合架构场景

与运行数千个相互依赖以执行计算的并行进程或内核的紧密耦合架构不同,松散耦合架构在单个节点上运行大量较小的作业,并在节点内进行并行化。由于进程彼此之间的依赖性不高,因此丢失一个节点不会影响整体功能。该作业要么稍后处理,要么被删除。

选择松散耦合架构时,考虑以下几个方面很重要。

  • 计算:底层 EC2 实例类型应根据应用程序的内存与计算比率来确定。
  • 网络:带宽和延迟问题在松散耦合的场景中不是问题,因为并行运行的进程不需要太多交互。
  • 存储:每个松散耦合的应用程序都有不同的存储要求。因此,请考虑数据集大小和数据传输要求。
  • 部署:由于松散耦合的应用程序在安装在不同可用性区域的核心上运行,因此可以使用 AWS ParallelCluster 或 AWS Batch 高效地部署它们。

具有松散耦合架构的 AWS 无服务器场景

无服务器计算是一种云原生软件开发方法,可帮助组织轻松无缝地构建和运行应用程序,而无需配置和管理服务器的负担。服务器仍在使用,但由云供应商管理。这里要注意的是,收费不是基于服务器数量或带宽,而是基于使用情况。它使组织能够以现收现付的方式购买后端服务器,并且只需为使用的服务付费。

无服务器计算有两种模式:

1. 功能即服务:允许您基于事件运行代码而无需复杂的基础设施管理的服务。应用程序以无状态模式运行,其中服务器和客户端松散耦合,因此是独立的、灵活的、可扩展的和容错的。

关于计算引擎,AWS Lambda 是 AWS 流行的无服务器 FaaS 工具。对于基于容器的工作负载,AWS Fargate可用。对于事件触发,我们建议使用Amazon SQS、 AWS SNSEventbridge

2. 后端即服务:运行服务器端逻辑的任务外包给云供应商。AWS BaaS 工具包括用于日志记录的 Amazon Elasticsearch Service、用于分析的 AWS Kinesis 和用于 IAM 的 AWS Cognito。

Serverless 的调用方式分为三种:

  1.  同步调用:当客户端请求需要立即响应时使用。
  2. 异步调用:当您不希望客户端等待响应,而是在过程完成后通过通知提醒客户端时使用。
  3. Steaming Invocation:用于以相同的速度上游、处理和下游数据。

对于无服务器计算,采用异步方法的松散耦合架构是一个不错的选择。也就是说,不要忘记确保它是快速故障和正确扇出的。

结论

软件技术瞬息万变,迫使组织不断适应更新的技术和趋势。当谈到松耦合与紧耦合架构时,信息流和服务之间的协调在紧耦合架构中更好。但是,它们限制了您在旅途中更改应用程序时的灵活性。一个松散耦合的架构是当下的需要。它不仅允许您即时交换或扩展组件,而且还可以帮助您添加新功能而不影响现有系统的可用性和性能。借助微服务、精益开发和 DevOps 实践,松散耦合的架构使您能够在竞争中保持领先,甚至领先。



评论已关闭