面向 AWS 专业人员的 Google Cloud Platform 简介:应用服务

更新时间:2017 年 3 月 20 日

比较 Amazon 和 Google 为促进应用各部分之间的通信而提供的服务。本文重点介绍每个平台上提供的消息传递服务。

消息传递

服务模式比较

对于消息队列,Amazon 提供的服务为 Amazon Simple Queue Service (SQS),Google 提供的服务为 Google Cloud Pub/Sub。Amazon SQS 功能与 Cloud Pub/Sub 功能之间的对应关系如下:

功能 Amazon SQS Google Cloud Pub/Sub
数据源 队列 主题
数据目的地 队列 订阅者
部署位置 区域 全球
消息保留时间 最长 14 天 最长 7 天
每个队列的动态消息数上限 标准为 120000,FIFO 为 20000 拉取队列无限制(受配额约束),推送队列为 1000
负载大小上限 256 KB 10 MB
扇出 借助 Amazon SNS 原生支持
死信队列
延迟队列
结算 队列所有者付费 订阅者付费

Amazon Simple Queue Service (SQS) 和 Amazon Simple Notification Service (SNS)

在 Amazon Simple Queue Service (SQS) 中,操作以您创建的消息队列为中心。您将消息发送到队列,然后客户端应用从队列中拉取这些消息。要实现扇出系统(多个订阅者可使用一条消息),您可以将 Amazon SQS 与 Amazon Simple Notification Service (SNS) 搭配使用,为多个设备和端点提供推送通知。您可以将 Amazon SQS 队列订阅到 Amazon SNS 主题,当消息发布到该主题时,Amazon SNS 会向已订阅的队列发送 Amazon SQS 消息。

Amazon SQS 提供两种消息队列类型:标准队列和 FIFO 队列。标准队列提供高吞吐量,但不保证严格的消息排序或正好一次传送。相反,FIFO 队列可确保这些方面,但吞吐量比标准队列低。

Cloud Pub/Sub

Cloud Pub/Sub 将消息队列、基于推送的消息传送和高容量流式消息传送组合到一个全局服务中。它使用发布/订阅模式:发布者应用创建消息并将消息发送到主题,订阅者应用创建订阅以从主题接收消息。作为基于发布/订阅的服务,Cloud Pub/Sub 以原生方式同时支持扇入(多个消息源可针对一个主题)和扇出。

Amazon SQS 支持基于拉取的消息传送,与之相比,Cloud Pub/Sub 同时支持基于推送和基于拉取的消息传送。在基于推送的传送模式下,Cloud Pub/Sub 向订阅者应用发起请求来传送消息。在基于拉取的传送模式下,订阅者应用向 Cloud Pub/Sub 服务器发起请求来检索消息,这与 Amazon SQS 类似。

与 Amazon SQS 标准队列一样,Cloud Pub/Sub 不保证消息排序。但是,如果您需要严格的消息排序,可以通过多种方式消除该限制。与 Amazon SQS 标准队列一样,Cloud Pub/Sub 也不保证正好一次传送。要处理重复的消息,您的代码应该以幂等的方式处理消息。

与 Amazon SNS 不同的是,Cloud Pub/Sub 适用于应用和系统集成,而不适用于与手机或网页等最终用户界面直接通信。对于客户端与服务器之间的此类型通信,您可以使用 Firebase 云消息传递,该 Cloud Platform 解决方案可用于将推送通知发送到多个移动设备。

消息生命周期

要从队列或订阅中移除消息,Amazon SQS 和 Cloud Pub/Sub 均要求您确认消息。

Amazon SQS

Amazon SQS 设置有“可见性超时”。当进程获取消息以进行处理时,该消息对正在处理该队列的其他进程不可见。下图说明了处理消息时可见性超时的工作原理。

Amazon SQS 可见性超时

图 1:Amazon SQS 可见性超时

获取消息后,可见性超时便开始倒计时。在倒计时期间,使用方应用对消息进行处理。如果处理成功且仍在可见性超时的时间范围内,使用方应用可进行调用以删除该消息。如果可见性超时到期,而应用未进行调用,则消息将再次对其他进程可见。

Cloud Pub/Sub

与之类似,Cloud Pub/Sub 设置有确认截止期限。默认情况下,截止期限为 10 秒,但最长可延长至 10 分钟。对于拉取订阅,订阅者也可以动态修改每条消息的截止期限,为给定消息的处理留出更短或更长的时间。

Cloud Pub/Sub 确认截止期限

图 2:Cloud Pub/Sub 确认截止期限

消息传送保证

Amazon SQS 提供两种类型的队列:标准队列和先进先出 (FIFO) 队列。Amazon SQS 标准队列和 Cloud Pub/Sub 均保证每条消息至少传送一次。同样,这两种服务的限制类似:每种服务都可能偶尔会出现消息重复,并且两种服务均不保证消息传送顺序。

Amazon SQS FIFO 队列支持正好一次的有序消息传送,可解决这两个问题。FIFO 队列的上限为每秒 300 个事务。

虽然 Cloud Pub/Sub 不提供 FIFO 这样的重复信息删除和消息顺序保证,但可在应用级别实现此功能。如需获取指导,请参阅消息排序

费用

Amazon SQS 和 Amazon SNS

Amazon SQS 的价格基于 Amazon SQS 以外的数据传输和请求数量。所有 Amazon SQS API 调用均算作请求。一个请求可包含 1 到 10 条消息,最大总负载为 256 KB。每 64 KB 的负载块按一个请求计费。

Amazon SNS 的价格基于您发布的通知数量、您传送的通知数量,以及用于管理主题和订阅的任何额外 API 调用。传送价格因端点类型而异。

Cloud Pub/Sub

Cloud Pub/Sub 的价格基于用于消息传送的数据量。数据量根据发布、拉取和推送操作的消息和属性数据计算。如需了解详情,请参阅 Cloud Pub/Sub 价格

后续事项

查看其他“面向 AWS 专业人员的 Google Cloud Platform”文章:

如需查看如何使用各自的消息传递服务在 Cloud Platform 和 AWS 之间传递数据的指导信息,请参阅通过 Cloud Functions 函数将 Google Cloud Pub/Sub 连接到 AWS SNS 主题

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
面向 AWS 专业人员的 Google Cloud Platform 简介