背景:
昨天有个师兄拿了腾讯sp offer,然后一起吃饭的时候,他告诉我秋招面试被问到4次如何设计秒杀系统,与大佬一席话,胜读十年书有木有。回来后果断去查这个问题。内容很多,需要考虑的问题也很多,涉及从上层到下层,从前端到后端等等。自己总结不好,这里把个人觉得比较好的方案干活分享一下:
详细的设计方案如下(内容较多。。。):
对此进行简短总结的博客如下(可以先看总结有兴趣再看详细设计):
http://blog.****.net/suifeng3051/article/details/52607544
由于博主水平欠缺,看资料时特别容易看到不懂得地方就去查,如此好比深度优先一样不知不觉打开了N个标签页。。。所以今天只搞懂了一小部分内容,赶紧记录下来。
设计秒杀系统时有个关键问题需要考虑:
对于秒杀系统瞬时会有大量用户涌入,所以在抢购一开始会有很高的瞬间峰值。高峰值流量是压垮系统很重要的原因,所以如何把瞬间的高流量变成一段时间平稳的流量也是设计秒杀系统很重要的思路。实现削峰的常用的方法有利用缓存和消息中间件等技术。
也即“削峰”。
于是顺着“削峰”这点,楼主又查啊查,发现网上很多都有同一个答案,具体出处不详。针对“削峰”的不明大佬回答总结如下:
1、基于SOA的架构设计,弹性扩展瓶颈模块服务器资源;
2、接入层以及各服务模块极大的用好cache,增加QPS,从而加大整个集群的吞吐量;
3、模块间使用消息队列通信,进行模块异步解耦,访问量上来后,使用时间成本换取业务能够正常服务;
4、各服务模块对自身负责的同时,要做好后端依赖有效调用的判断,做到向上游模块所做的调用都是必要的调用,无冗余或无效的调用;
5、划分好动静资源,静态资源使用CDN进行服务分发。
同样,水平有限,感觉不太懂。不过针对CDN楼主又做了调研:CDN全称“Content Delivery Network或Content Distribute Network”,即内容分发网络。
基本思路:
解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。
控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。
CDN就是扮演者护航者和加速者的角色,更快准狠的触发信息和触达每一个用户,带来更为极致的使用体验。
再通俗点说就是在网速一定的前提下,CDN就像网络中快递员小哥。
在该架构中,OSS作为海量文件存储源,静态图片、视频文件、下载包、App更新包等均放在OSS,同时OSS作为CDN的源站,通过CDN加速分发,用户通过CDN节点就近获得文件。
该架构优势十分明显:
-
降低Web服务器负载,静态文件访问负载全部通过CDN;
-
存储费用最低,OSS的存储费用仅为ECS磁盘费用的50%;
-
海量存储空间,无需考虑存储架构升级;
- 流量费用低,相比直接通过OSS访问,除极少额外增加的回源流量外,主要流量使用CDN流量,单价最低只需0.26GB,远远低于OSS直接访问的外网流量单价。