在浏览了 Google 上的一些资源后,了解了 Akamai CDN 边缘服务器的工作原理,但对内部结构有一些疑问。
- 假设我的网站 xyz.com(YYY.YYY.YYY.YYY) 已在 Akamai CDN(XXX.XX.XXX.XXX,比如在西雅图) 上缓存了静态内容。在某些 Akamai 接口上,我将把调用路由到我的原始 Web 服务器 IP,并要求 Akamai 缓存静态内容。
- 现在,每当我在浏览器中输入 www.xyz.com(对于任何资源,无论是静态的还是动态的)时,调用都会转到 DNS 服务器来解析域的 IP
www.xyz.com
。 - DNS 服务器将提供已配置的 Akamai Edge 服务器的 IP 地址(例如第 1 点中硬编码的 XXX.XX.XXX.XXX)。我的问题是,如何确保 DNS 服务器提供最靠近用户的边缘服务器?无论用户尝试从中国还是印度访问网站,它是否始终提供西雅图 IP XXX.XX.XXX.XXX?
答案1
正是 Akamai DNS 的“魔力”决定了将客户端发送到哪里来获取请求。
据我了解(在 IP-Peering 会议上与 Akamai 网络架构师讨论后),Akamai 的 DNS 使用来自查询 DNS 客户端的最短路径路由(通常是 BGP)来确定最近的位置并提供该 IP 地址。
DNS 协议定义了客户端如何请求地址以及服务器如何提供地址。就像 Web 服务器可以根据客户端的请求提供不同的资源一样,也可以编写一个 DNS 服务器来执行相同的操作。
互联网路由通常采用边界网关协议 (BGP),其中自治系统(由 AS 编号标识)交换有关哪个系统控制哪些子网的信息。在确定如何路由到 IP 地址时,路由器通常会选择经过最少自治系统的路由。
因此,接收对 Akamai 托管资源的 DNS 请求的 Akamai DNS 服务器具有请求客户端的 IP 地址。可以在其内部数据库中查找该地址,以确定哪个 Akamai 服务器与该地址“最接近”(就 IP 路由而言),然后客户端可以返回“最接近”服务器的地址。
经过这次谈话后,我从不同的子网进行了一些试验性查找,我注意到第一次查找通常比“正常”DNS查找花费的时间长得多。大概这是因为系统正在查找如何路由到该地址。后续查找速度与往常一样快,大概是因为答案被缓存了。
额外信息(DNS 的工作原理)
当 DNS 客户端向 DNS 服务器请求名称时,服务器将提供以下名称:权威性否则它将在其他服务器上查找该域(如果它配置为递归) 或者它将提供先前缓存的答案。全局“根”服务器允许 DNS 服务器定位对任何特定域具有权威性的 DNS 服务器,以便它们可以指导递归查询。
DNS 服务器不包含 Internet 上所有地址的映射 —— 这将无法维护,并且操作域名的人需要能够更改自己的 DNS 记录。
通常,DNS 服务器要么是权威的,要么是递归的(通常不会同时是两者)。当查找具有 CNAME 记录的名称的地址时,客户端需要查找 CNAME 记录指向的 A 记录的 IP 地址。因此,如果您有指向 Akamai 边缘服务器的 CNAME 记录,那么需要查询的是 Akamai 域,因为 Akamia 域服务器是该域的权威服务器。
当请求到达 Akamai 服务器时,它可以查找它想要的任何信息,以便确定要返回哪个 IP 地址。由于他们拥有广泛的对等(BGP 连接)网络,因此他们将根据边缘服务器和 DNS 查询来源之间的最短路由来确定哪个边缘服务器最适合提供数据。
如果查询是由执行递归查找的 DNS 服务器进行的,那么它可能会缓存答案,但由于它以后会使用相同的 IP 地址请求结果,因此通常会得到相同的答案,所以这不是问题。Akamai 可以在提供地址的响应中设置记录应缓存多长时间(尽管服务器可以选择不遵循有关缓存寿命的指示)。
由于大多数客户端的地址都是由属于同一 AS 的 DNS 服务器为其解析的,因此查找地址的 DNS 服务器和实际需要该地址的客户端计算机的路由长度(涉及的不同 AS 的数量)是相同的。
答案2
你唯一要做的就是根据 Akamai 的规范设置您的 DNS 记录。您只需输入他们给您的地址和 CNAME 记录。Akamai 将负责确定哪个边缘路由器最接近任何特定用户。
答案3
有一篇很好的论文描述了这个过程。
论文名称:《内容分布中的算法要点》