写在前面

对一次网络恳求进程的了解程度,一是展现你的专业常识;二是深入的了解,让你在大型网站架构中做出更适合、可靠的架构。而DNS是这一切的出发点,本文结合一张常用架构图,来描绘一下这个进程。

布置架构

CDN介绍

这儿来解说下,为什么要这样架构。首要客户端的恳求会经过DNS获取到对应的服务器IP(实际上是LB的IP地址),这一层会有DNS的负载均衡,而且如果是静态站资源会进入到CDN,这儿DNS与CDN怎样完结接棒的进程,后面会详细解说。当恳求抵达LB层的时分(运用层协议是HTTP协议),这一层又会做一次负载均衡(可能用LVS或许Nginx做)。这儿咱们有两种不同的处理方式,一条途径会进入到署理集群,一条途径直接进入到运用集群。这是为什么?

LB到署理集群

经过最顶层的LB负责均衡后抵达署理机器,这儿不直接进入到运用集群,还要搞一层署理的意图首要是便利咱们在署理集群进行各种高档(骚)操作。

比方:恳求日志收集,自定义缓存,自定义的负载均衡,自定义的路由规矩制定(跨机房,路由分组)

LB到运用集群

上面到署理层有那么多优点,为什么还有绕过署理层这条途径存在呢?这首要是针对大流量服务。因为署理层因为有许多额定的操作,导致呼应会变长,途径添加,到下一个集群多了一次网络传输往复。

所以,一般针对大流量服务,为了防止署理被打满,呼应更快,会直接在外网LB上进行负载到运用集群。

经过上面的分割后,终究都会抵达运用集群,每一台机器上咱们会布置一台Nginx来按照域名转到对应服务,当然这儿完全也能够不是Nginx,比方微服务,这儿可能是一个SideCard署理。这儿首要是为了便于说明咱们后面全部都是当成Nginx。服务调用DBCache等,都是经过域名,这是为了负载均衡,恳求时,会经过内网DNS服务,完结域名解析,然后拿到内网的LB的IP。然后再这儿进行内网的负载均衡,会依据域名的端口来查看你是写操作、还是读操作回来IP。惯例一点会确保是单点写入,多点读取。来完结数据一致性的保障。

整个大体进程如此,接下来咱们详细说一下DNSCDN相关的作业原理。

DNS怎样完成IP查找

为了后面说清楚CDN,这儿先介绍DNS的解析进程。当然此类文章网络上已经极多。但是我还是想按照我的了解来说一下DNS是怎样作业的。

在整个DNS进程中有四个重要概念,下面解说下。

DNS Resolver- 递归解析器,首要是接收客户端宣布的域名解析恳求,并发送 DNS query 查询恳求。关于客户端来说它不需求任何劳累,等待 DNS Resolver 告知自己域名转IP的成果就好。

Root Server- 这是转换IP履行的第一步查询,根服务器并不会保存具体的域名IP映射信息。它就像一个索引服务器,会告知你下一步该去那台TLD Server查询。

TLD Server- 这是尖端域名服务器,是履行IP查询的第二步,这儿会告知DNS Resolver威望域名服务器的地址。

Authoriative Server- 威望域名服务器便是包含了完好的机器名的域名,例如:www.example.com ,在这台机器上保存了这个具体域名对应的IP地址。

CDN介绍

下面依据图中的十个进程说一下每一步都在干嘛。

  1. 一个用户在浏览器输入了:example.com,这时会产生一个 DNS 查询,从而进入到 DNS Resolver中;
  2. Resolver 会进入到 root server 进行查询;
  3. root server 回来了 TLD server 的地址,查询恳求转向尖端域名服务,这儿是 .com 服务器。
  4. 递归解析器向 .com 服务器发送一个恳求;
  5. TLD server 收到恳求后会回来 example.com 威望服务器的地址;
  6. 递归解析器又发了一个向威望服务器查询的恳求,至此威望服务器查询自己的映射表拿到IP;
  7. 回来查询到的IP给了 DNS Resolver;
  8. DNS Resolver回来IP给浏览器,浏览器将会用这个IP来树立衔接,建议恳求;
  9. 客户端经过这个IP地址,建议一个 HTTP 恳求;
  10. 服务器解析恳求,并回来数据到浏览器。

这儿需求补充一点是,上面每一步其实都有DNS缓存的规划。比方:

  • 浏览器会缓存DNS的成果,(chrome://net-internals/#dns)
  • 操作系统的DNS模块会缓存
  • 后面的每一层级也都有缓存

所以许多时分,咱们的解析进程并不是要顺序履行完这8个进程。这就跟咱们自己开发的运用服务相同,层层缓存,有缓存就读取缓存成果,缓存完成就履行完好流程。

DNS的解析分类

DNS有多种解析记载能够设置,我这儿介绍三个很常用的记载。

A记载- 被称为IP指向,用户设置自己域名指到对应的IP主机上。如果想要运用A记载完成负载均衡需求主机商的支持。

CNAME记载- 它相当于为一个主机名设置一个别号,而且该记载不能直接运用IP,只能是另一个主机的别号。CDN首要便是运用该记载来完结的。如果有A记载与CNAME记载一起存在,A记载会被优先运用,换句话说CNAME记载不会收效。

NS记载- 用来设置一个域名的威望服务器途径,该记载只会对子域名收效。这个地方能够设置IP也能够设置另外一个威望服务器的域名。需求重点指出的是它的优先级高于A记载,而且它在DNS解析进程中,会越过2,3,4,5步。

了解完了DNS的进程,接下来就进入到CDN部分的剖析。

CDN拜访加速度

CDN介绍

什么是CDN呢?中文翻译过来便是内容分发网络。看张图。

没有CDN的时分,不论哪里的用户拜访咱们的站点,都需求到咱们数据中心来获取数据(单纯的DNS进程)。而有了CDN之后,用户依据自己的地理位置会选择间隔自己最近的缓存数据中心来获取数据。不会每次都到源站(运用服务器)来获取数据。为了了解这个进程,咱们是如果在完好的DNS进程中,完成CDN的呢?

接下来咱们需求答复两个问题。

  1. CDN带来了什么优点。
  2. 怎样解析到CDN。

CDN带来的优点

了解一个东西之前最好知道它能干什么,带来的优点是什么。然后咱们再去看它的运转原理。关于CDN有以下几个方面的优点。

提高页面加载速度

这是最显而易见的一个优势,经过上面的图,大家也能够直观感受下,用户拜访间隔自己最近的机器,速度肯定是最快的。而且网站的加载速度越快那么用户体验越优异,你的网站更会受到对运用户的喜爱。至于怎样完成就近拜访的,后面原理部分介绍。

添加内容的冗余

CDN是一个典型的分布式架构,它经过添加数据的冗余,一方面保障在大流量面前有多台服务器能够供给相同的数据;另一方面当部分机器呈现故障时,能够进行故障搬运。

节省带宽

如果大家自己买过云服务就知道,带宽每添加一点价格就飙升。运用CDN后,因为流量被分流了,那么原机器带宽要求自然就降低了。当然带宽费用降低了,你还需求为CDN付费。

保障服务安全

CDN可防止的进犯:DDOS进犯,该进犯便是经过巨大流量打满你的带宽,让你丧失服务能力。那么因为CDN的存在,它将巨大的流量进行了分流。那么源站压力自然小了。这其实也是高并发需求考虑的。

CDN现在不仅仅是只能缓存静态的HTML、CSS、JS、VIDEO,现在还有能够缓存动态接口内容的CDN,这为咱们在架构高并发的服务时,供给了更多的手段进行选择。

CDN作业原理

在介绍DNS的时分,介绍了客户端是怎样获取到IP地址的。那么有了CDN之后,这个进程该怎样处理呢?

CDN其实便是放在运用服务器与用户之间的一层缓存。所以如果运用DNS的时分,回来给客户端的是CDN机器的IP而不是运用的IP,那么自然就走到了CDN机器上。

为了完成上述意图,咱们会为该域名装备一个CNAME(大家留意上面说到的CNAME与A记载的优先级),那么这个CNAME是终究怎样解析到对应的CDN机器呢?其实流程与DNS解析是相同的。当发现一个域名设置了CNAME时,DNS解析器会继续解析这个CNAME别号(其实便是另一个域名)。对这个CNAME解析的时分会用到全局负载DNS解析,它会依据拜访者的地理位置信息回来对应的IP(CDN机器的IP)。因而客户端实际上得到的是间隔它最近的CDN机器的IP地址。

如果说用户拜访CDN,但是CDN上没有对应内容会怎样办?此刻CDN机器其实会依据本身专用的DNS解析服务,依据域名得到源站的IP,然后向源站发送恳求获取数据,并把这些数据缓存到本地,便利后续运用;一起回来本次成果,完结本次恳求的拜访。

需求说一下的是,CDN其实也是分层的。间隔用户最近的称之为边缘节点。而CDN的中心服务器集群被称为二级缓存。在上面便是运用布置的源站。一般边缘节点没数据就去找二级缓存,二级缓存没数据就去找源站(被称为回源)。

小结

关于DNS的进程,文中是以流程介绍为主,至于更细节的依靠协议、传输进程都忽略了。关于CDN也是咱们经常用到的功能提高手段,后续要写的秒杀相关文章,就会用到它来提高功能。特别是CDN的分布式规划、解析进程在咱们平常规划运用架构时十分有参考含义。

参考

[1]架构系列:高并发架构的CDN常识介绍