聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】09_防刷限流技术 - Go语言中文社区

聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】09_防刷限流技术


本章目标

  • 掌握验证码生成与验证技术
  • 掌握限流原理与实现
  • 掌握防黄牛技术

10-2 验证码技术

        //通过verifycode验证验证码的有效性
        String redisVerifyCode = (String) redisTemplate.opsForValue().get("verify_code_"+userModel.getId());
        if(StringUtils.isEmpty(redisVerifyCode)) {
            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,"请求非法");
        }
        if(!redisVerifyCode.equalsIgnoreCase(redisVerifyCode)) {
            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,"请求非法,验证码错误");
        }

10-4 限流的目的

  • 流量远比你想的要多
  • 系统活着比挂了要好
  • 宁愿只让少数人能用,也不要让所有人不能用

限流方案

限并发

对同一时间固定访问接口的线程数做限制,利用全局计数器,在下单接口OrderController处加一个全局计数器,并支持并发操作,当controller在入口的时候,计数器减1,判断计数器是否大于0,在出口时计数器加一,就可以控制同一时间访问的固定。

令牌桶算法

令牌桶算法可以做到客户端一秒访问10个流量,下一秒就是下一个10个流量,限定某个时刻的最大值

漏桶算法

漏桶算法的目的用来平滑网络流量,没有办法应对突发流量

限流范围

  • 集群限流:依赖redis或其他中间件技术做统一计数器,往往会产生性能瓶颈
  • 单机限流:负载均衡的前提下单机平均限流效果更好

10-6 限流代码实现(Guava RateLimit)

RateLimiter没有实现令牌桶内定时器的功能,
reserve方法是当前秒的令牌数,如果当前秒内还有令牌就直接返回;
若没有令牌,需要计算下一秒是否有对应的令牌,有一个下一秒计算的提前量
使得下一秒请求过来的时候,仍然不需要重复计算
RateLimiter的设计思想比较超前,没有依赖于人为定时器的方式,而是将整个时间轴
归一化到一个数组内,看对应的这一秒如果不够了,预支下一秒的令牌数,并且让当前的线程睡眠;
如果当前线程睡眠成功,下一秒唤醒的时候令牌也会扣掉,程序也实现了限流

private RateLimiter orderCreateRateLimiter;

    @PostConstruct
    public void init(){
        executorService = Executors.newFixedThreadPool(30);

        orderCreateRateLimiter = RateLimiter.create(300);
    }

10-7 防刷技术

  • 排队,限流,令牌均只能控制总流量,无法控制黄牛流量

传统防刷

  • 限制一个会话(session_id,token)同一秒/分钟接口调用多少次:多会话接入绕开无效(黄牛开多个会话)
  • 限制一个ip同一秒钟/分钟 接口调用多少次:数量不好控制,容易误伤,黑客仿制ip

黄牛为什么难防

  • 模拟器作弊:模拟硬件设备,可修改设备信息
  • 设备牧场作弊:工作室里一批移动设备
  • 人工作弊:靠佣金吸引兼职人员刷单

设备指纹

  • 菜鸡终端设备各项参数,启动应用时生成唯一设备指纹
  • 根据对应设备指纹的参数猜测出模拟器等可疑设备概率

凭证系统

  • 根据设备指纹下发凭证
  • 关键业务链路上带上凭证并由业务系统到凭证服务器上验证
  • 凭证服务器根据对应凭证所等价的设备指纹参数并根据实时行为风控系统判定对应凭证的可疑度分数
  • 若分数低于某个数值则由业务系统返回固定错误码,拉起前端验证码验身,验身成功后加入凭证服务器对应分数

—————————————————————————————————
【本课程已整理完毕】

01_电商秒杀商品回顾
02_云端部署
03_分布式扩展
04_查询性能优化技术之多级缓存
05_查询性能优化技术之页面静态化
06_交易性能优化技术之缓存库存
07_交易性能优化技术之事务型消息
08_流量削峰技术
09_防刷限流技术
10_课程总结

—————————————————————————————————

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_35580701/article/details/107134746
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-04-11 09:43:42
  • 阅读 ( 950 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢