秒杀场景兵器百解

什么是秒杀

短时间,大量请求,买一个(数量少的商品),解决秒杀问题就是解决高并发的
秒杀系统的目标就是:
:高可用,稳定的提供服务
: 超卖,数据一致性问题
: 高性能

架构原则

用户访问链路:
用户=>浏览器=> DNS=> CDN=> 负载均衡=> 网关=>服务=>IO

较少的用户端服务端的交互

数据要少:请求参数相应的参数要少,降低对网络带宽的占用,降低对CPU的消耗,对数据库IO要少(非必要信息不要来回传)
请求数要少:合并请求
路径要短:节点越多可靠性越低
依赖要少:花里胡哨的减少。优先级高的展示,低的去掉
要高可用(不要单点):负载均衡,水平扩展,docker(服务+DB volume)

动静分离

数据分区:不同url、用户不同、不同浏览时长、地域不同、cookie(缓存信息)不同返回结果一致,可以叫做静态信息,可以放到CDN或者负载均衡(如Nginx 静态资源服务器)
同一个url访问同一详情类的数据,做CDN缓存放到离请求最近的缓存,浏览器处也能放缓存数据(把自己服务器的压力让用户分担一些),服务器能做缓存的也要缓存guava cache、map、redis、文件缓存等。
总结:根据不同的用户类型做缓存。

热点数据

本来卖水果秒杀,系统都为水果服务结果衣服卖的比水果好 咋办

识别热点数据

监控追踪,根据用户访问、添加购物车、下单、统计分析(经验,BI)
发现热点数据:分析日志、添加队列、系统订阅。
分析日志:分析完日志得出热点商品投递到MQ,秒杀订阅该MQ,秒杀系统自动扩容

处理热点数据

lru算法,要做数据隔离 不让一台服务器影响到其它服务器
mq做削峰
分层过滤:验证码、答题
性能
cpu频率,io(网卡、磁盘、IOPS)
RT(response Time)
程序的时间消耗
1.程序的等待执行时间(几乎不影响)
2.执行的时间()
线程数计算
粗略计算:2n+1
精细计算 ((线程等待时间+cpu执行时间)/cpu时间)*cpu核心数
最准确的还是先用公式计算个大概,然后多次压力测试得出结论。
数据一致性
下单=>减库存 然后不购买
解决:1.预付超时回退 2.加一个中间状态支付中
扣库存加锁,解决ABA问题,zk+mysql乐观锁

秒杀的一些解决方案

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值