如何设计一个秒杀系统?

架构遵循 “四要,一不要"

数据

数据量

路径

依赖

不要单点

快  准   稳

快: 提高单次请求效率    减少没必要的请求    --------------------动静分离

 静态数据处理

  1.          把静态数据缓存到离用户最近的地方
  2.          静态化改造: 直接缓存HTTP链接,访问一个url,直接拿到的是http的响应头和响应体,这样的话连解析都不用了。
  3.          让谁来缓存,对于java来说,它的sevlet容器去解析http请求会比较慢一点,我可以选择直接在web服务器来做缓存

动态处理  ESI :   在web代理服务器上做动态请求,插入到静态页面中去

             和CSI     单独发起一个异步的javaScript请求,向服务端动态获取内容

动静分离架构的几种方案:

    实体机单机部署

    统一缓存层

热点的处理

热点操作和热点数据

热点数据的思路:

  •                              一优化  、   优化缓存
  •                              二限制 、    用hash做分桶,让热点数据,让热点数据集中在某几个桶,不去影响其他正常数据
  •                              三隔离 、    业务隔离:  卖家提前报名,这样也可以做一个预热                                                  

                                                        系统隔离:  单独部署

                                                        数据隔离:   热点数据隔离

消除峰:

  •  消息队列
  •  答题排队
  •  分层过滤

提高性能

QPS每秒处理的请求数  RT服务器这边的一个响应耗时

RT   一般是由CPU处理时间和线程等待时间决定的

QPS  它和线程数有一定的关系,2xCPU核数+1

CPU诊断工具  JProfile和Yourkit这两个工具

 减少编码 :网页输出直接用流输出

  合并部署

 秒杀系统的单机上缓存商品的相关数据      动态数据和静态数据:

  1. 动态:就淘汰拉取
  2. 静态: 直接缓存到结束

减库存设计的主要逻辑(事务实现库存不能为负数,直接设置无符号整数)

下单减库存

付款减库存

预扣减库存

应用层排队和数据库层排队  : 补丁程序  Commit  on  success  和  ro'l'lback   on  fail    

                                                   sql合并

Plan     B

 降级:   当系统容量到一定程度的时候,可以关闭一些系统非核心的功能

限流:    客户端和服务端

拒绝策略:   直接拒绝 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值