什么是松耦合架构?

什么是松耦合架构?

本文译自:What Is Loosely Coupled Architecture?

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

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

松散耦合体系结构的示例

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

在这里插入图片描述

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

松耦合架构与紧密耦合架构

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

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

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

在这里插入图片描述

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

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

微服务架构对于创建松散耦合的系统非常重要,因为耦合在软件系统设计中是不可避免的。例如,在电子商务门户中,订单服务应使用 API 与客户服务或交付服务进行通信。也就是说,微服务允许您尽可能减少这种耦合。

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

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

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

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

微服务使在设计时耦合模型中轻松实现松散耦合,同时使您能够使用精益开发和 DevOps CI/CD 最佳实践高效处理耦合挑战。

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

Amazon 简单队列服务 (SQS) 和简单通知服务 (SNS) 是功能强大的机制,可帮助您构建高度可扩展和松散耦合的架构,并在平台、网络和操作级别进行耦合。

  • Amazon Simple Queuing Service (SQS): 当客户端下订单时,接收该订单的应用程序会将其作为消息发送到 SQS。消息由 AWS Lambda 等函数排队和使用。邮件处理完毕后,系统会自动将其删除。
  • **Amazon Simple Notification Service (**SNS):用作“发布-订阅”模型,其中应用程序将订单消息发送到 SNS 主题,然后跨各个终端节点进行复制,以便并行运行进程。
  • AWS Lambda:无服务器计算引擎。
  • AWS Fargate:用于无服务器计算的容器即服务。
  • AWS 自动扩展: 自动缩放服务。
  • 亚马逊 S3: 存储服务。
  • **亚马逊 API 网关:**接口管理服务。
  • AWS CloudWatch:用于管理 SQS 中的消息。

在这里插入图片描述

松散耦合的体系结构方案

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

选择松散耦合的体系结构时,请务必考虑以下方面。

  • 计算:底层 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。

有三种类型的无服务器调用方法:

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

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

结论

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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值