CDN(内容分发网络)如何工作?

p2p*_*ode 37 networking browser internet webserver cdn

以 Akamai 作为 CDN。据我了解,当客户端请求页面时,请求会发送到 Akamai 中央服务器,然后该服务器根据客户端的位置选择 Akamai 边缘服务器,然后来自客户端的后续请求直接发送到该边缘服务器。我的问题是:

当客户端(按名称)请求网站时,一旦 DNS 将名称解析为 Akamai 中央服务器的 IP 地址并将其传递给客户端,客户端将保留该 IP 地址,那么后续请求如何能够直接访问 Akamai 边缘服务器的 IP 地址?

或者是否有必要在使用 CDN 时 DNS 解析本身应该由 CDN 服务器完成?

Google、Amazon、Facebook 等巨头有自己的 CDN 服务器还是依赖 Akamai 等 3rd 方 CDN 提供商?说谷歌和雅虎!两者都使用 Akamai CDN,然后使用 Yahoo! 的内容。和谷歌驻留在同一台服务器上?它不会带来潜在的安全问题吗?

Der*_*ler 26

您不只是使用 CDN托管整个站点,而只是托管您的内容

我刚刚意识到我不久前回答了一个类似的问题:akamaihd.net 是做什么的?

数据请求流图片来自维基媒体

所以你的网站引用http://akamai/myfile.ext. 这myfile.ext将从akamai. akamai然后可以将HTTP 重定向发送到实际的内容服务器。

现在,当最后一步被缓存时,很好,所有未来的请求都将发送到最近的内容服务器。

这是如何运作的?

让我们假设这个网站:

<html>
  <body>
    <img src="http://cdn/oliver.png" />
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我从我自己的网络服务器请求这个网站。该.html文件不是托管在cdn. 我的网络服务器的 DNS 也不是。

初始请求

所以我的浏览器得到了那个 HTML 文件,现在解析它。它找到引用的图像并注意到它位于http://cdn/oliver.png。它请求该文件。

为此,它需要找到 的 IP 地址cdn。在我们的示例中,该 IP 地址是10.10.10.10

使用该 IP 地址,它可以连接到cdn服务器并请求/oliver.png.

地理位置

现在cdn意识到,“那家伙来自德国! ”。因此,它没有向我发送我想要的精美图片,而是向我发送了一个 HTTP 重定向,内容如下:

/oliver.png 不在这里。它在10.10.33.33/oliver.png

所以我的浏览器会询问10.10.33.33(希望它离我更近)图片。

严重地?

我并不是说这就是所有 CDN 的工作方式,但这将是一种方法。

您还可以实现一个 DNS 守护进程,根据发送查询的人的位置,返回不同的名称查找结果。
但我怀疑这是否在实践中完成。但也许我只是无法想象如何正确设置它。有关如何工作,请参阅蓬松的答案

谁运行 CDN?

大多数全球参与者都以某种方式拥有自己的内容交付网络(或者我认为是这样)。一些提供商只是将某些服务卸载到更大的 CDN(就像微软对 MSDN 下载所做的那样)。这可能会以某种方式触及您的第二个主题。

考虑到这一点,Microsoft 在 MSDN 中提供了产品下载。这些下载随后由 Akamai 提供。如果您可以确定该下载的 URL,您就可以直接下载该产品,而无需与 Microsoft 取得联系。

那是安全问题吗?不是真的,因为正在下载的内容仍然受到保护(通过产品密钥)。

但是其他数据呢?

如果您的数据与安全相关,那么它就不是 CDN 材料。如果您不想尽可能广泛地提供某些内容,请不要将其放入 CDN。


flu*_*ffy 11

CDN 的一种非常常见的方法是使用所谓的“任播”。这是如何工作的,您的分布式服务器与 DNS 共同定位,DNS 以该服务器作为目标进行响应;例如,您可能在不同的托管设施中拥有三台服务器,它们各自的 DNS 都声称它们的 IP 地址是您服务器的规范地址(例如,称之为content.example.com)。每个 DNS 都配置为具有相同的全局 IP 地址,然后每个服务器的设施使用 BGP 更新来使其成为最近服务器的路由获胜 - 因此,当您在 上进行名称查找时content.example.com,最快/最近/most available DNS 使用其 HTTP 服务器响应请求。

通过这种方式,不需要使用 GeoIP 技巧,并且您始终可以通过对您来说最快的服务器提供内容 - 由于互联网的异构性质,这可能与其物理位置有关,也可能无关。

据我了解,Akamai 至少部分以这种方式工作。


Fia*_*abs 5

也可以使用 Origin Pull 类型的 CDN。

Amazon Cloudfront 能够使用这种技术。

您设置了一个 CNAME,如 media.example.com,指向他们分配的服务器名称,并将您的所有内容留在您的服务器上。对于要通过 CDN 传送的图像和内容,请在 URL 中使用 media.example.com。请求进入他们的服务器网络,如果内容不可用,他们的服务器会从您的服务器中提取内容。一旦进入系统,内容就会被分发到离需求所在位置最近的服务器群,并在分配的 TTL 内保持在那里。在 TTL 到期并且 Cloudfront 必须刷新它之前,您的服务器不再看到缓存内容上的任何流量。