高访问量Web系统优化

许令波/君山  detail静态化
https://github.com/xulingbo/xulingbo.github.io/issues/
许令波,2009年加入淘宝,目前负责商品详情业务和稳定性相关工作,长期关注性能优化领域,参与了淘宝高访问量Web系统主要的优化项目,著有《深入分析Java Web技术内幕》一书。个人网站http://xulingbo.net

淘宝大秒系统设计详解
http://geek.csdn.net/news/detail/59847
要点
热点隔离:业务隔离,系统隔离,数据隔离,这个是当秒杀系统跟其他系统共存时才考虑的,单纯的讨论秒杀系统好像不需要,但实际情况估计秒杀的会员,商品,优惠都是来自普通的系统,所以单纯讨论秒杀系统也不现实。

动静分离,让浏览器和CDN cache绝大部分静态数据,这样虽然并发请求个数仍然一样多,但是请求的参数和返回值里面的数据就很少了。
秒杀页面提供一个“刷新”按钮,让用户点击这个“刷新”按钮即可从秒杀等待状态进入秒杀开始状态,不需要用户刷新浏览器或按F5来刷新页面,这样进一步减少请求数,用户在秒杀开始的时间段内基本没有大量请求“静态”数据的请求了

基于时间分片削峰
即增加了秒杀答题,当然秒杀答题一个很重要的目的是为了防止秒杀器。其实增加答题还有一个重要的功能,就是把峰值的下单请求给拉长了,从以前的1s之内延长到2~10s左右,请求峰值基于时间分片了,这个时间的分片对服务端处理并发非常重要,会减轻很大压力,另外由于请求的先后,靠后的请求自然也没有库存了(这也是因为有下面的数据分层校验),也根本到不了最后的下单步骤,所以真正的并发写就非常有限了。

数据分层校验
把大量静态不需要检验的数据放在离用户最近的地方;在前端读系统中检验一些基本信息,如用户是否具有秒杀资格、商品状态是否正常、用户答题是否正确、秒杀是否已经结束等;在写数据系统中再校验一些如是否是非法请求,营销等价物是否充足(淘金币等),写的数据一致性如检查库存是否还有等;最后在数据库层保证数据最终准确性,如库存不能减为负数。

关键技术优化点
Java处理大并发动态请求优化
同一商品大并发读问题
同一数据大并发更新问题




nginx
http://tengine.taobao.org/documentation_cn.html

猜你喜欢

转载自darrenzhu.iteye.com/blog/2366809