摘要:真正要做高性能的系统,不仅需要在数据结构与算法层面深入,更要从硬件操作系统文件系统底层原理等多个领域做更多的研究例如阿里云自研的系统使用了裸盘技术。
《CDN之我见》共由三个篇章组成,分为原理篇、详解篇和陨坑篇。本篇章适合那些从未接触过、或仅了解一些 CDN 专业术语,想深入了解和感受 CDN 究竟是什么的同学。本次由白金老师继续为大家分享《CDN之我见》系列二,主要讲解缓存是什么、工作的基本原理是怎样的,以及 CDN 是如何面对安全挑战的。
首先我们先来说一下 CDN 的缓存系统。
缓存也叫 Cache,是 CDN 领域最重要的一个组成部分,对于静态内容分发,大至视频点播、文件下载,小至 html 页面、jpg/gif/png 图片、css/js 等,都可以缓存到本地,最终用户(网民)访问时,不必回到原始服务器拿取数据,从而节省了时间、降低了源站服务器的网络带宽支出和负载。
对于 CDN 来说,每台 Cache 机器每天的请求量是十分惊人的,磁盘上所存储的内容量也多得可怕,十几块 TB 级的硬盘被塞满数据也是很正常的事情,因此当一个请求到来时,能迅速检索出磁盘上的文件并读取、吐给最终用户成了一件很重要的事情。
如何快速检索数据?
一般采用高效的数据结构或算法,例如 Hash(哈希)。
Hash 算法简单说就是通过某种模运算取余,按照有限余数做为不同链表的坐标进行数据存储。若当有多个数据余数相同时,则再按照单链表的方式存储数据。
理论上 Hash 算法在最好的情况下,和 map 无异,O(1) 的时间复杂度。
在最坏情况下(所有数据样本经过 Hash 运算都得到同一个余数),则性能与单链表无异,查找时间复杂度是 O(n)。
如果磁盘空间不够了怎么办?
使用基于访问热度的内容淘汰算法,例如 FIFO、LRU、LFU、SLRU、LIRS 等,感兴趣的同学可以看一下推荐的文章:
《缓存淘汰算法 - LRU》http://flychao88.iteye.com/bl...
《Cache 替换算法只:LIRS》https://www.jianshu.com/p/036...
《详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)》https://www.cnblogs.com/s-b-b...
《HLR中的cache机制及其SLRU替换算法》http://www.docin.com/p-126462...
SATA 盘虽然存储空间大,但受寻道速度限制,IOPS 往往很低,响应时间会被拉长。而相比之下,SSD 可以大幅度提升响应速度,但受成本和技术工艺限制,SSD 盘的空间相比 SATA 而言要小很多、贵很多。综合上面两种情况,混合盘的分级存储模式诞生了,即 SSD + SATA,通过热度算法将最热的内容放到内存、次热放到 SSD,冷数据放到 SATA,最冷数据受磁盘空间限制不进行存储,直接从 upstream 或源站获取。
当网民访问到 Cache 服务器上时,Cache 服务器会利用 Hash 算法查找本地是否存有缓存数据,若有,则直接读取,组织成 HTTP 报文内容,吐给网民。
同理,若当本地没有缓存住的内容时,Cache 会向其上游(upstream)拿取数据吐给网民,并根据内容的描述(例如是否可以缓存,需要缓存多久)来决定是否/如何缓存住这个请求内容。
CDN 的关键技术是调度和缓存,有很多开源软件可以实现 CDN 的基本需求,但性能却远达不到商业需求。真正要做高性能的 Cache 系统,不仅需要在数据结构与算法层面深入,更要从硬件、操作系统、文件系统、底层原理等多个领域做更多的研究(例如阿里云自研的 CDN Cache 系统使用了裸盘技术)。
从上述内容大致可以看出一个道理:CDN,入门易,做好难!
原理篇最后一部分简单和大家介绍一下 CDN 的安全
一般的攻击分为两种类型,一种是蛮力型攻击,一种是技巧型攻击。
例如 SYN-Flooding、反射攻击、带宽饱和攻击等,都是通过海量请求(有些甚至是毫无用处的请求)将系统带宽资源、计算资源耗尽,从而达到使目标无法正常提供服务能力的目的,达到攻击者的攻击意图。
这种攻击的特点是:
攻击源分布广泛,攻击具有持续性,难以准确溯源
攻击手段暴力,流量大,以达到短时间不能服务为主要目的
技术门槛低,但由于需要众多资源,攻击成本较高
而例如 XSS 跨站、SQL 注入、CSRF、漏洞利用等,都是通过网站提供的系统(例如老版本操作系统存在协议栈崩溃漏洞)、组件(例如 bash、OpenSSL、Struts2 存在远程执行漏洞)、软件逻辑漏洞(例如输入框检测存在缺陷导致拼凑 SQL 语句的 SQL 注入漏洞)等来进行攻击。
这种攻击的特点是:
攻击流量小
攻击较为隐蔽,不易被察觉
以窃取内容为主要目的
攻击具有一定的破坏和不可逆性
无需大量攻击资源,攻击成本较低,技术含量较高
接入 CDN 后就可以规避安全风险吗?
是的,或者说可以从一定程度上尽可能解决或尽可能规避安全风险。
隐藏源站信息
当某个网站接入 CDN 后,源站信息会被隔离,外界很难找到真正的源站地址(这里说很难,其实也是有可能的,主要看源站的安全防范意识),这样攻击者至少就无法直接对源站进行直接攻击。
分布式架构
若做不到直接对源站进行直接攻击,则攻击者实际攻击的目标不是源站,而是 CDN 厂商的分布式架构,此时除非 CDN 厂商的所有 CDN 节点的所有服务器都被攻陷,否则仍然有部分服务器是可以提供服务的。
安全防护
对于技巧型攻击,CDN 厂商前端可以通过前置应用层过滤器的技术来分析、拦截可能存在的安全隐患。(例如阿里云的 SCDN 则是集成了 Security 与 CDN 于一身的新产品)
作为“系列二”的最后收尾,我想强调的是,CDN 除了技术,还有例如后台支撑系统、售后、销售等一系列的组件和团队配合运作,才能有安全、高效、稳定、极佳用户体验感的 CDN 产品。
最后还是那句话:CDN,入门易,做好难!
__
由于篇幅的关系,系列二把上次欠大家的“原理篇”补充齐全!
“系列三” 将开启《CDN 之我见》的第二个篇章:“详解篇”,会针对 CDN 领域的一些鲜为人知的技术、理念进行深入剖析,各位看官敬请期待。
原文链接
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/11878.html
摘要:真正要做高性能的系统,不仅需要在数据结构与算法层面深入,更要从硬件操作系统文件系统底层原理等多个领域做更多的研究例如阿里云自研的系统使用了裸盘技术。 《CDN之我见》共由三个篇章组成,分为原理篇、详解篇和陨坑篇。本篇章适合那些从未接触过、或仅了解一些 CDN 专业术语,想深入了解和感受 CDN 究竟是什么的同学。本次由白金老师继续为大家分享《CDN之我见》系列二,主要讲解缓存是什么、工...
摘要:接下来说一下调度。调度是中的重中之重,流量接入流量牵引选择合适的节点服务器等工作,都是在调度环节完成的。协议中有一个特殊的返回状态。由于篇幅的关系,系列一先把的历史由来,以及调度相关的知识和大家分享。 CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它能够有效解决网络带宽小、用户访问量大、网点分布不均等问题。 为了让大...
摘要:接下来说一下调度。调度是中的重中之重,流量接入流量牵引选择合适的节点服务器等工作,都是在调度环节完成的。协议中有一个特殊的返回状态。由于篇幅的关系,系列一先把的历史由来,以及调度相关的知识和大家分享。 CDN是将源站内容分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性的技术。它能够有效解决网络带宽小、用户访问量大、网点分布不均等问题。 为了让大...
摘要:即使秒杀系统崩溃了,也不会对网站造成影响。动态生成随机下单页面的为了避免用户直接访问下单需要将动态化,用随机数作为参数,只能秒杀开始的时候才生成。架构设计如何控制秒杀商品页面抢购按钮的可用禁用。该文件不被缓存的做法随机数。 秒杀背景 电商中为了吸引顾客、聚集人气,经常会策划一些秒杀活动。活动中售卖的商品,要么价格远低于市场价格,要么比较稀缺(如一些新发布的商品)。这些商品电商一般都会限...
阅读 4000·2021-11-22 13:53
阅读 1627·2021-09-23 11:52
阅读 2418·2021-09-06 15:02
阅读 877·2019-08-30 15:54
阅读 843·2019-08-30 14:15
阅读 2364·2019-08-29 18:39
阅读 598·2019-08-29 16:07
阅读 399·2019-08-29 13:13