CDN

CDN(Content Delivery Network,内容分发网络)

CDN 是一种网络架构,旨在提高用户对互联网上内容的访问速度和性能。CDN 通过在全球各地部署大量的服务器节点,将内容缓存到离用户更近的服务器上,从而减少内容传输的距离,提高访问速度和响应时间。

CDN的工作原理是:将内容(如网页、图片、视频等)缓存到离用户最近的服务器节点上,当用户请求访问这些内容时,CDN 会根据用户的地理位置和网络状况,自动选择最近的服务器节点来提供内容,从而实现快速的内容传输和分发。

CDN 应用场景

  1. 静态加速。
    静态网页:CDN 可以缓存静态网页(如HTML、CSS、JavaScript文件),并将其分发到全球各地的边缘节点,从而加速网页加载速度。
    图片和视频:CDN能够存储和传送图片、视频等静态媒体文件,通过在用户附近的服务器上提供这些资源,减少了加载时间和带宽消耗。

  2. 动态加速。
    动态内容:尽管动态内容通常不适合缓存,但 CDN 可以通过一些技术手段来加速动态内容的传输,比如动态页面的负载均衡、内容压缩和路由优化等。

  3. 流媒体加速。
    视频直播和点播:CDN 能够提供高效的流媒体分发,将视频内容快速传输给全球观众,减少了视频卡顿和加载时间,提升了用户体验。
    音频流媒体:类似于视频,CDN 也可以用于加速音频流的传输,如音乐流服务、网络广播等。

CDN 解决的主要痛点

CDN 有效地解决了目前互联网业务中网络层面的问题:

  1. 减少网络延迟和不稳定性。
    用户与业务服务器之间的物理距离可能很远,导致数据传输需要经过多次网络转发,从而增加了延迟和不稳定性。CDN 通过在全球范围内部署服务器节点,使用户能够从距离更近的服务器获取内容,从而显著减少了传输延迟和提高了稳定性。

  2. 跨运营商转发优化。
    当用户与业务服务器所在的运营商不同时,请求需要在运营商之间进行互联转发,这可能会增加延迟和不稳定性。CDN 提供了跨多个运营商的覆盖,使得用户可以从与其运营商更接近的 CDN 边缘节点获取内容,从而减少了跨运营商转发带来的问题。

  3. 提高服务器响应速度和可用性。
    业务服务器面对海量用户请求时,可能会面临网络带宽和处理能力的限制,导致响应速度下降和可用性降低。CDN通过缓存静态内容、负载均衡和智能路由等技术,可以将用户请求分发到最优的服务器节点上,从而分担了原始服务器的压力,提高了响应速度和可用性。

CDN 类型

  1. DNS 调度。
    基于DNS协议,调度系统会根据 LocalDNS 的 IP 归属地进行流量调度,返回最接近的 LocalDNS 的 cache 节点 IP;(建立 TCP/IP 连接)

    优点: DNS 系统本身是分布式的结构,LocalDNS 本身有 cache 缓存;
    缺点: LocalDNS 的地址判断力度较粗,另外用户有可能会设置错误的 LocalDNS。

  2. 302 重定向调度。
    基于 HTTP 协议,用户首先访问到调度系统,调度系统通过获取客户端 IP 归属地进行调度,组装响应头的 location 的 URL,通过状态码为 302 的方式响应给客户端,然后客户端根据新的 URL 发起连接。
    优点: 基于 HTTP 协议,通过 302 重定向方式实现调度,实现更加灵活的流量控制。
    缺点: 需要客户端进行额外的重定向操作,可能会增加延迟和复杂度。

  3. HTTPDNS 调度

    基于HTTP协议,客户端直接访问HTTPDNS接口到我们的调度系统,调度系统再通过获取客户端的IP归属地得到cache节点的 IP,以状态码为200的方式响应给客户端,然后客户端再向cache节点发起请求。
    优点: 直接利用HTTP协议,客户端可以直接访问HTTPDNS接口,调度系统通过客户端IP获取缓存节点的IP,减少了额外的重定向步骤,可以更加高效地进行流量调度。
    缺点: 需要改造客户端,增加了开发和维护的成本。

CDN 的 DNS 调度原理

  1. 用户输入访问的域名,操作系统向 DNS 服务器查询域名的 IP 地址。

    1. 首先向本地 DNS 服务器查询域名的 IP 地址。
    2. 如果本地 DNS 服务器没有缓存该域名的 IP 地址或缓存已过期,它会向 Root DNS 服务器查询域名的授权服务器。
    3. Root DNS 服务器将域名的授权 DNS 记录回应给本地 DNS 服务器。
    4. 本地 DNS 服务器得到域名的授权 DNS 记录后,继续向域名授权 DNS 查询域名的 IP 地址。
    5. 域名授权 DNS 查询域名记录后(通常是 CNAME),回应给本地 DNS 服务器。
    6. 本地 DNS 服务器得到域名 CNAME 记录后,向 CDN 智能 DNS 查询域名的 IP 地址。
    7. CDN 智能 DNS 根据一定的算法和策略(例如静态拓扑、容量等),将最适合的 CDN 节点 IP 地址回应给本地 DNS 服务器。
      • 根据用户 IP 地址,判断哪一台服务器距用户最近;
      • 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
      • 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
    8. 本地 DNS 服务器将得到的域名 IP 地址回应给用户端。
  2. 用户得到域名 IP 地址后,访问 CDN 节点服务器。

  3. CDN 节点服务器响应请求,将内容返回给客户端。

    • 如果这台缓存服务器上并没有用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
    • 如果这台缓存服务器上并 有用户想要的内容,CDN 节点会判断缓存数据是否过期:
      • 若缓存数据并没有过期,则直接将缓存数据返回给客户端
      • 否则,CDN 节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。

CDN 的302 调度原理

  1. 终端发起访问后,本地 DNS 向权威 DNS 查询域名的 IP 地址。
  2. 权威 DNS 响应本地 DNS 就近 调度服务器IP,通常是 CDN 的调度节点。
  3. 终端向调度服务器发起请求,调度服务器根据终端的IP地址、URL请求热度等因素,决定通过 302 重定向方式将用户请求调度至最优的缓存服务器上。
  4. 调度服务器返回 HTTP 302 响应,并在 Location 头中包含最优缓存服务器的URL。
  5. 终端收到 302 响应后,再次向 302 指向的地址发起请求,最优的缓存服务器收到请求后,响应内容返回给终端。

基础知识

DNS 解析过程

当客户端发起一个域名解析请求时,第一步会请求到递归名字服务器,然后依次请求这个域名所在的每一级权威的服务器。它会逐一地找到域名前面的对应的主机地址,然后应答给客户端,客户端得到IP地址之后会对相应的 IP 发起请求。然后对应的 IP 服务器返回响应给客户端。

CDN 网络要素

边缘服务器节点(Edge Servers): 这些是部署在全球各地的服务器,位于互联网骨干网和终端用户之间的关键位置。它们存储着静态和动态内容的副本,并且负责响应用户的请求。

内容缓存和存储系统: CDN 使用缓存和存储系统来存储经常请求的内容的副本。这些系统可以包括内存缓存、磁盘缓存、分布式文件系统等,用于快速提供内容,减少对源服务器的请求负载。

负载均衡器(Load Balancers): 这些组件负责将用户请求分发到CDN网络中的不同边缘节点。通过负载均衡,CDN可以有效地利用网络资源,避免过载或不平衡的情况。

智能路由和请求重定向系统: 这些系统根据用户的位置、网络条件和其他因素,选择最优的服务器节点来响应请求。这有助于最大化性能和用户体验,并且可以优化网络资源的利用。

网络优化和加速技术: CDN通常会采用各种技术来优化数据传输,例如HTTP/2、TLS加速、TCP优化、内容压缩等。这些技术有助于降低延迟、提高带宽利用率,从而改善用户体验。

监控和分析系统: CDN 需要实时监控网络状态、流量模式和服务器健康状况等。监控和分析系统可以帮助运营人员及时发现和解决问题,优化网络性能。

安全性和防护机制: 为了保护网络和内容免受攻击和滥用,CDN通常会实施安全性和防护机制,如DDoS防护、SSL加密、内容鉴别等。

管理和配置接口: CDN提供了管理和配置接口,使运营人员能够管理网络配置、监控性能指标,并进行必要的调整和优化。

CDN关键技术

调度策略

  1. 过载策略。
    当某些节点负载过重时,首先通过调整各节点的IP权重来平衡负载。
    如果负载无法通过权重调整解决,可以考虑添加新节点或删除不必要的节点,以分担负载或减少成本。

  2. 保底策略。
    当需要增加带宽供应时,首先通过调整各节点的IP权重来满足保底带宽需求。
    如果仍然不足以满足需求,可以考虑添加新节点。

  3. 流量节点使用。
    在白天带宽低峰时,关闭部分节点以节约成本。
    在晚高峰时,通过打开节点来消耗其他95节点计费带宽,以减少额外费用。

  4. 合并计费节点规划调整。
    当节点规划存在重叠或不必要的情况时,考虑合并节点以降低成本。

  5. 调整策略定时回滚。
    对于调整后效果不佳的策略改动,可以设定定时回滚机制,恢复到之前的状态。

CDN 回源规则

回源: 通过客户端请求访问资源时,如果CDN节点上未缓存该资源, CDN节点会回源站获取资源。

  1. 边缘不命中回源:当CDN节点上没有所请求的资源时,会回源到源服务器获取该资源,并将其缓存到边缘节点,以便后续请求可以直接从边缘节点获取。这是最常见的回源规则。
  2. 缓存过期回源:当 CDN 缓存中的资源过期时,即超过了预设的缓存时间或缓存策略要求,CDN 会回源到源服务器重新获取最新的资源。
  3. 防盗链回源:为了防止资源被非法盗链使用,CDN 设置了防盗链规则。当 CDN 节点检测到非法盗链请求时,会回源到源服务器获取资源,并验证请求的合法性。
  4. 热点回源:当某个资源在短时间内被大量请求,导致缓存失效或边缘节点无法满足需求时,CDN会回源到源服务器获取该热点资源,以满足用户需求。
  5. 强制回源:有时候需要强制让CDN节点回源获取最新的资源,即使缓存中的资源没有过期。这可以通过配置特定的回源规则来实现。
  6. 直接回源:有时候需要直接绕过CDN节点,将请求直接发送到源服务器。这可以用于测试、调试或某些特殊情况下的需求。在这种情况下,CDN节点不会对请求进行缓存或加速处理。

缓存更新方式

  • 主动刷新:通过API或平台,主动向CDN发出刷新缓存的请求。
    • 通过CDN管理平台或API接口主动触发缓存刷新操作。当源站内容更新后,管理员可以手动或自动地通知CDN系统刷新相关缓存(清除缓存)。
  • 过期机制:为缓存内容设置过期时间,到期后缓存服务器自动获取最新内容。
    • 根据缓存对象的设置时间(如TTL,Time-To-Live)自动失效。当缓存对象在CDN节点上存储的时间超过设定的TTL值时,该缓存对象将被视为过期并自动删除。
  • 缓存对比:通过 ETag 或 Last-Modified 头信息,对比源站内容是否有变动,决定是否更新缓存。
    • 基于特定条件(如版本号、时间戳等)来判断缓存是否失效。当缓存对象中的条件与源站内容不匹配时,CDN系统将重新从源站获取内容并更新缓存。

Reference


CDN
https://flepeng.github.io/010-network-CDN/
作者
Lepeng
发布于
2021年3月8日
许可协议