《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

目录
相关文章
|
2月前
|
存储 缓存 关系型数据库
InnoDB 引擎底层存储和缓存原理
InnoDB 引擎底层存储和缓存原理
|
2月前
|
存储 缓存 前端开发
浏览器缓存工作原理是什么?
浏览器缓存工作原理是什么?
|
1月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
3月前
|
缓存 Go API
Go 实现一个支持多种过期、淘汰机制的本地缓存的核心原理
本文旨在探讨实现一个支持多种 过期、淘汰 机制的 go 本地缓存的核心原理,我将重点讲解如何支持多样化的过期和淘汰策略。
72 0
|
3月前
|
缓存 NoSQL Java
Spring Cache 缓存原理与 Redis 实践
Spring Cache 缓存原理与 Redis 实践
154 0
|
5月前
|
域名解析 缓存 网络协议
互联网并发与安全系列教程(04) - CDN内容分发
互联网并发与安全系列教程(04) - CDN内容分发
53 0
|
28天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
66 0
|
28天前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
33 1
|
8月前
|
弹性计算 缓存 运维
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
136 0
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1

热门文章

最新文章