高并发系统设计十四-静态资源如何加速-DNS

静态资源如何加速

1、静态资源

系统中存在大量的静态资源请求:

  • 对于APP来说,静态资源主要有图片、视频、流媒体
  • Web网证主要包含 JavaScript文件、CSS文件、静态 HTML 文件

就近访问来解决,在业务服务器的上层增加一层特殊的缓存,用来承担绝大部分对于静态资源的访问,这一层特殊缓存的节点需要遍布在全国各地,这样可以让用户选择最近的节点访问。缓存的命中率也需要一定的保证,尽量减少访问资源存储源站的请求数量(回源请求)。这一层缓存就是我们这节课的重点:CDN。

2、CDN

CDN(Content Delivery Network/Content Distribution Network,内容分发网络)。简单来说,CDN 就是将静态的资源分发到位于多个地理位置机房中的服务器上,因此它能很好地解决数据就近访问的问题,也就加快了静态资源的访问速度。

搭建一个 CDN 系统需要考虑

  • 如何将用户请求映射到 CDN 节点上
  • 如何根据用户的地理位置信息选择到比较近的节点

2.1、如何让用户的请求到达 CDN 节点上

CDN 厂商会给我们一个 CDN 的节点 IP,然后我们将 IP 地址映射到域名上。

DNS 可以解决域名映射问题

DNS(Domain Name System,域名系统)实际上就是一个存储域名和 IP 地址对应关系的分布式数据库。而域名解析的结果一般有两种,一种叫做“A 记录”,返回的是域名对应的 IP 地址;另一种是“CNAME 记录”,返回的是另一个域名,也就是说当前域名的解析要跳转到另一个域名的解析上。实际上 www.baidu.com 域名的解析结果就是一个 CNAME 记录,域名的解析被跳转到 www.a.shifen.com 上了,

我们正是利用 CNAME 记录来解决域名映射问题的

以 www.baidu.com 这个域名为例给你简单介绍一下域名解析的过程

  • 一开始,域名解析请求先会检查本机的 hosts 文件,查看是否有 www.baidu.com 对应的 IP;
  • 如果没有的话,就请求 Local DNS 是否有域名解析结果的缓存,如果有就返回标识是从非权威 DNS 返回的结果;
  • 如果没有就开始 DNS 的迭代查询。先请求根 DNS,根 DNS 返回顶级 DNS(.com)的地址;再请求.com 顶级 DNS 得到 baidu.com 的域名服务器地址;再从 baidu.com 的域名服务器中查询到 www.baidu.com 对应的 IP 地址,返回这个 IP 地址的同时标记这个结果是来自于权威 DNS 的结果,同时写入 Local DNS 的解析结果缓存,这样下一次的解析同一个域名就不需要做 DNS 的迭代查询了。

DNS 的解析时间有可能会到秒级别,如何解决这个性能问题呢?

在 APP 启动时对需要解析的域名做预先解析,然后把解析的结果缓存到本地的一个 LRU 缓存里面。这样当我们要使用这个域名的时候,只需要从缓存中直接拿到所需要的 IP 地址就好了,如果缓存中不存在才会走整个 DNS 查询的过程。同时为了避免 DNS 解析结果的变更造成缓存内数据失效,我们可以启动一个定时器定期地更新缓存中的数据。

2.2、如何找到距离用户最近的 CDN 节点呢?

使用 GSLB 技术

GSLB(Global Server Load Balance,全局负载均衡)的含义是对于部署在不同地域的服务器之间做负载均衡,下面可能管理了很多的本地负载均衡组件

  • 负载均衡服务器,让流量平均分配
  • 保证流量流经的服务器与流量源头在地缘上比较接近
发布了57 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wmdkanh/article/details/105568930
今日推荐