javagaoji 2016-06-21
典型场景:秒杀
一 提前准备工作
1.系统独立部署
2.做好系统性能容量规划 (两个方面 一是对系统性能有个计算,另外还需要对并发量有个预估)
容灾 和过载保护措施
3 系统的拆分 比如:按功能模块,按实时/非实时,按动态/静态等
4 设置商品定时上架的时间
5 服务器时钟同步
6 动态生成下单页面的URL(不能使用固定的url ,防止用户直接使用url提交)
二 前端页面
1:静态页面 + Ajax 获取动态内容: 比如 实时库存 活动状态 当前时间 等
2:CDN部署
3:静态页面和资源的缓存
4:JS对请求的过滤,比如 获取检验码,秒杀时间开始 或者已售完自动结束等
主要目的是快速获取页面 和减少对后端服务器的请求
今天太晚了 明天接着写
继续:
三Web前端
1:F5/Lvs +Nginx 来接收高并发的请求,并做负载均衡
2:Nginx + Lua + Redis 来做请求队列,并实现一些基本控制,比如:限流、账号参加次数检查、同
一IP讲求数检查等
3:Varnish 来缓存静态页面和静态资源
4: 进入Tomcat集群,先做一个预处理,判断这些账户是否能参与活动,比如 账号等级是否足够,账
号行为是否正常,是否在黑名单上等
四 逻辑层
1:按照Redis的请求队列进行先后处理
逻辑层 先去另一个Redis(处理成功的信息)
2:纯内存操作 + 异步
3:控制超卖
4:Redis 里面 存放着 SKU的库存数据
5:处理成功的信息也放在Redis里
其它注意事项
1:合理设计接口
2:应当及时告知用户结果
3:考虑业务规则,比如减库存的时机
4:服务器尽量集群,并做HA,做好灾备,避免雪崩
5:缓存服务器如果要重启,要做好预热
6:对抗作bi,比如:同一账户同时发多个请求,同一IP同时发大量请求、秒杀器采用多账户多IP发送
请求等
后面会紧跟着几篇java并发编程的例子