CDN是一组地理分布的代理服务器。代理服务器是客户端和源服务器之间的中间服务器。这些代理服务器位于网络边缘,靠近终端用户。代理服务器的放置有助于通过减少延迟和节省带宽来快速将内容交付给终端用户。CDN还具有额外的智能功能,用于优化流量路由并实施规则以保护免受DDoS攻击或其他异常网络事件的影响。
从本质上讲,CDN解决了两个问题:
- 高延迟。如果您的服务部署在美国,那么亚洲地区的延迟将较高,这是由于与提供数据中心的物理距离造成的。
- 数据密集型应用程序:它们传输大量数据。在较长距离上,由于路径中存在多个互联网服务提供商,可能会出现问题。其中一些可能具有较小的链路、拥塞、数据包丢失和其他问题。距离越长,路径上的服务提供商就越多,其中一个出现问题的几率就越高。
让我们从高级组件设计和主要工作流程开始。
高级架构
- 路由系统将客户端引导到最近或最优的CDN位置。为了有效地执行这个功能,该组件接收来自各种系统的输入,以了解请求来自何处、内容位于何处、数据中心的繁忙程度等等。有两种最流行的路由系统:带有负载均衡的DNS和Anycast。我们将在视频中讨论它们。
- Scrubber服务器用于分离良好的流量和恶意流量,以防范DDoS攻击。Scrubber服务器通常仅在检测到攻击时使用。如今,Scrubber服务器非常复杂,允许客户端推送非常细粒度的防火墙规则,并在实时中在所有数据中心应用这些规则。
- 代理或边缘代理服务器为终端用户提供内容。它们通常会将内容缓存,并从RAM中提供快速检索。
- 内容分发系统负责将内容分发到不同CDN设施中的所有边缘代理服务器。通常使用树状分发模型。稍后在视频中会详细介绍。
- 源服务器是托管在CDN上分发的原始内容的用户基础设施。
- 数据控制系统用于观察资源使用情况和统计信息。该组件测量指标,如延迟、停机时间、数据包丢失、服务器负载等等。然后将其反馈给路由系统以进行最佳路由。
让我们走一遍主要的工作流程:
- 我们从源服务器为特定DNS域或特定DNS名称提供内容委托开始。它告诉CDN所有到特定URL的请求将被代理。
- 源服务器将内容发布到分发系统,负责在一组边缘代理服务器上分发内容。通常使用“推送”和“拉取”模型,通常两者都会被使用。
- 分发系统将合格的内容发送给代理服务器,同时跟踪哪些内容在哪个代理服务器上被缓存。它还了解哪些内容是静态的和动态的,需要刷新的数据的TTL、内容租约等等。
- 客户端向路由系统请求合适的代理服务器IP,或使用Anycast IP来路由到最近的位置。
- 客户端请求通过Scrubber服务器。
- Scrubber服务器将良好的流量转发到边缘代理。
- 边缘代理服务器为客户端请求提供服务,并定期将其健康信息转发给数据控制系统。如果代理中不可用的内容,则会路由到源服务器。
现在想象一下,您有一个单一的网站,需要将内容分发到20个地区,每个地区有20个需要存储的代理。20个地区+20个副本,这意味着您需要将数据传输到CDN 400次,非常低效。为解决这个问题,可以使用类似树状复制模型。
树状内容分发
数据被发送到地区边缘代理服务器,然后使用CDN的内部网络将其复制到同一地区的子代理服务器。这样,我们只需每个地区或地理区域复制一次内容。根据规模的不同,地区可以是特定的数据中心或更大的地理区域,其中我们有两个级别的父代理服务器。
对于用户来说,从最近的代理服务器获取数据至关重要,因为CDN的目标是通过将数据靠近用户来减少延迟。CDN公司通常使用两种路由模型。第一个基于带有负载均衡的DNS,历史上最流行。我认为更新且更有效的是Anycast模型,它将路由和负载均衡委托给Internet的BGP协议。让我们来看看它们。
在典型的DNS解析中,我们使用DNS系统获取与可读的名称相对应的IP。在我们的情况下,我们将使用DNS返回另一个DNS名称给客户端。这被称为DNS重定向,内容提供者使用它将客户端发送到特定的CDN区域。例如,如果客户尝试解析company.com,权威DNS服务器会提供另一个URL(例如cdn.us-east.company.com)。客户端进行另一次DNS解析,并获取US-East地区合适的CDN代理服务器的IP地址。根据用户的位置不同,DNS的响应也会不同。
因此,首先根据用户的位置将客户端映射到适当的数据中心。在第二步中,它调用一个负载均衡器之一,以在代理服务器上分发负载。要将客户从一个区域转移到另一个区域,必须进行DNS更改,以删除在困难区域的负载均衡器IP。为使此工作正常,必须将DNS TTL设置为最低,以便客户端尽快获取更改。
但仍然会有一些流量通过,并且如果该区域发生故障,流量将受到影响。我在另一篇关于可扩展API网关和边缘设计的视频中讨论了类似的问题。我会在描述中放置一个视频链接。
更有效的方法是Anycast设计。
Anycast是一种路由方法,其中位于多个位置的所有边缘服务器共享相同的单个IP地址。它利用边界网关协议或BGP来根据互联网的自然网络流向路由客户端。CDN使用Anycast路由模型将互联网流量传送到最近的数据中心,以确保提供改进的响应时间,并在出现特殊需求,如DDoS攻击时,防止任何数据中心受到交通超负荷的影响。
当请求发送到Anycast IP地址时,路由器将将其引导到网络上最近的机器。如果整个数据中心发生故障或发生维护,Anycast网络可以对故障做出类似于负载均衡器跨多个服务器或区域分流流量的应对;数据将从出现故障的位置转移到仍然在线和正常运行的另一个数据中心。
Anycast的可靠性
使用DNS和负载均衡器的Unicast IP使用单一机器,单一IP。大多数互联网都是通过Unicast路由模型工作的,其中网络上的每个节点都会获得一个唯一的IP地址。
Anycast是——许多机器,一个IP
虽然Unicast是运行网络的最简单方法,但不是唯一的方法。使用Anycast意味着网络可以非常有弹性。因为流量将找到最佳路径,我们可以将整个数据中心脱机,流量将自动流向下一个最近的数据中心。
Anycast的最后一个好处是它也可以帮助缓解DDoS攻击。在大多数DDoS攻击中,使用许多被攻陷的“僵尸”计算机来形成所谓的僵尸网络。这些机器可以分散在网络中,并生成大量流量,以至于它们可以淹没典型的Unicast连接的机器。Anycasted网络的性质在于,它在固有地增加了吸收此类攻击的表面积。分布式僵尸网络将其服务拒绝服务的流量的一部分吸收到每个具有容量的数据中心中。
现实世界中的例子是Cloudflare,它构建了一个遍布全球数百个地方的全球代理网络。它声称使他们与全球95%的互联网连接人口约相距50毫秒。由于网络也建立在Anycast IP上,它提供了总容量超过170 Tbps。这意味着他们不仅能为大量客户提供服务,还能通过将恶意流量分散到多个位置来处理最大的DDoS攻击。