iOS面试题整理

秒杀系统设计思路

2019-05-11  本文已影响0人  服务端开发

一、限流与降级

客户端限流

  1. 按钮置灰
  2. js控制每秒只能发送一个请求

站点层限流

1. Nginx限流

Nginx官方版本限制IP的连接和并发分别有两个模块:

2. 站点层限流

客户端限流一般可以限制住普通用户,对于高端用户,则可能使用脚本刷,或者实际抢购的用户量确实大,故需要在站点层进行限流,如单个部署实例的每秒最大请求数,每个用户每秒的最大请求或者通过Redis记录和限制单个用户只能请求一次。

写流量
读流量:

降级

二、队列削峰

通过第一步限流后,将合法流量放到一个队列中,实现流量削峰,达到流量可控和异步处理。

入队条件

请求响应

三、服务层异步处理

四、抢购结果通知

由于使用了队列来异步处理,即入队后或者库存不足无法入队,该次抢购请求是直接返回了的,故对于抢购结果是需要进行额外通知的。

1. 客户端轮询

可以通过客户端定时请求服务端,如每秒发送一个请求,如果成功,则提示抢购成功;失败,则返回失败。例如,客户端可以在没有轮询到处理结果时提示“抢购中,请耐心等待”,如果轮询到结果则提示成功或失败。

2. 消息推送

另外一种方式可以是直接通过消息推送的方式来通知用户抢购结果。

完整架构示意图

秒杀.png
上一篇 下一篇

猜你喜欢

热点阅读