初识CDN

loop_0 · · 2511 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
## 什么是`CDN`? * `CDN`的全称`Content Delivery Network`,即 内容分发网络. * 简单来讲`CDN`是用户到源服务器之间的一层缓存层, 缓存一些静态资源, 静态的web页面, 流媒体等, 提高访问速度, 降低源服务器负载(网络资源, 硬件资源), 集体抗`D.D.O.S`(高可用)。 ## 一个简陋`CDN`模型 * `Nginx`web反向代理服务器, 一般用于web服务器负载均衡, 具有静态资源缓存的功能, 此处我们重点利用这个功能去搭建我们的`CDN`。 * ![cnd-nginx.png](https://static.studygolang.com/200603/e8c28c199a4893a5f4edf36bd9b4152a.png) * 如图所示, 我们使用`nginx`方向代理我们的静态资源源服务器, 在使用更多的节点去反向代理 代理源服务器的那个`nginx`, 依次类推形成一个树形结构, 树的叶子节点就是我们的边缘节点, 此时我们再实现一个域名解析服务器, 需要特殊处理一下当请求我们源服务器的域名时, 返回一个边缘节点中与用户之间网络最快, 负载最小的节点`IP`, 我认为这就可以算是一个`CDN`, 但是非常简陋, 问题很多, 例如:网络中有几个缓存节点(`nginx`), 就会有几份缓存数据, 过于冗余, 负载不均衡, 边缘节点的负载可能会大些, 1/2层的节点可能负载会小很多等。 ## 百度百科中`CDN`的介绍 * `CDN`网络中包含的功能实体包括内容缓存设备、内容交换机、内容路由器、`CDN`内容管理系统等组成。 * 内容缓存设备: * 百度百科定义: 内容缓存为`CDN`网络节点,位于用户接入点,是面向最终用户的内容提供设备,可缓存静态Web内容和流媒体内容,实现内容的边缘传播和存储,以便用户的就近访问. * 在上述模型中, 就是`nginx`节点 * 内容交换机: * 百度百科定义: 处于用户接入集中点,可以均衡单点多个内容缓存设备的负载,并对内容进行缓存负载平衡及访问控制. * 因为上述模型中有几个`nginx`节点就可能有几份缓存数据, 所以在上述模型中没有体现, 我们暂时跳过。 * 内容路由器: * 百度百科定义: 内容路由器负责将用户的请求调度到适当的设备上。内容路由通常通过负载均衡系统来实现,动态均衡各个内容缓存站点的载荷分配,为用户的请求选择最佳的访问站点,同时提高网站的可用性。内容路由器可根据多种因素制定路由,包括站点与用户的临近度、**内容的可用性**、网络负载、设备状况等。负载均衡系统是整个`CDN`的核心。负载均衡的准确性和效率直接决定了整个`CDN`的效率和性能。 * 在上述模型中就是我们实现的域名解析服务器 * 百度百科这里提到了, 内容路有器可以根据多种路由指定路由规则, 其中包含一个**内容的可用性**, 我查阅了很多资料, 这个内容路由器的实现一般都是通过`DNS`, 或者更专业的叫法叫 智能`DNS`, 虽然不知道智能`DNS`的具体流程, 但是其本身终归还是域名解析服务, 单纯通过域名是无法判断**内容可用性**的 , 因为连要访问的资源是什么都不知道, 又怎么能判断其有效性呢? 百度百科这里或许是指的非智能`DNS`的另一种实现, 也可能是我的理解错误。 * `CDN`内容管理系统: * 不是必须的, 这里暂时不考虑. ## 基于分布式存储的`CDN`模型 * 上述那个简陋的`CDN`模型中, 我们提到的缺点就是数据过于冗余, 负载不均衡等, 此时我们可以将我们的内容缓存设备的策略更换一下, 使用分布式的存储(不太了解), 再结合负载均衡, 以及我们的集群本身就是缓存层, 我**天马行空**的这样想象到, 我们的分布式的缓存数据应该是这样的: * ![cdn-cluster.png](https://static.studygolang.com/200603/ded0437a49bc603024cc2e1147da0e37.png) * 首先, 会根据数据热度来决策在整个缓存层的副本数量, 所以我们缓存副本的数量不是1 2 3..., 很可能是0.7+0.7+0.5的关系, (ps: 这可能也是我们在访问某些视频网站时, 一些热门的视频播放反而加载很快, 而特别冷门的视频却特别慢), 这也是一种负载均衡. * 然后, 是内容路由, 缓存层节点之间的内容路由, 同样需要负载均衡. * 我认为以上两点是我们之前跳过的**内容交换机**解决的问题, 内容缓存节点会缓存哪些数据, 以及缓存层内容缓存节点之间内部如何路由, 都是内容交换机来决策.

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2511 次点击  
加入收藏 微博
1 回复  |  直到 2020-06-03 22:01:26
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传