优化的方向:
- 将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去)
- 充分利用缓存,大部分是读多写少的场景
常见秒杀架构
- 浏览器端 ,最上层,会执行到一些JS代码
- 站点层 ,这一层会访问后端数据,拼html页面返回给浏览器
- 服务层 ,向上游屏蔽底层数据细节,提供数据访问
- 数据层 ,最终的库存是存在这里的,mysql是一个典型(当然还有会缓存)
各层次优化细节
- 客户端(浏览器层,APP层)
静态化页面(采用html,不用jsp),将页面缓存在用户的浏览器和CDN上
前端限流:
在用户点击按钮后,对按钮置灰处理,禁止用户重复提交请求;限制用户在X秒之内只能提交一次请求。
-
站点层
如何防止程序员循环调用http接口,发送请求?
系统一般都需要登录,对uid进行请求计数和去重。一个uid,x秒只准透过1个请求,剩余的请求用页面缓存,x秒内到达站点层的请求,均返回同一页面。
但是程序发起请求怎么都比人工点击速度快,所以要避免这种情况的话,可以把URL动态化,通过MD5之类的