域名系统
Domain Name System(DNS)将 www.example.com 等域名转换成 IP 地址:
域名系统是分层次的,一些 DNS 服务器位于顶层。当查询(域名)IP 时,路由或 ISP 提供连接 DNS 服务器的信息。较底层的 DNS 服务器缓存映射,它可能会因为 DNS 传播延时而失效。DNS 结果可以缓存在浏览器或操作系统中一段时间,时间长短取决于 TTL
(Time To Live):
- NS 记录(域名服务):指定解析域名或子域名的 DNS 服务器;
- MX 记录(邮件交换):指定接收信息的邮件服务器;
- A 记录(地址):指定域名对应的 IP 地址记录;
- CNAME(规范):一个域名映射到另一个域名,或映射到一个 A 记录。
CloudFlare
和 Route 53
等平台提供管理 DNS 的功能。某些 DNS 服务通过集中方式来路由流量:
- 加权轮询调度:
- 防止流量进入维护中的服务器
- 在不同大小集群间负载均衡
- A/B 测试
- 基于延迟路由
- 基于地理位置路由
缺陷:DNS
- 虽说缓存可以减轻 DNS 延迟,但连接 DNS 服务器还是带来了轻微的延迟;
- 虽然它们通常由政府、网络服务提供商和大公司管理,但 DNS 服务管理仍可能是复杂的;
- DNS 服务可能遭受
DDoS 攻击
,例如:阻止不知道 Twitter IP 地址的用户访问 Twitter。
内容分发网络
Content Delivery Network(CDN)是一个全球性的代理服务器分布式网络,它从靠近用户的位置提供内容。通常,HTML/CSS/JS,图片和视频等静态内容由 CDN 提供,亚马逊 CloudFront
等也支持动态内容。
CDN 的 DNS 解析会告知客户端连接哪台服务器。
将内容存储在 CDN 上可以从两个方面来提高性能:
- 从靠近用户的数据中心提供资源;
- 借助 CDN,服务器不必真的处理请求。
CDN 推送
当服务器上的内容发生变动时,推送 CDN 接受新内容。直接推送给 CDN 并重写 URL 地址,以指向内容的 CDN 地址,可以配置内容的到期时间和更新时间。内容只有在新增或更改时才推送,流量最小化,但存储最大化。
CDN 推送可以很好地处理流量较小或内容不经常更新的站点,内容一次性放置在 CDN 上,而不是定期重新拉取。
CDN 拉取
CDN 拉取是当第一个用户请求资源时,从服务器上拉取资源。将内容留在服务器上,并重写 URL 指向 CDN 地址。在内容被缓存在 CDN 上之前,这都会导致请求变慢。
内容的缓存时间取决于 TTL。CDN 拉取可以最大程度地减少 CDN 上的存储空间,但如果文件过期,或在文件实际更改之前就被拉取,则会产生多余的流量。
CDN 拉取可以很好地处理高流量的站点,因为流量分散得更均匀,只有最近请求的内容保留在 CDN 上。
缺陷:CDN
- CDN 成本因流量而异,可能在权衡之后你将不会使用 CDN;
- 如果在 TTL 过期之前更新内容,CDN 缓存内容可能会过时;
- CDN 需要更改静态内容的 URL 地址以指向 CDN。