mazon Simple Queue Service (SQS)是一种完全托管的消息队列服务,可以让你分离和扩展微服务、分布式系统和无服务应用程序。
在讲解SQS之前,首先让我们了解一下什么是消息队列。
还是举一个电商的例子,一个用户在电商网站下单后付款后,应用服务器马上查询/更新数据库,连接支付网关并查询支付状态,通知短信/邮件网关发送相关短信/邮件,更新库存系统,更新物流系统……最后返回信息给用户,“您的下单已成功”。
但是如果网站的访问数很大,或者正值促销活动(比如淘宝双11,京东618)呢?
这个时候每一个流程都是一个瓶颈,一旦某一个地方达到了瓶颈或者出现故障,又或者用户下单的时间比程序处理订单的时间还要久的情况下,都会让用户得不到成功下单的结果,或者得到结果的时间非常长,导致用户体验不好。
这个时候,我们就要考虑到应用程序的解耦(decouple)。
我们可以引入消息队列,让不同的应用程序之间打断强连接的关系,互不干扰。
应用服务器在接收到用户付款的订单之后,就把相关的信息丢到消息队列,并且返回用户“您的下单已成功,请稍后查看详细订单状态”。
而支付网关、短信/邮件网关、库存系统、物流系统等等可以到消息队列里面拉取信息,并且进行相关的数据更新和操作。
这些操作可能不需要是实时的,但是至少能保证这些队列里的信息最终都会被执行。比如下单后我不一定马上能收到短信/邮件的通知,我可能5分钟/10分钟之后才收到这些信息通知,但这个并不影响正常的业务。
这样子,消息队列就起到了连接上层业务和下层业务的作用。
Amazon SQS相当于提供了一个分布式、高可用、高性能的消息队列服务。
SQS有两种不同类型的队列,它们分别是:
标准队列拥有无限的吞吐量,所有消息都会至少传递一次,并且它会尽最大努力进行排序。
标准队列是默认的队列类型。
FIFO (First-in-first-out)队列在不使用批处理的情况下,最多支持300TPS(每秒300个发送、接受或删除操作)。
在队列中的消息都只会不多不少地被处理一次。
FIFO队列严格保持消息的发送和接收顺序。
更多关于标准队列和FIFO队列的区别,可以查看我需要哪种类型的队列?
下一篇:没有对象感,沟通太费劲