我什么时候使用SNS和SQS,为什么它们总是耦合在一起?
当前回答
以下是AWS上主要消息传递技术(SQS, SNS, +EventBridge)之间的主要区别。为了选择特定的AWS服务,我们应该了解该服务提供的功能以及与其他服务的比较。
下图总结了该服务之间的主要相似点和不同点。
其他回答
以下是AWS上主要消息传递技术(SQS, SNS, +EventBridge)之间的主要区别。为了选择特定的AWS服务,我们应该了解该服务提供的功能以及与其他服务的比较。
下图总结了该服务之间的主要相似点和不同点。
AWS SNS是一个发布者订阅者网络,订阅者可以在其中订阅主题,并在发布者发布该主题时接收消息。
AWS SQS是一个队列服务,它将消息存储在队列中。SQS不能传递任何消息,需要一个外部服务(lambda、EC2等)来轮询SQS并从SQS获取消息。
由于多种原因,可以将SNS和SQS结合使用。
There may be different kinds of subscribers where some need the immediate delivery of messages, where some would require the message to persist, for later usage via polling. See this link. The "Fanout Pattern." This is for the asynchronous processing of messages. When a message is published to SNS, it can distribute it to multiple SQS queues in parallel. This can be great when loading thumbnails in an application in parallel, when images are being published. See this link. Persistent storage. When a service that is going to process a message is not reliable. In a case like this, if SNS pushes a notification to a Service, and that service is unavailable, then the notification will be lost. Therefore we can use SQS as a persistent storage and then process it afterwards.
来自AWS文档:
Amazon SNS允许应用程序发送时间紧迫的消息到 多个订阅者通过“推送”机制,消除了需求 定期检查或“轮询”更新。 Amazon SQS是分布式应用程序使用的消息队列服务 通过轮询模型交换消息,并可用于 分离发送和接收组件——不需要每个组件 组件要同时可用。
扇出到Amazon SQS队列
SQS和SNS耦合的一个原因是数据处理管道。
假设你正在生成三种产品,产品B和C都是从相同的中间产品a衍生而来的。对于每种产品(即管道的每个部分),你设置:
用于生成产品的计算资源(可能是lambda函数,或虚拟机集群,或自动伸缩kubernetes作业)。 用于跨计算资源对工作进行分区的队列(描述需要执行的工作单元)(以便每个工作单元只处理一次,但是可以以并行和彼此异步的方式分别处理单独的工作单元)。 新闻提要(宣布已生成的输出)。
然后进行排列,使B和C的输入队列都订阅A的输出通知。
这使得管道在基础设施级别上是模块化的。不同的管道阶段可以使用不同的硬件资源(例如,阶段B可能内存非常密集,但其他两个阶段可以使用更便宜的硬件/服务来执行),而不是拥有一个单独的服务器应用程序来同时生成所有三个产品。这也使得迭代一个管道段的开发变得更容易,而不会中断其他产品的交付。
简单来说,
SNS -发送消息给订阅者使用推送机制,而不需要拉。 SQS——它是分布式应用程序使用的消息队列服务,用于通过轮询模型交换消息,并可用于分离发送和接收组件。
一种常见的模式是使用SNS将消息发布到Amazon SQS队列,以便可靠地将消息异步发送到一个或多个系统组件。
参考亚马逊SNS常见问题解答。
推荐文章
- 拒绝访问;您需要(至少一个)SUPER特权来执行此操作
- 我如何使用通配符“cp”一组文件与AWS CLI
- 我如何获得亚马逊的AWS_ACCESS_KEY_ID ?
- 如何使所有对象在AWS S3桶公共默认?
- 为什么我应该使用亚马逊Kinesis而不是SNS-SQS?
- 如何重命名AWS S3 Bucket
- AWS ECS中的任务和服务之间有什么区别?
- 亚马逊SimpleDB vs亚马逊DynamoDB
- 亚马逊ECS和亚马逊EC2有什么区别?
- 我如何知道我在S3桶中存储了多少对象?
- S3 Bucket操作不应用于任何资源
- 将AWS凭证传递给Docker容器的最佳方法是什么?
- 当权限为S3时,AccessDenied for ListObjects for S3 bucket:*
- 电子邮件地址未验证(AWS SES)
- 使用Boto3将S3对象作为字符串打开