CDN
CDN(Content Delivery Network,内容分发网络)
CDN 是一种网络架构,旨在提高用户对互联网上内容的访问速度和性能。CDN 通过在全球各地部署大量的服务器节点,将内容缓存到离用户更近的服务器上,从而减少内容传输的距离,提高访问速度和响应时间。
CDN的工作原理是:将内容(如网页、图片、视频等)缓存到离用户最近的服务器节点上,当用户请求访问这些内容时,CDN 会根据用户的地理位置和网络状况,自动选择最近的服务器节点来提供内容,从而实现快速的内容传输和分发。
CDN 应用场景
静态加速。
静态网页:CDN 可以缓存静态网页(如HTML、CSS、JavaScript文件),并将其分发到全球各地的边缘节点,从而加速网页加载速度。
图片和视频:CDN能够存储和传送图片、视频等静态媒体文件,通过在用户附近的服务器上提供这些资源,减少了加载时间和带宽消耗。动态加速。
动态内容:尽管动态内容通常不适合缓存,但 CDN 可以通过一些技术手段来加速动态内容的传输,比如动态页面的负载均衡、内容压缩和路由优化等。流媒体加速。
视频直播和点播:CDN 能够提供高效的流媒体分发,将视频内容快速传输给全球观众,减少了视频卡顿和加载时间,提升了用户体验。
音频流媒体:类似于视频,CDN 也可以用于加速音频流的传输,如音乐流服务、网络广播等。
CDN 解决的主要痛点
CDN 有效地解决了目前互联网业务中网络层面的问题:
减少网络延迟和不稳定性。
用户与业务服务器之间的物理距离可能很远,导致数据传输需要经过多次网络转发,从而增加了延迟和不稳定性。CDN 通过在全球范围内部署服务器节点,使用户能够从距离更近的服务器获取内容,从而显著减少了传输延迟和提高了稳定性。跨运营商转发优化。
当用户与业务服务器所在的运营商不同时,请求需要在运营商之间进行互联转发,这可能会增加延迟和不稳定性。CDN 提供了跨多个运营商的覆盖,使得用户可以从与其运营商更接近的 CDN 边缘节点获取内容,从而减少了跨运营商转发带来的问题。提高服务器响应速度和可用性。
业务服务器面对海量用户请求时,可能会面临网络带宽和处理能力的限制,导致响应速度下降和可用性降低。CDN通过缓存静态内容、负载均衡和智能路由等技术,可以将用户请求分发到最优的服务器节点上,从而分担了原始服务器的压力,提高了响应速度和可用性。
CDN 类型
DNS 调度。
基于DNS协议,调度系统会根据 LocalDNS 的 IP 归属地进行流量调度,返回最接近的 LocalDNS 的 cache 节点 IP;(建立 TCP/IP 连接)优点: DNS 系统本身是分布式的结构,LocalDNS 本身有 cache 缓存;
缺点: LocalDNS 的地址判断力度较粗,另外用户有可能会设置错误的 LocalDNS。302 重定向调度。
基于 HTTP 协议,用户首先访问到调度系统,调度系统通过获取客户端 IP 归属地进行调度,组装响应头的 location 的 URL,通过状态码为 302 的方式响应给客户端,然后客户端根据新的 URL 发起连接。
优点: 基于 HTTP 协议,通过 302 重定向方式实现调度,实现更加灵活的流量控制。
缺点: 需要客户端进行额外的重定向操作,可能会增加延迟和复杂度。HTTPDNS 调度
基于HTTP协议,客户端直接访问HTTPDNS接口到我们的调度系统,调度系统再通过获取客户端的IP归属地得到cache节点的 IP,以状态码为200的方式响应给客户端,然后客户端再向cache节点发起请求。
优点: 直接利用HTTP协议,客户端可以直接访问HTTPDNS接口,调度系统通过客户端IP获取缓存节点的IP,减少了额外的重定向步骤,可以更加高效地进行流量调度。
缺点: 需要改造客户端,增加了开发和维护的成本。
CDN 的 DNS 调度原理
用户输入访问的域名,操作系统向 DNS 服务器查询域名的 IP 地址。
- 首先向本地 DNS 服务器查询域名的 IP 地址。
- 如果本地 DNS 服务器没有缓存该域名的 IP 地址或缓存已过期,它会向 Root DNS 服务器查询域名的授权服务器。
- Root DNS 服务器将域名的授权 DNS 记录回应给本地 DNS 服务器。
- 本地 DNS 服务器得到域名的授权 DNS 记录后,继续向域名授权 DNS 查询域名的 IP 地址。
- 域名授权 DNS 查询域名记录后(通常是 CNAME),回应给本地 DNS 服务器。
- 本地 DNS 服务器得到域名 CNAME 记录后,向 CDN 智能 DNS 查询域名的 IP 地址。
- CDN 智能 DNS 根据一定的算法和策略(例如静态拓扑、容量等),将最适合的 CDN 节点 IP 地址回应给本地 DNS 服务器。
- 根据用户 IP 地址,判断哪一台服务器距用户最近;
- 根据用户所请求的 URL 中携带的内容名称,判断哪一台服务器上有用户所需内容;
- 查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。
- 本地 DNS 服务器将得到的域名 IP 地址回应给用户端。
用户得到域名 IP 地址后,访问 CDN 节点服务器。
CDN 节点服务器响应请求,将内容返回给客户端。
- 如果这台缓存服务器上并没有用户想要的内容,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
- 如果这台缓存服务器上并 有用户想要的内容,CDN 节点会判断缓存数据是否过期:
- 若缓存数据并没有过期,则直接将缓存数据返回给客户端
- 否则,CDN 节点就会向源站发出回源请求,从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
CDN 的302 调度原理
- 终端发起访问后,本地 DNS 向权威 DNS 查询域名的 IP 地址。
- 权威 DNS 响应本地 DNS 就近 调度服务器IP,通常是 CDN 的调度节点。
- 终端向调度服务器发起请求,调度服务器根据终端的IP地址、URL请求热度等因素,决定通过 302 重定向方式将用户请求调度至最优的缓存服务器上。
- 调度服务器返回 HTTP 302 响应,并在 Location 头中包含最优缓存服务器的URL。
- 终端收到 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关键技术
调度策略
过载策略。
当某些节点负载过重时,首先通过调整各节点的IP权重来平衡负载。
如果负载无法通过权重调整解决,可以考虑添加新节点或删除不必要的节点,以分担负载或减少成本。保底策略。
当需要增加带宽供应时,首先通过调整各节点的IP权重来满足保底带宽需求。
如果仍然不足以满足需求,可以考虑添加新节点。流量节点使用。
在白天带宽低峰时,关闭部分节点以节约成本。
在晚高峰时,通过打开节点来消耗其他95节点计费带宽,以减少额外费用。合并计费节点规划调整。
当节点规划存在重叠或不必要的情况时,考虑合并节点以降低成本。调整策略定时回滚。
对于调整后效果不佳的策略改动,可以设定定时回滚机制,恢复到之前的状态。
CDN 回源规则
回源: 通过客户端请求访问资源时,如果CDN节点上未缓存该资源, CDN节点会回源站获取资源。
- 边缘不命中回源:当CDN节点上没有所请求的资源时,会回源到源服务器获取该资源,并将其缓存到边缘节点,以便后续请求可以直接从边缘节点获取。这是最常见的回源规则。
- 缓存过期回源:当 CDN 缓存中的资源过期时,即超过了预设的缓存时间或缓存策略要求,CDN 会回源到源服务器重新获取最新的资源。
- 防盗链回源:为了防止资源被非法盗链使用,CDN 设置了防盗链规则。当 CDN 节点检测到非法盗链请求时,会回源到源服务器获取资源,并验证请求的合法性。
- 热点回源:当某个资源在短时间内被大量请求,导致缓存失效或边缘节点无法满足需求时,CDN会回源到源服务器获取该热点资源,以满足用户需求。
- 强制回源:有时候需要强制让CDN节点回源获取最新的资源,即使缓存中的资源没有过期。这可以通过配置特定的回源规则来实现。
- 直接回源:有时候需要直接绕过CDN节点,将请求直接发送到源服务器。这可以用于测试、调试或某些特殊情况下的需求。在这种情况下,CDN节点不会对请求进行缓存或加速处理。
缓存更新方式
- 主动刷新:通过API或平台,主动向CDN发出刷新缓存的请求。
- 通过CDN管理平台或API接口主动触发缓存刷新操作。当源站内容更新后,管理员可以手动或自动地通知CDN系统刷新相关缓存(清除缓存)。
- 过期机制:为缓存内容设置过期时间,到期后缓存服务器自动获取最新内容。
- 根据缓存对象的设置时间(如TTL,Time-To-Live)自动失效。当缓存对象在CDN节点上存储的时间超过设定的TTL值时,该缓存对象将被视为过期并自动删除。
- 缓存对比:通过 ETag 或 Last-Modified 头信息,对比源站内容是否有变动,决定是否更新缓存。
- 基于特定条件(如版本号、时间戳等)来判断缓存是否失效。当缓存对象中的条件与源站内容不匹配时,CDN系统将重新从源站获取内容并更新缓存。