秒杀优化
目标高并发,应用框架 :Redis+消息队列+Lua
秒杀主要由两步逻辑组成
- 扣减库存
- 下单
优化步骤
- consul缓存优化, 优化网络IO
各个微服务节点缓存后,不需要每次请再去发现服务节点
注意 当服务实例启动时,,当服务实例关闭时,及时更新缓存 。 - redis缓存方式扣减库存
redis缓存操作较快,然后异步批量更新库存 - CAP消息队列异步下单
应用CAP框架异步发送下单消息,订单微服务订阅消息批量下单 - 单品限流
可能超卖
一个商品在1秒内的请求数量最多100个,
主要是对redis缓存操作,与redis有多次网络请求, - 单人限量
可能超卖
一个用户对一个秒杀商品最多下单 限制,超过限制不能购买,
主要是对redis缓存操作,与redis有多次网络请求, - Lua脚本优化
以上4和5里面的Redis多次网络请求逻辑,可以通过Lua脚本封装Redis命令 - 幂等性
因为用户操作界面超时,可能存在问题,标识请求的唯一性,
单个页面幂等, 利用Redis做集群幂等,
场景:用户无论下单多少次,只有一次成功,后续都是不能重复下单! - IP防刷
nginx IP限流
本文针对 Nginx 的三个模块进行配置,并证实各自的功能特点:
(1)limit_conn_zone
模块 - 限制同一 IP 地址并发连接数;
(2)limit_request_zone
模块 - 限制同一 IP 某段时间的访问量;
(3)core 模块提供 - limit_rate 限制同一 IP 流量。
limit_conn_zone
模块
通过 limit_zone 模块来达到限制用户的连接数的目的,即限制同一用户 IP 地址的并发连接数。
limit_request_zone
模块
使用 ngx_http_limit_req_module 模块可以 限制某一 IP 在一段时间内对服务器发起请求的连接数,该模块为内置模块。
limit_rate
根据 ip 限制流量
对于提供下载的网站,肯定是要进行流量控制的。Nginx 通过 core模块的 limit_rate 等指令可以做到限流的目的。