接口防刷限流
提高门槛,提高被攻击的代价,没有绝对安全的方式。
在开发分布式高并发系统时,我们通常有三种方法保护系统:
缓存、降级、限流
。
缓存
缓存的目的是提升系统访问速度和增大系统处理容量
降级
降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,直接返回简单结果,而不继续执行后面正常的业务流程,待高峰或者问题解决后再打开
限流
限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理
隐藏秒杀地址
怎样将秒杀地址隐藏起来?
安全服务和秒杀服务应该是放在两个不同的微服务中的,这里都放到了一个服务当中。
前端doSeckill分两步:
点击立即秒杀:
执行获取随机数的方法,获取随机数成功之后才会调用到doSeckill函数。
获得带有随机数的url;
然后调用秒杀函数发起请求;
getRandom()
函数:
在回调函数返回成功之后,调用doSeckill()函数进行秒杀。
后端生成隐藏地址的controller方法:
需要校验当前用户是否登录;
生成uuid随机数
将uuid随机数保存进Redis中,设置有效时间,(key关联用户和秒杀场)
返回uuid随机数
生成了random随机数之后,接下来在路径中使用。
使用:修改路径
前端代码:动态的将getRandom函数获得的随机数拼到地址中去:
后端代码:doSec