CDN在秒杀系统中的作用

时间:2024-05-30 15:57:56

背景:

昨天有个师兄拿了腾讯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”,即内容分发网络。

基本思路:

尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

目的:

解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度和成功率。

控制时延无疑是现代信息科技的重要指标,CDN的意图就是尽可能的减少资源在转发、传输、链路抖动等情况下顺利保障信息的连贯性。

CDN就是扮演者护航者和加速者的角色,更快准狠的触发信息和触达每一个用户,带来更为极致的使用体验。
再通俗点说就是在网速一定的前提下,CDN就像网络中快递员小哥。

上述部分内容转自知乎的一个回答:https://www.zhihu.com/question/37353035/answer/175217812


有了CDN的介绍和基本理解,我们来看一下为什么静态资源(静态图片、视频文件、下载包、App更新包等)放到CDN服务器,由于动态内容涉及到频繁的与系统后台数据库进行交互,涉及到很多用户信息的更新。例如订票系统、购物网站,这种对实时性要求较高,如果用CDN来进行分发,那么不能及时的更新,所以需要回源。而静态资源如视频,图片等对更新实时性要求不高,可以利用CDN。CDN对网站进行架构优化,做到网站文件的动静分离的,提升用户访问体验,实现成本可控。

最后举一个从阿里云栖社区找到的一个案例。(比较容易理解,不懂得同学可以稍微查一下(*^▽^*))

背景
传统动静不分离的产品架构,随着访问量在增长,性能会成为瓶颈。以一个常见的Web站点为例。www.acar.com是一个刚建立汽车资讯车友交流网站,主站用Php搭建,有10GB的图片素材,部分JS文件。目前购买一台ECS放置所有程序代码,并在ECS上安装MySQL数据库。随着用户访问量的不断增长,不少用户反映,访问网站的速度越来越慢,图片加载慢,网站响应慢,同时网站技术人员也发现用户上传的图片越来越多,快超过1TB了。在这种情况下,用户可以通过利用OSS和CDN对网站进行架构优化,做到网站文件的动静分离的,提升用户访问体验,实现成本可控。

网站动静分离架构
CDN在秒杀系统中的作用

在该架构中,OSS作为海量文件存储源,静态图片、视频文件、下载包、App更新包等均放在OSS,同时OSS作为CDN的源站,通过CDN加速分发,用户通过CDN节点就近获得文件。

该架构优势十分明显:

  • 降低Web服务器负载,静态文件访问负载全部通过CDN;
  • 存储费用最低,OSS的存储费用仅为ECS磁盘费用的50%;
  • 海量存储空间,无需考虑存储架构升级;
  • 流量费用低,相比直接通过OSS访问,除极少额外增加的回源流量外,主要流量使用CDN流量,单价最低只需0.26GB,远远低于OSS直接访问的外网流量单价。

勉强算上是原创博客,搬运工+自己的愚见。有不当处欢迎指正!