银行秒杀系统优化方案整理

此篇文章用于记录竞赛选题中本人为解决核心问题而设计的方案。转载请注出处。

高并发

  1. 静态化与缓存

  1. 静态化

  • 项目前后端分离,页面资源全部以静态化形式存储在服务器本地,不向服务端请求。

  1. 缓存

  • 数据库中商品库存全部存储在Redis中,秒杀的时候进行库存预减,再搭配队列,减少对数据库的并发写操作。

  1. 图片与服务器分离

  • 图片资源利用腾讯云对象存储技术,全部以url形式存储在数据库中,对图片的请求转发到腾讯云官方,减少服务器的压力。

  1. Nginx反向代理、负载均衡

  • 项目同时部署在两台服务器上,搭配Nginx进行反向代理与负载均衡,分流请求到不同服务器上。性能高的服务器权重高,另一台权重较低,分担了流量,减轻接口压力。

  1. 限流

  1. 前端限流

  • 秒杀抢购按钮采用节流技术,限制用户点击次数。

  1. Nginx限流

  • 设置通过请求数进行限流,平均每秒允许不超过1000个请求,突发不超过2000个请求,并且处理突发2000个请求的时候,没有延迟,等到完成之后,按照正常的速率处理。在请求进入项目前就先进行一次流量削减,减少压力。

  1. 接口限流

  • 在请求进入接口时再利用令牌桶技术进行进一步限流,再度减轻后端处理业务的压力。

  1. 消息队列

  • 利用RabbitMQ进行流量削锋,异步化下单操作,防止多线程同时操作数据库,保证线程安全,分离并发写。同时利用死信队列实现订单超时回滚数据。

  1. Redis

  1. Redis在本项目中作为中间件,承载大流量情况下的并发读写,防止数据库因承受不住突然的大流量而宕机。

  1. 数据缓存存储在Redis中,设置定时任务每59分与29分同步数据库商品信息(依据是秒杀一般在这两个时间点开启),保证更快的读。

  1. 利用Redis进行预减库存,并且搭配使用了lua脚本,既保证了操作原子性,又提升了读写效率。

  1. 库存标记

  1. 当Redis中的库存为0时,接口中的StockMap对应的商品库存标记为true,直接返回库存不足,减少对Redis的操作。

高性能

  1. CDN加速技术

  1. 通过静态CDN,路由懒加载,图片压缩等技术减少打包体积从而实现首屏加载优化。

  1. 购买8G4C高性能服务器

高可用

  1. 配置了腾讯云服务DDos防护功能,可以有效抵御2Gbps左右的攻击规模

  1. 为保证正常的CDN加速技术使用,防止恶意盗刷流量,我们通过三个方面去防御,即访问控制、流量管理以及安全防护。

  1. 用量封顶

  • 我们在腾讯云上选择了“带宽封顶”类型。当统计周期产生消耗超出所设阈值后,CDN会关闭服务。

  1. IP黑名单配置

  • 在腾讯云上通过配置了IP访问控制策略,可以有效限制访问来源,阻拦恶意IP盗刷、攻击等问题。只需将用户的IP或者IP网段填入黑名单,访问将直接返回403

  1. IP限频访问配置

  • 通过对IP单节点在每一秒钟的访问次数进行限制,可进行高频CC攻击抵御,防止恶意用户盗刷。我们限制为10次每秒。

  1. 秒杀地址隐藏

  • 每个用户会通过算法生成专属的密钥,根据密钥生成相应的秒杀地址,秒杀地址会存储在Redis中并且具有10s的生效时长,前端会将返回的密钥拼接到接口中变成真正的秒杀地址,秒杀时会检验地址合法性,一定程度上防止了暴力脚本抢购,保证了安全性。

  1. 分布式架构

  • 拆分了原本的单体项目,改造成了微服务形式,分别有个人信息系统、产品系统、秒杀系统、管理员系统,并且使用Nginx进行代理,提升了系统的健壮性,在一个服务崩溃的时候不会影响其他服务的正常运行。在主服务器上和备用服务器上都有备份。

  • 使用Redis配置信息共享

  1. 脚本检测以及防刷

  • 在Nginx配置中加入了请求头部信息检测,检查脚本信息关键字,若检测到直接返回404,拒绝在接口之外,防止脚本请求进入业务层。

其他

前端

  • 利用Vue3+Vant+TypeScript进行用户移动端的前端开发,Vue2+element-ui进行用户PC端与管理员端的前端开发,通过ECharts可视化呈现管理员端中的订单数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值