一、引言
(一)CDN概念
内容分发网络(Content Delivery Network,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基础知识
(一)DNS解析过程
当客户端发起一个域名解析请求时,第一步会请求到递归名字服务器,然后依次请求这个域名所在的每一级权威的服务器。它会逐一地找到域名前面的对应的主机地址,然后应答给客户端,客户端得到IP地址之后会对相应的ip发起请求。然后对应的ip服务器返回响应给客户端。
(二)CDN访问过程
客户端请求资源: 用户在浏览器中输入网址或点击链接请求某个网页或资源。
DNS解析: 浏览器首先会进行DNS解析,将域名解析成对应的IP地址。如果该域名的DNS记录中包含了CDN服务商提供的DNS服务器信息,DNS解析可能会返回一个与用户位置最接近的CDN节点的IP地址。
请求路由: 用户的请求被发送到最近的CDN节点。
节点服务器处理请求: CDN节点服务器接收到用户请求后,会检查是否有缓存该资源的副本。如果有,它会直接从缓存中返回资源;如果没有,它会向源服务器请求资源。
资源获取: 如果资源存在于CDN节点的缓存中,则CDN节点会直接返回资源给用户;如果资源不在缓存中,则CDN节点会向源服务器请求资源。
数据传输: 源服务器将所请求的资源传输给CDN节点服务器。
数据返回: CDN节点服务器将获取到的资源返回给用户的浏览器。
内容传输完成: 用户在浏览器中收到并加载所请求的资源,完成访问过程。
(三)A记录与CNAME记录
A记录和CNAME记录是DNS中两种常见的资源记录类型,它们在域名解析过程中具有不同的作用。
1. A记录 (Address Record)
A记录用于将域名解析为IPv4地址。例如,将域名www.example.com解析为对应的IPv4地址。A记录直接指向IP地址,可以将一个域名映射到一个特定的IPv4地址。
2. CNAME记录 (Canonical Name Record)
CNAME记录用于创建一个域名的别名,将一个域名解析为另一个域名。当使用CNAME记录时,不需要指定IP地址,而是将该域名指向另一个域名。例如,将域名blog.example.com的CNAME记录指向www.example.com,这样访问blog.example.com时会自动跳转到www.example.com。CNAME记录常用于实现域名的重定向、负载均衡和简化DNS管理。通过创建CNAME记录,可以方便地将一个域名关联到另一个域名,并且当目标域名的IP地址发生变化时,只需要更新CNAME记录的指向即可,而无需修改所有引用该域名的地方。需要注意的是,在根域名(例如example.com)上不能直接创建CNAME记录,只能在子域名上进行创建。
(四)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节点会回源站获取资源。
- 边缘不命中回源:当CDN节点上没有所请求的资源时,会回源到源服务器获取该资源,并将其缓存到边缘节点,以便后续请求可以直接从边缘节点获取。这是最常见的回源规则。
- 缓存过期回源:当CDN缓存中的资源过期时,即超过了预设的缓存时间或缓存策略要求,CDN会回源到源服务器重新获取最新的资源。
- 防盗链回源:为了防止资源被非法盗链使用,CDN设置了防盗链规则。当CDN节点检测到非法盗链请求时,会回源到源服务器获取资源,并验证请求的合法性。
- 热点回源:当某个资源在短时间内被大量请求,导致缓存失效或边缘节点无法满足需求时,CDN会回源到源服务器获取该热点资源,以满足用户需求。
- 强制回源:有时候需要强制让CDN节点回源获取最新的资源,即使缓存中的资源没有过期。这可以通过配置特定的回源规则来实现。
- 直接回源:有时候需要直接绕过CDN节点,将请求直接发送到源服务器。这可以用于测试、调试或某些特殊情况下的需求。在这种情况下,CDN节点不会对请求进行缓存或加速处理。
(三)CDN调度方法
1.DNS调度
基于DNS协议,调度系统会根据LocalDNS的IP归属地进行流量调度,返回最接近的LocalDNS的cache节点ip;(建立tcp/ip连接)
优点: DNS系统本身是分布式的结构,LocalDNS本身有cache缓存;
缺点: LocalDNS的地址判断力度较粗,另外用户有可能会设置错误的LocalDNS。
2.IP302调度
基于HTTP协议,用户首先访问到调度系统,调度系统通过获取客户端IP归属地进行调度,组装响应头的location的URL,通过状态码为302的方式响应给客户端,然后客户端根据新的URL发起连接。
优点: 基于HTTP协议,通过302重定向方式实现调度,实现更加灵活的流量控制。
缺点: 需要客户端进行额外的重定向操作,可能会增加延迟和复杂度。
3.HTTPDNS调度
基于HTTP协议,客户端直接访问HTTPDNS接口到我们的调度系统,调度系统再通过获取客户端的IP归属地得到cache节点的ip,以状态码为200的方式响应给客户端,然后客户端再向cache节点发起请求。
优点: 直接利用HTTP协议,客户端可以直接访问HTTPDNS接口,调度系统通过客户端IP获取缓存节点的IP,减少了额外的重定向步骤,可以更加高效地进行流量调度。
缺点: 需要改造客户端,增加了开发和维护的成本。
(四)DNS调度部署架构
-
RDS(Relational Database Service):
- 主要用于存储生成调度策略所需的配置信息,例如策略总开关、调度组、线路、节点维度的带宽信息等。
- 这些信息可以用于策略的生成和调整。
-
Zabbix:
- 用于获取节点的总带宽信息。
- 这些数据可以用于监控和评估节点的性能,以及在需要时调整带宽分配。
-
策略Server:
- 部署了计算各调度组、各线路节点配比关系的程序的服务器。
- 它负责根据从RDS和Zabbix获取的数据,计算出最优的调度策略,并将其应用到中控上。
-
中控:
- 管理域名、调度组、节点、线路等信息的控制平台。
- 从RDS获取配置信息,接收策略Server计算的最优策略,并将其应用到实际的DNS调度系统中。
-
KDNS(Authoritative DNS):
- 授权DNS服务器,负责响应用户DNS查询请求。
- 根据中控提供的调度策略,将用户的DNS查询请求转发到合适的节点上,实现负载均衡和优化性能。
(五)CDN的DNS调度原理
- 用户输入访问的域名,操作系统向本地DNS服务器查询域名的IP地址。
- 如果本地DNS服务器没有缓存该域名的IP地址或缓存已过期,它会向Root DNS服务器查询域名的授权服务器。
- Root DNS服务器将域名的授权DNS记录回应给本地DNS服务器。
- 本地DNS服务器得到域名的授权DNS记录后,继续向域名授权DNS查询域名的IP地址。
- 域名授权DNS查询域名记录后(通常是CNAME),回应给本地DNS服务器。
- 本地DNS服务器得到域名记录后,向CDN智能DNS查询域名的IP地址。
- CDN智能DNS根据一定的算法和策略(例如静态拓扑、容量等),将最适合的CDN节点IP地址回应给本地DNS服务器。
- 本地DNS服务器将得到的域名IP地址回应给用户端。
- 用户得到域名IP地址后,访问CDN节点服务器。
- CDN节点服务器响应请求,将内容返回给客户端。同时,缓存服务器可能会在本地进行保存,以备以后使用,同时将获取的数据返回给客户端,完成数据服务过程。
(六)CDN的302调度原理
图片引用:help.aliyun.com
终端发起访问后,本地DNS向权威DNS查询域名的IP地址。权威DNS响应本地DNS就近调度服务器IP,通常是CDN的调度节点。终端向调度服务器发起请求,调度服务器根据终端的IP地址、URL请求热度等因素,决定通过302重定向方式将用户请求调度至最优的缓存服务器上。调度服务器返回HTTP 302响应,并在Location头中包含最优缓存服务器的URL。终端收到302响应后,再次向302指向的地址发起请求,最优的缓存服务器收到请求后,响应内容返回给终端。
四、CDN节点配置详解
(一)节点计费方式
节点计费方式主要包括包端口计费、95计费和流量计费:
-
包端口计费:
- 按照端口的数据费用计费,与端口跑多少带宽无关。
- 如果节点规划带宽大于保底带宽,但小于中控上联的90%,说明节点有可用的消峰空间,可以进行消峰操作,即在高峰时段降低带宽使用以节约成本。
-
95计费:
- 每个月结算一次款项。
- 按照每5分钟取一个点的方式计算,一天共有1224=288个点,一个月就是1224*30=8640个点。
- 将这些点中最高的5%的数据去掉,剩下的最高带宽就是95计费的带宽值。
- 这种方式能够更好地反映出节点的实际使用情况,避免单纯按峰值计费造成不必要的成本开销。
-
流量计费:
- 根据当月累积的流量数据乘以流量单价,再加上请求次数乘以请求单价来计算费用。
- 这种计费方式适用于需要根据实际使用量来计费的情况,能够更加灵活地根据用户的实际需求来收费。
(二)节点部署类型与设备
1.节点部署
-
标准部署:
- 节点部署采用标准的方式,非标准资源通过302调度获取。
- 通过标准部署方式,可以更灵活地根据需要调整资源的分配和调度,以适应不同的需求和情况。
-
城域网部署:
- 城域网部署是指在一个城域网内部署节点,这些节点单独计费,并且采用包端口计费方式。
- 这种部署方式可能适用于需要在特定区域内提供服务的场景,例如城市级别的内容分发。
2.节点部署设备
-
Cache(缓存服务器):
- 用来缓存数据的服务器,主要负责缓存用户请求的内容,以提高访问速度和降低负载。
-
LVS(Linux Virtual Server):
- 负载均衡设备,用于在节点中各个Cache服务器之间进行负载均衡,确保请求被合理分配到各个服务器上,从而提高系统的整体性能和可靠性。
-
Relay(中继设备):
- 主要负责控制命令的下发、日志的回传等功能。
- 它可能与其他设备进行通信,如负责维护整个系统的负载DNS,以实现整个系统的负载均衡和管理。
(三)Virtual IP的应用
虚拟 IP(VIP)是一种网络配置技术,用于提供高可用性和负载均衡。在高可用性方面,主要有两种类型:浮动 IP 和虚拟 IP。
-
浮动 IP:
- 在浮动 IP 方案中,虚拟 IP 地址会在不同的主机之间“漂移”,即在一台主机上失效时,它会自动“漂移”到另一台主机上。
- 这样可以确保在一台主机发生故障时,业务流量可以快速地转移到另一台主机上,从而实现服务的高可用性。
-
虚拟 IP:
- 虚拟 IP 通常是一组 IP 地址,由多台服务器共享,而不是在服务器之间“漂移”。
- 负载均衡设备(如 LVS)会将请求分发到这组虚拟 IP 地址上,然后根据负载均衡算法将请求转发给其中一台服务器。
- 这种方式实现了负载均衡,即使其中一台服务器出现故障,仍然可以通过其他服务器继续提供服务,从而提高了系统的可用性和可靠性。
(四)负载均衡器的三种工作模式
1.NAT模式(Network Address Translation)
在NAT模式下,负载均衡器充当中间代理,对外部请求进行转发和地址转换。它将外部用户的请求转发给后端的真实服务器,并将响应从真实服务器返回给外部用户。负载均衡器会修改数据包的头部信息,使得位于内部私有网络的服务器可以与外部网络通信,同时也可以实现外部用户访问内部私有IP主机。
2.TUN模式(Tunneling)
在TUN模式下,负载均衡器仅处理请求数据,将请求转发给后端的真实服务器。真实服务器直接与外部网络通信,将响应数据返回给客户端主机。
这种模式需要真实服务器能够直接与外部网络连接,并且真实服务器在收到请求后直接向客户端发送响应数据。
3.DR模式(Direct Routing)
DR模式也被称为直接路由模式,要求负载均衡器和后端服务器必须在同一个局域网内。在DR模式下,负载均衡器拦截外部请求并进行分发,但真实服务器直接将响应返回给客户端,绕过负载均衡器。为实现这种模式,负载均衡器和后端服务器需要共享虚拟IP地址。
五. CDN常见安全问题和解决方案
(一)DDOS攻击及解决
1.DDOS攻击
DDoS(Distributed Denial of Service)攻击是一种通过利用多台计算机或设备向目标服务器发送大量请求,以超过其处理能力而导致服务不可用的攻击行为。以下是有关DDoS攻击的一些重要信息:
- 攻击原理:DDoS攻击通常使用僵尸网络(botnet)来发动攻击。攻击者控制大量受感染的计算机或设备(称为僵尸)并将它们协同起来,同时向目标服务器发送大量的请求流量,以淹没其网络带宽、资源或应用程序。
- 攻击目的:DDoS攻击的目的是使目标服务器过载,导致其无法正常提供服务。攻击者可能希望对目标网站、在线服务或其他网络资源进行破坏、勒索或切断其正常业务。
- 攻击类型:
• 带宽洪泛(Bandwidth Flood):攻击者通过发送大量的数据流量占用目标服务器的网络带宽。
• 高级持续性威胁(Advanced Persistent Threat,APT):攻击者利用复杂的技术手段和远程控制,对目标服务器进行长时间的攻击,以持久地破坏其服务。
• SYN洪泛(SYN Flood):攻击者发送大量伪造的TCP连接请求(SYN包),使目标服务器忙于处理这些请求而无法响应合法用户的请求。
• ICMP洪泛(ICMP Flood):攻击者发送大量的ICMP回显请求(PING请求)占用目标服务器的资源。
• DNS放大(DNS Amplification):攻击者利用开放的DNS服务器将小型请求转发为大型响应,从而淹没目标服务器的网络带宽。
2.CDN应对DDOS攻击
- 分布式网络:CDN通常由多个服务器节点组成,这些节点分布在不同的地理位置。这种分布式网络结构可以分散流量负载,减轻单个节点的压力,并降低遭受DDoS攻击的风险。
- 负载均衡:CDN使用负载均衡算法将流量分配到多个服务器节点上,以避免某个节点过载。这样,即使遭到DDoS攻击,负载均衡可以将流量均匀地分发到不同的节点上,提高整体的处理能力。
- 流量过滤与清洗:CDN可以通过流量过滤和清洗来检测和过滤恶意流量。它们使用各种技术,例如基于规则的过滤、行为分析和机器学习等来识别并阻止恶意流量。
- 带宽扩展:CDN提供高带宽的网络连接,可以扩展和增加网络容量以应对大规模的DDoS攻击。它们通常具备充足的网络资源和带宽,可以吸收和处理更大的流量负载。
- 缓存技术:CDN使用缓存技术将静态内容(如图片、CSS和JavaScript文件)缓存在服务器节点上。这样,在DDoS攻击期间,仍可以提供部分内容服务,减轻对源服务器的压力。
- 限制访问:CDN可以通过IP过滤和访问控制列表来限制威胁行为的来源。它们可以根据IP地址、地理位置和用户行为等进行访问控制,以防止恶意访问和攻击。
(二)DNS解析异常处理
1.DNS解析异常
- 域名配置错误:可能是域名的DNS配置有误,例如错误的记录类型、错误的IP地址或CNAME指向等。这会导致解析时返回错误的结果。
- DNS服务器问题:如果使用的DNS服务器出现故障或配置错误,可能无法正确解析域名。
- 网络连接问题:如果网络连接存在问题,例如连接超时、丢包或延迟过高,可能导致DNS解析失败。
- 域名过期或暂停:如果域名已过期或被暂停使用,DNS解析可能无法返回有效结果。
在以上情况中,增加IP地址的数量通常不会直接导致DNS解析错误。DNS系统可以处理大量的IP地址记录,而且多个IP地址通常用于实现负载均衡和高可用性。
2.应对手段
如果遇到DNS解析错误,建议进行以下步骤排查问题:
- 检查域名配置是否正确,特别是A记录、CNAME记录等是否设置正确。
- 确认使用的DNS服务器正常工作,并尝试更换其他可靠的DNS服务器进行解析。
- 检查网络连接是否正常,包括确认网络是否畅通、防火墙是否阻止了DNS流量等。
- 确认域名是否过期或被暂停使用,及时更新域名相关信息。
六. 总结
总体而言,CDN业务受业务突发事件的影响较为突出,需提前做好准备,但如果资源丰富,拿服务器堆,一切都不是问题哈哈哈哈!!