《CDN 之我见》系列二:原理篇(缓存、安全)

简介: 《CDN之我见》共由三个篇章组成,分为原理篇、详解篇和陨坑篇。本篇章适合那些从未接触过、或仅了解一些 CDN 专业术语,想深入了解和感受 CDN 究竟是什么的同学。本次由白金老师继续为大家分享《CDN之我见》系列二,主要讲解缓存是什么、工作的基本原理是怎样的,以及 CDN 是如何面对安全挑战的。

本文作者:白金
上篇回顾:《CDN 之我见》系列一:原理篇(由来、调度)

《CDN之我见》共由三个篇章组成,分为原理篇、详解篇和陨坑篇。本篇章适合那些从未接触过、或仅了解一些 CDN 专业术语,想深入了解和感受 CDN 究竟是什么的同学。本次由白金老师继续为大家分享《CDN之我见》系列二,主要讲解缓存是什么、工作的基本原理是怎样的,以及 CDN 是如何面对安全挑战的。

image

首先我们先来说一下 CDN 的缓存系统。

image

缓存也叫 Cache,是 CDN 领域最重要的一个组成部分,对于静态内容分发,大至视频点播、文件下载,小至 html 页面、jpg/gif/png 图片、css/js 等,都可以缓存到本地,最终用户(网民)访问时,不必回到原始服务器拿取数据,从而节省了时间、降低了源站服务器的网络带宽支出和负载。

对于 CDN 来说,每台 Cache 机器每天的请求量是十分惊人的,磁盘上所存储的内容量也多得可怕,十几块 TB 级的硬盘被塞满数据也是很正常的事情,因此当一个请求到来时,能迅速检索出磁盘上的文件并读取、吐给最终用户成了一件很重要的事情。

如何快速检索数据?

一般采用高效的数据结构或算法,例如 Hash(哈希)。

image

Hash 算法简单说就是通过某种模运算取余,按照有限余数做为不同链表的坐标进行数据存储。若当有多个数据余数相同时,则再按照单链表的方式存储数据。

理论上 Hash 算法在最好的情况下,和 map 无异,O(1) 的时间复杂度。

在最坏情况下(所有数据样本经过 Hash 运算都得到同一个余数),则性能与单链表无异,查找时间复杂度是 O(n)。

如果磁盘空间不够了怎么办?

使用基于访问热度的内容淘汰算法,例如 FIFO、LRU、LFU、SLRU、LIRS 等,感兴趣的同学可以看一下推荐的文章:

image

SATA 盘虽然存储空间大,但受寻道速度限制,IOPS 往往很低,响应时间会被拉长。而相比之下,SSD 可以大幅度提升响应速度,但受成本和技术工艺限制,SSD 盘的空间相比 SATA 而言要小很多、贵很多。综合上面两种情况,混合盘的分级存储模式诞生了,即 SSD + SATA,通过热度算法将最热的内容放到内存、次热放到 SSD,冷数据放到 SATA,最冷数据受磁盘空间限制不进行存储,直接从 upstream 或源站获取。

image

当网民访问到 Cache 服务器上时,Cache 服务器会利用 Hash 算法查找本地是否存有缓存数据,若有,则直接读取,组织成 HTTP 报文内容,吐给网民。

image

同理,若当本地没有缓存住的内容时,Cache 会向其上游(upstream)拿取数据吐给网民,并根据内容的描述(例如是否可以缓存,需要缓存多久)来决定是否/如何缓存住这个请求内容。

image

CDN 的关键技术是调度和缓存,有很多开源软件可以实现 CDN 的基本需求,但性能却远达不到商业需求。真正要做高性能的 Cache 系统,不仅需要在数据结构与算法层面深入,更要从硬件、操作系统、文件系统、底层原理等多个领域做更多的研究(例如阿里云自研的 CDN Cache 系统使用了裸盘技术)。
从上述内容大致可以看出一个道理:CDN,入门易,做好难!

image

原理篇最后一部分简单和大家介绍一下 CDN 的安全

image

一般的攻击分为两种类型,一种是蛮力型攻击,一种是技巧型攻击。
例如 SYN-Flooding、反射攻击、带宽饱和攻击等,都是通过海量请求(有些甚至是毫无用处的请求)将系统带宽资源、计算资源耗尽,从而达到使目标无法正常提供服务能力的目的,达到攻击者的攻击意图。
这种攻击的特点是:

  1. 攻击源分布广泛,攻击具有持续性,难以准确溯源
  2. 攻击手段暴力,流量大,以达到短时间不能服务为主要目的
  3. 技术门槛低,但由于需要众多资源,攻击成本较高

image

而例如 XSS 跨站、SQL 注入、CSRF、漏洞利用等,都是通过网站提供的系统(例如老版本操作系统存在协议栈崩溃漏洞)、组件(例如 bash、OpenSSL、Struts2 存在远程执行漏洞)、软件逻辑漏洞(例如输入框检测存在缺陷导致拼凑 SQL 语句的 SQL 注入漏洞)等来进行攻击。
这种攻击的特点是:

  1. 攻击流量小
  2. 攻击较为隐蔽,不易被察觉
  3. 以窃取内容为主要目的
  4. 攻击具有一定的破坏和不可逆性
  5. 无需大量攻击资源,攻击成本较低,技术含量较高

接入 CDN 后就可以规避安全风险吗?

是的,或者说可以从一定程度上尽可能解决或尽可能规避安全风险。

1. 隐藏源站信息

当某个网站接入 CDN 后,源站信息会被隔离,外界很难找到真正的源站地址(这里说很难,其实也是有可能的,主要看源站的安全防范意识),这样攻击者至少就无法直接对源站进行直接攻击。

2. 分布式架构

若做不到直接对源站进行直接攻击,则攻击者实际攻击的目标不是源站,而是 CDN 厂商的分布式架构,此时除非 CDN 厂商的所有 CDN 节点的所有服务器都被攻陷,否则仍然有部分服务器是可以提供服务的。

3. 安全防护

对于技巧型攻击,CDN 厂商前端可以通过前置应用层过滤器的技术来分析、拦截可能存在的安全隐患。(例如阿里云的 SCDN 则是集成了 Security 与 CDN 于一身的新产品)

image

作为“系列二”的最后收尾,我想强调的是,CDN 除了技术,还有例如后台支撑系统、售后、销售等一系列的组件和团队配合运作,才能有安全、高效、稳定、极佳用户体验感的 CDN 产品。

最后还是那句话:CDN,入门易,做好难!

__

由于篇幅的关系,系列二把上次欠大家的“原理篇”补充齐全!

“系列三” 将开启《CDN 之我见》的第二个篇章:“详解篇”,会针对 CDN 领域的一些鲜为人知的技术、理念进行深入剖析,各位看官敬请期待。

欢迎大家拍砖!

活动推荐

【TechDay】阿里云CDN Tengine开源技术沙龙-上海站,将在8月29日下午阿里虹桥中心展开,多位专家现场探讨CDN QUIC、TLSv1.3、直播、Tengine实践等话题,参与活动即可赢取阿里云定制礼品,点击了解活动详情与报名:https://yq.aliyun.com/event/359

目录
相关文章
|
27天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
173 78
|
5月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
536 1
|
2月前
|
存储 缓存 监控
配置 Webpack 5 持久化缓存时需要注意哪些安全问题?
【10月更文挑战第23天】通过全面、系统地分析和应对安全问题,能够更好地保障 Webpack 5 持久化缓存的安全,为项目的成功构建和运行提供坚实的安全基础。同时,要保持对安全技术的关注和学习,不断提升安全防范能力,以应对日益复杂的安全挑战。
|
3月前
|
缓存 负载均衡 网络协议
|
4月前
|
缓存 监控 负载均衡
在使用CDN时,如何配置缓存规则以优化性能
在使用CDN时,如何配置缓存规则以优化性能
|
8月前
|
缓存 安全 Java
7张图带你轻松理解Java 线程安全,java缓存机制面试
7张图带你轻松理解Java 线程安全,java缓存机制面试
|
5月前
|
存储 缓存 算法
缓存优化利器:5分钟实现 LRU Cache,从原理到代码!
嗨,大家好!我是你们的技术小伙伴——小米。今天带大家深入了解并手写一个实用的LRU Cache(最近最少使用缓存)。LRU Cache是一种高效的数据淘汰策略,在内存有限的情况下特别有用。本文将从原理讲起,带你一步步用Java实现一个简单的LRU Cache,并探讨其在真实场景中的应用与优化方案,如线程安全、缓存持久化等。无论你是初学者还是有一定经验的开发者,都能从中受益。让我们一起动手,探索LRU Cache的魅力吧!别忘了点赞、转发和收藏哦~
124 2
|
5月前
|
缓存 监控 网络协议
DNS缓存中毒原理
【8月更文挑战第17天】
129 1
|
5月前
|
存储 缓存 NoSQL
微服务缓存原理与最佳实践
微服务缓存原理与最佳实践