netcore 高并发秒杀项目实战6

秒杀优化

目标高并发,应用框架 :Redis+消息队列+Lua

秒杀主要由两步逻辑组成

  • 扣减库存
  • 下单

优化步骤

  1. consul缓存优化, 优化网络IO
    各个微服务节点缓存后,不需要每次请再去发现服务节点
    注意 当服务实例启动时,,当服务实例关闭时,及时更新缓存 。

  2. redis缓存方式扣减库存
    redis缓存操作较快,然后异步批量更新库存

  3. CAP消息队列异步下单
    应用CAP框架异步发送下单消息,订单微服务订阅消息批量下单

  4. 单品限流
    可能超卖
    一个商品在1秒内的请求数量最多100个,
    主要是对redis缓存操作,与redis有多次网络请求,

  5. 单人限量
    可能超卖
    一个用户对一个秒杀商品最多下单 限制,超过限制不能购买,
    主要是对redis缓存操作,与redis有多次网络请求,

  6. Lua脚本优化
    以上4和5里面的Redis多次网络请求逻辑,可以通过Lua脚本封装Redis命令

  7. 幂等性
    因为用户操作界面超时,可能存在问题,标识请求的唯一性,
    单个页面幂等, 利用Redis做集群幂等,
    场景:用户无论下单多少次,只有一次成功,后续都是不能重复下单!

  8. 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 等指令可以做到限流的目的。

limit_request_zone限流配置

秒杀最终时序图netcore 高并发秒杀项目实战6_第1张图片

你可能感兴趣的:(microservice)