• CDN 分析详解


    一、什么是CDN ?

    内容分发网络(CDN)是指一组分布在不同地理位置的服务器,协同工作以提供互联网内容的快速交付。

    CDN 允许快速传输加载互联网内容所需的资源,包括 HTML 页面、javascript 文件、样式表、图像和视频。 CDN 服务已得到不断普及。如今,大多数 web 流量都通过 CDN 提供服务,包括来自Facebook、Netflix 和亚马逊等主要网站的流量。

    正确配置的 CDN 还可帮助保护网站免受某些常见的恶意攻击,例如分布式拒绝服务(DDOS)攻击

    1.1 使用CDN 有什么好处

    尽管使用 CDN 的好处取决于互联网资产的大小和需求,但对于大多数用户而言,主要好处可以分为以下四个不同的部分:

    1. 缩短网站加载时间 – 通过将内容分发到访问者附近的 CDN 服务器(以及其他优化措施),访问者体验到更快的页面加载时间。由于访问者更倾向于离开加载缓慢的网站,CDN 可以降低跳出率并增加人们在该网站上停留的时间。换句话说,网站速度越快,用户停留的时间越长。
    2. 减少带宽成本 – 网站托管的带宽消耗成本是网站的主要费用。通过缓存和其他优化,CDN 能够减少源服务器必须提供的数据量,从而降低网站所有者的托管成本。
    3. 增加内容可用性和冗余 – 大流量或硬件故障可能会扰乱正常的网站功能。由于 CDN 具有分布式特性,因此与许多源服务器相比,CDN 可以处理更多流量并更好地承受硬件故障。
    4. 改善网站安全性 – CDN 可以通过提供 DDoS 缓解、安全证书的改进以及其他优化措施来提高安全性。

    1.2 CDN 如何工作

    CDN 的核心是一个服务器网络,目的是尽可能快速、便宜、可靠和安全地交付内容。为了提高速度和连接性,CDN 会将服务器放置在不同网络之间的交换点。

    这些互联网交换点(IXP)是不同互联网提供商连接的主要位置,以便彼此提供对来自其不同网络的流量的访问。通过连接到这些高速且高度互连的位置,CDN 提供商可以减少高速数据传输中的成本和传输时间。

    什么是 CDN

    除了在 IXP 中放置服务器,CDN 还对标准客户端/服务器数据传输进行了诸多优化。 CDN 将数据中心放置在全球的战略位置,增强安全性,并设计成可承受各种类型的故障和互联网拥塞。

    互联网交换点(IXP)是互联网基础设施公司(如互联网服务提供商(ISP)和CDN)相互连接的物理位置。这些位置位于不同网络的“边缘”,允许网络提供商在其网络之外共享传输。
    通过在IXP位置内的存在,公司能够缩短从其他参与网络到中转站的路径,从而减少延迟,改善往返时间,并可能降低成本。

    解析:  IXP 也就是CDN 运营商在不同地理位置的网络,接入不同运营商线路的服务节点

    1.3 延迟 – CDN 如何改善网站加载时间?

    在网站加载内容方面,隨着网站速度变慢,用户数量会迅速减少。 CDN 服务可以通过以下方式帮助减少加载时间:

    • CDN 的全球分布性可缩短用户与网站资源之间的距离。CDN 使得用户不必连接到网站源服务器的所在地,而是连接到一个地理位置更近的数据中心。更少的传输时间意味着更快的服务。
    • 硬件和软件优化,例如有效的负载均衡和固态硬盘驱动器,可以帮助数据更快地到达用户。
    • CDN 可以使用最小化和文件压缩之类的策略来减小文件大小,从而减少传输的数据量。较小的文件意味着更快的加载时间。
    • CDN 还可以通过优化连接重用和启用 TLS 假启动来加速使用 TLS/SSL 的站点。
    CDN 的一大优势是它能够快速、高效地交付内容。CDN 性能优化可分为三个类别。
    
    缩短距离:缩短客户端与所请求数据之间的物理距离
    优化硬件/软件:提高服务器端基础结构的性能,例如通过使用固态硬盘驱动器和高效负载均衡
    减少数据传输:采用各种技术来减小文件大小,以便快速进行初始页面加载

    二、CDN cache 

      缓存是内容交付网络(CDN)服务的核心。类似于浏览器缓存将文件存储在硬盘上的方式,在硬盘上可以更快地访问文件,CDN将您的网站内容移动到功能强大的代理服务器上,这些服务器为加速内容分发而优化。

    缓存的工作原理是有选择地将网站文件存储在CDN的缓存代理服务器上,从附近位置浏览的网站访问者可以快速访问这些文件。

    大多数网站内容由静态预格式化文件组成,这些文件预计不会随时间(或针对不同的用户)而更改。这些文件是缓存的默认候选文件,而动态文件是根据数据库中的信息动态生成的。

    例如:带有动态生成的产品信息的静态电子商店模板。典型的静态文件包括:五种常见的资源

    Template Images 模板图像
    Videos          视频
    Music           音乐
    JavaScript      JavaScript 脚本
    CSS Files       CSS文件

    2.1 缓存头部

     缓存目前大多都是针对http 协议的控制,业务交互基于http 协议的交互。

     缓存控制主要被分为两方面   Cache-Control (缓存控制)和  Additional HTTP Cache Headers  (附加缓存头)

       2.1.1 Cache-Control (缓存控制)

    Cache-Control: Max-Age
    Cache-Control: No-Cache
    Cache-Control: No-Store
    Cache-Control: Public
    Cache-Control: Private

    Cache-Control: Max-Age

      max age request指令以秒为单位定义资源的缓存副本过期所需的时间量。过期后,浏览器必须通过向服务器发送另一个请求来刷新其资源版本。
    
      例如,cache control:max age=120表示返回的资源有效期为120秒,之后浏览器必须请求更新的版本。

    Cache-Control: No-Cache

     no cache指令意味着浏览器可以缓存响应,但必须首先向源服务器提交验证请求。

    Cache-Control: No-Store

    no-store指令意味着不允许浏览器缓存响应,并且必须在每次请求响应时从服务器中提取响应。此设置通常用于敏感数据,例如个人银行详细信息。

    Cache-Control: Public

      public response指令指示任何缓存都可以缓存资源。

    Cache-Control: Private

      private response指令指示资源是特定于用户的,它仍然可以缓存,但只能缓存在客户端设备上。例如,标记为私有的网页响应可以由桌面浏览器缓存,但不能由内容交付网络(CDN)缓存。

    2.1.2  Additional HTTP Cache Headers  (附加缓存头)

    Expires
    ETag
    Vary 

    Expires

    Expires–此标头指定缓存资源过期的固定日期/时间。例如,Expires:Sat,2017年5月13日07:00:00 GMT表示缓存的资源将于2017年5月13日上午7:00 GMT到期。
    当存在包含max age指令的缓存控制标头时,Expires标头将被忽略。

     ETag

    ETag–一个响应头,根据标记(引号中的字符串,例如“675af34563dc-tr34”)标识服务内容的版本,该标记在资源修改后会更改。如果在发出请求之前令牌保持不变,浏览器将继续使用其本地版本。
    相当于文件唯一标识符

    Last-Modified

    The Last-Modified  是一个响应首部,其中包含源头服务器认定的资源做出修改的日期及时间。 它通常被用作一个验证器来判断接收到的或者存储的资源是否彼此一致。由于精确度比  ETag 要低,所以这是一个备用机制。
    包含有 If-Modified-Since 或 If-Unmodified-Since 首部的条件请求会使用这个字段。

    Vary

    Vary–一个标头,用于确定必须与缓存资源匹配才能将其视为有效的响应。例如,标头Vary:Accept Language,User Agent指定用户代理和语言的每个组合都必须存在缓存版本。

    三、cache  实验

      3.1 浏览器缓存策略 Expires 

        在这个里面以max-age 为准,如果只有 expires ,那么时间到期重新请求

     3.2 Cache-control:max-age

    Expires 的方法很好,但是我们每次都得算一个精确的时间。 max-age 标签可以让
    我们更加容易的处理过期时间。我们只需要说,这份资料你只能用一个星期就可以了。
    Max-age 使用秒来计量,如:
    Cache-Control:max-age=645672
    指定页面 645672 秒(7.47 天)后过期。

    3.3 Last-Modified

    服务器为了通知浏览器当前文件的版本,会发送一个上次修改时间的标签,例如:
    Last-Modified:Thu, 20 Jan 2022 04:40:00 GMT
    这样浏览器就知道他收到的这个文件创建时间,在后续的请求中,浏览器会按照下面
    的规则进行验证:
    1. 浏览器: Hey,我需要 XXXXXXXX.js 这个文件,如果是在 Tue, 20 Jan 2022
    04:40:00 GMT 之后修改过的,请发给我。
    2. 服务器:(检查文件的修改时间)
    3. 服务器: Hey,这个文件在那个时间之后没有被修改过,你已经有最新的版本了。
    4. 浏览器:太好了,那我就显示给用户了。
    在这种情况下,服务器仅仅返回了一个 304 的响应头,减少了响应的数据量,提高
    了响应的速度。 关于 304 响应,请参考

    3.4 ETag

    通常情况下,通过修改时间来比较文件是可行的。但是在一些特殊情况,例如服务器
    的时钟发生了错误,服务器时钟进行修改,夏时制 DST 到来后服务器时间没有及时更新,
    这些都会引起通过修改时间比较文件版本的问题。
    ETag 可以用来解决这种问题。 ETag 是一个文件的唯一标志符。就像一个哈希或者
    指纹,每个文件都有一个单独的标志,只要这个文件发生了改变,这个标志就会发生变化
    
    服务器返回 ETag 标签:

    接下来的访问顺序如下所示:
    1. 浏览器: Hey,我需要 xxxxxxxx.js 这个文件,有没有不匹配
    "e96c15f68c6885e098749f67170b4c3b"这个串的
    2. 服务器:(检查 ETag…)
    3. 服务器: Hey,我这里的版本也是"e96c15f68c6885e098749f67170b4c3b",你已经是
    最新的版本了
    4. 浏览器:好,那就可以使用本地缓存了
    如同 Last-modified 一样, ETag 解决了文件版本比较的问题。只不过 ETag 的级
    别比 Last-Modified 高一些。

    四、 浏览器缓存刷新

    1. 在地址栏中输入网址后按回车或点击转到按钮

    浏览器以最少的请求来获取网页的数据,浏览器会对所有没有过期的内容直接使用本
    地缓存,从而减少了对浏览器的请求。所以, Expires, max-age 标记只对这种方式有效。


    2. 按 F5 或浏览器刷新按钮

    浏览器会在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,它能够
    让 Last-Modified、 ETag 发挥效果,但是对 Expires 无效。

    3. 按 Ctrl+F5 或按 Ctrl 并点击刷新按钮

    这种方式就是强制刷新,总会发起一个全新的请求,不使用任何缓存。


    3.1 CDN 缓存

    浏览器本地缓存失效后,浏览器会向 CDN 边缘节点发起请求。类似浏览器缓存, CDN
    边缘节点也存在着一套缓存机制。


    3.2 CDN 缓存的缺点
    CDN 的分流作用不仅减少了用户的访问延时,也减少的源站的负载。但其缺点也很
    明显:当网站更新时,如果 CDN 节点上数据没有及时更新,即便用户再浏览器使用 Ctrl
    +F5 的方式使浏览器端的缓存失效,也会因为 CDN 边缘节点没有同步最新数据而导致用
    户访问异常。

    3.3 CDN 缓存策略
    CDN 边缘节点缓存策略因服务商不同而不同,但一般都会遵循 http 标准协议,通过
    http 响应头中的 Cache-control: max-age 的字段来设置 CDN 边缘节点数据缓存时间。
    当客户端向 CDN 节点请求数据时, CDN 节点会判断缓存数据是否过期,若缓存数
    据并没有过期,则直接将缓存数据返回给客户端;否则, CDN 节点就会向源站发出回源
    请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
    CDN 服务商一般会提供基于文件后缀、目录多个维度来指定 CDN 缓存时间,为用
    户提供更精细化的缓存管理。
    CDN 缓存时间会对“回源率” 产生直接的影响。若 CDN 缓存时间较短, CDN 边缘
    节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;
    若 CDN 缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来
    做特定的数据缓存时间管理。


    3.4 CDN 缓存刷新
    CDN 边缘节点对开发者是透明的,相比于浏览器 Ctrl+F5 的强制刷新来使浏览器本
    地缓存失效,开发者可以通过 CDN 服务商提供的“刷新缓存” 接口来达到清理 CDN 边
    缘节点缓存的目的。这样开发者在更新数据后,可以使用“刷新缓存” 功能来强制 CDN
    节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。

  • 相关阅读:
    去掉CodeIgniter URL中的index.php
    php分页方法
    CI框架下 ajax分页
    控制DIV中的文字绝对居中
    JS n秒后自动跳转实例
    IE下页面左偏移并页头空出一行解决方法
    iis服务器php环境 failed to open stream: No such file or directory解决办法
    php导出word格式数据的代码(转)
    linux mysql命令行查看显示中文
    Apache Rewrite url重定向功能的简单配置
  • 原文地址:https://www.cnblogs.com/zy09/p/15826907.html
Copyright © 2020-2023  润新知