秒杀高并发要点

页面优化:按钮置灰,抢商品html静态化 cdn

代理层:拦截大流量

应用层:业务上核心代码cas防止超卖。

    限流:

   缓存:本地缓存(ehcache,guava),远程分布式缓存(redis,memcached)。

数据库:读写分离,读写分离


三大手段:限流,降级,缓存


1.一键秒杀引导

 一键秒杀引导设置后无需在结算页面填写/修改收获地址,优惠,发票等元素,减少结算再次计算和调用操作

2.验证码输入

  该验证码为图形验证码,是用户点击“一键秒杀”后进行的一次交互操作,因为无业务牵涉,该 验证码秒杀系统自己生成。

3.下单页面防恶意请求

  为了防止获取秒杀下单地址进行恶请求,将秒杀商品的下单地址动态化,动态地址在商品秒杀开始时返回给页面

4.秒杀商品库存预冻结

 为了避免同步调用库存中心带来的预估之外的故障,秒杀活动创建生效时会将 该 商品的库存冻结,库存中心一种 冻结类型,秒杀成功会直接库存生成订单,订单中心增加一种秒杀订单类型

5.库存释放

因为客户秒杀后可能不付款或者取消订单,关于秒杀不支付的订单是滞释放有两种选择方案:

一:订单中心将秒杀成功不支付或者取消的订单吃得太多秒杀系统进行本系统和库存中心的库存释放,让客户可以再次抢购(秒杀系统调用库存中心释放库存)

二:秒杀程序在设置库存计数器时可以进行溢出设置,但还是有可能出现实际秒杀交易成功数小于秒杀下单成功数

6.数据交互全内存操作

为了提高执行效率,程序会提前将数据预加载到redis缓存中,比如库存计数器,用户违规操作(同ip时间内访问频率过高,用户时间内访问频率高,黑名单),redis表的键值设置会尽量遵从最短执行/扫描路径设计

7.内存操作的数据对象

库存计数器,服务器节点接受的请求计数器,用户参与秒杀记录(针对商品,活动,时间段),预生成订单vo,秒杀商品信息(起始标记,下单动态url),访问控制数据

除访问控制数据,其他内存数据对象在redis的有效时间为秒杀活动的时间

8.数据预加载到内存的时机

库存计数器--秒杀活动创建,递减

服务器节点接受的请求计数器--递减

用户参与秒杀记录(针对商品)--秒杀成功

用户参与秒杀记录(针对活动)--秒杀成功

用户参与秒杀记录(时间段)--秒杀成功

预生成订单vo--秒杀活动创建后

用户验证码--用户点击“一键秒杀”

秒杀商品(活动)信息--秒杀活动动创建

访问控制数据--请求进入

9系统隔离

第一期需要依赖的模块

活动运行时依赖:支付中心,库存中心,订单中心(库存释放)

活动开始前依赖:商品中心,会员中心,商家后台



 流量监控(流控)模块背景

同样的,在网站访问量大时,我们也需要自动流控的疏导。工程师开始介入人工流控。当有大促销时,有的非核心业务就得降级。
监控模块,应该具有控制流量的,流向和量级功能。控制的目的在于保障主服务,即主干的重要的业务逻辑的稳定运行,而不受周边不稳定因素及容量限制的影响。随着网站业务和系统发展,流量的增长,牵扯服务和系统增多,服务和系统的质量参差不齐,稳定性的要求也越来越高,所以有针对性实施流量控制与服务降级,保证,网站业务主体的稳定运行是有很有必要的。



流控的范围

1.dubbo应用级别流控--整个dubbo接收请求的并发线程数

2.接口级别流控--其中一个dubbo接口接收请求的并发线程数

3.方法级别流控--其中一个方法接收请求的并发线程数

4.代码级别流控--其中一段代码接收请求的并发线程数


原理解析

1.原理与水池的原理相似。会在入水口安装阀门,进行对应的控制。可以过滤多余的流量,保持水池内部的流量在可控范围之内,也可以关闭掉所有的流量,改变水的方向,跳过这个水池。

2.当前流量(currentFlow)的计数是通过java并发库的AtomicInteger进行+1和-1操作,基于cas原子操作,在高并发下,有较高的性能。

3.当流量阀值(maxFlow),同样是通过java并发库的AtomicInteger实现的,这是为了,实现灵活的修正或控制阀值,AtomicInteger内部使用volatile变量存储数值,AtomicInteger变量可具有可见性,在并发环境下,多个线程获取此变量都是读取主存中的数值,因此此变量在任何线程当中,看到的都是同样的数值,同样对此变量的修改,也是针对任何线程生效。

名词解释

key(name各个流控对象之间用key,同一应用中请不要重名)

countValve(并发数阀值)

count(当前并发数)
avgElapsedValve(响应时间阀值)
avg(平均响应时间)
qps passCount(成功请求数)

effectCount(拒绝请求数。)
valveType(降级阀,COUNT_VALVE_TYPE表示只按并发数来讲,系多余的请求拒绝。COUNT_AND_AVGELAPSED_VALVE_TYPE表示超过多少毫秒的响应时间阀值,每隔一秒 钟并发数阀值将会减2,当平均时间小于阀值,则恢复COUNTVALVE原来的值)
invalidate失效

share(如果接口配置的尺寸数,接口类,所有方法都用接口流控参数)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值