第十章 消息和队列(Messaging & Queuing)

Lepiaoxue2022-10-18云计算164
一个更好的流程是将某种缓冲区或队列引入系统,收银员会将订单张贴在某种缓冲区,而不是直接交给咖啡师。这个缓冲区就像一个订单处理板。
这种将消息放入缓冲区的概念称为消息收发和队列,就像我们的收银员将订单交给咖啡师一样。应用程序通过相互发送消息来进行通信,如果应用程序像我们前面谈到的收银员和咖啡师一样直接通信,这就是所谓的紧密耦合架构(tightly coupled)。
紧密耦合架构的标志性特征是,如果单个组件发生故障或变化会导致其他组件,甚至整个系统出现问题。例如,如果我们拥有应用程序 A,它直接将消息发送到应用程序 B。如果应用程序 B 发生故障无法接收这些消息,应用程序 A 也会开始出现错误,这就是紧密耦合的架构。
更可靠的架构是松散耦合的架构,在这种架构中,如果一个组件发生故障,由于它是孤立的,因此不会导致整个系统出现级联故障。如果我们对应用程序进行编码,使用更松散耦合的架构,它可能看起来像下文描述的那样。
就像我们的收银员和咖啡师,我们在两者之间引入了一个缓冲区。在这种情况下,我们引入了消息队列,消息发送到由应用程序 A 负责的队列,然后由应用程序 B 进行处理。如果应用程序 B 发生故障,应用程序 A 不会经历任何中断,正在发送的消息仍然可以发送到队列并停留在队列中,直到它们最终得到处理。
这就是松散耦合(loosely coupled),也是我们致力于通过 AWS 上的架构实现的目标。而这需要两项 AWS 服务,它们可以在这方面提供帮助。这两项服务就是 Amazon Simple Queue Service,简称 SQS,以及 Amazon Simple Notification Service,简称 SNS.
SQS 可让您在软件组件之间发送存储和接收任何容量的消息。这不会丢失信息,也无需使用其他服务。将消息当作我们的咖啡订单,将订单处理板当作 SQS 队列。消息包含顾客的姓名、咖啡订单和他们下单的时间。消息中的数据称为负载(payload)。在传输完成之前受到保护。SQS 队列是消息得到处理之前所处的位置,AWS 为您管理底层基础设施来托管这种队列。这种队列可以自动扩展,非常可靠并且易于配置和使用。
Amazon SNS 在这方面与 SQS 类似,它用于将消息发送给服务,但它也可以用于将通知发送给最终用户。不过,它通过不同的方法来发送消息,这种方法称为发布/订阅模式。这意味着您可以创建 SNS 主题,它是用于传递消息的一种渠道。然后,您可以配置相应主题的订阅者,最后为这些订阅者发布消息。在实践中,这意味着您可以向某个主题发送一条消息,然后通过一个渠道将消息分发给所有订阅者,这些订阅者也可以是终端节点。例如 SQS 队列、AWS Lambda 函数和 HTTPS 或 HTTP Web 节点。
此外,SNS 还可以用于通过移动推送,短信和电子邮件向最终用户群发通知。
整体式应用程序(Monolithic applications)和微服务(Microservices)
应用程序由多个组件构成。这些组件通过相互通信来传输数据、满足请求和保持应用程序运行。 
假设您的应用程序具有紧密耦合的组件。这些组件可能包括数据库、服务器、用户界面和业务逻辑等。这种类型的架构可以视为一种整体式应用程序架构。 在这种应用程序架构中,如果单个组件发生故障,其他组件也会发生故障,甚至整个应用程序都会发生故障。
为了在单个组件发生故障时保持应用程序的可用性,您可以通过微服务方法来设计应用程序。
在微服务方法中,应用程序的组件是松散耦合。在这种情况下,如果单个组件发生故障,其他组件仍然可以继续工作,因为它们还会相互通信。松散耦合可以防止整个应用程序发生故障。 
在 AWS 上设计应用程序时,您可以采用微服务方法,用各种服务和组件来实现不同的功能。有两种服务可以辅助应用程序的集成:Amazon Simple Notification Service (Amazon SNS) 和 Amazon Simple Queue Service (Amazon SQS)。
Amazon Simple Notification Service (Amazon SNS)
Amazon Simple Notification Service (Amazon SNS) 是一项发布/订阅服务。发布者使用 Amazon SNS 主题将消息发布给订阅者。
在 Amazon SNS 中,订阅者可以是 Web 服务器、电子邮件地址、AWS Lambda 函数或其他对象。
Amazon Simple Queue Service (Amazon SQS)
Amazon Simple Queue Service (Amazon SQS) 是一项消息队列服务。 
借助 Amazon SQS,您可以在软件组件之间发送、存储和接收消息,而且不会丢失消息,也不需要使用其他服务。在 Amazon SQS 中,应用程序将消息发送到队列中。用户?或服务从队列中检索消息,进行处理,然后将其从队列中删除。


版权归乐飘雪所有!

本文链接:http://lepiaoxue.com/post/16.html

相关文章

第四章 计算

第四章 计算

服务器的作用是帮助您托管应用程序并提供满足您业务需求的计算能力,当你使用 AWS 时,这些服务器都是虚拟化的,而提供虚拟化服务器的服务,就是 EC2。与在自己的数据中心当中运行物理服务器相比,使用 E...

第五章 Amazon EC2

第五章 Amazon EC2

Amazon Elastic Compute Cloud (Amazon EC2)Amazon Elastic Compute Cloud (Amazon EC2) 可以通过 Amazon...

第六章 Amazon EC2 实例类型

第六章 Amazon EC2 实例类型

每种实例类型都归属于一个实例系列,并针对特定类型的任务进行了优化。实例类型提供了 CPU、内存、存储和网络容量的不同组合,使您能够灵活地为应用程序选择适当的资源组合。EC2 中不同的实例系列分别为通用...

第八章 EC2的扩展/Scaling

第八章 EC2的扩展/Scaling

AWS 的另一个主要优势——可扩展性和弹性。换句话说就是容量如何基于业务需求增长和缩减。本地数据中心面临的困境:如果您的企业和世界上 99% 的企业一样,那么您的客户工作负载也会随着时间而变化。也许变...

第九章 利用 Elastic Load Balancing 引导分配流量

第九章 利用 Elastic Load Balancing 引导分配流量

这一理念同样适用于您的 AWS 环境。当您的多个 EC2 实例都运行同一个程序来达到相同的业务目标时,一个请求进来,这个请求如何知道要往哪个 EC2 实例呢?您怎样才能确保工作负载均匀地分布在各个 E...