请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
对一次网络请求过程的了解程度,一是展现你的专业知识;二是深刻的理解,让你在大型网站架构中做出更适合、可靠的架构。而DNS是这一切的出发点,本文结合一张常用架构图,来描述一下这个过程。
部署架构
大型的web服务,我们的部署架构一般如下图。先上图再解释
这里来解释下,为什么要这样架构。 首先客户端的请求会通过 DNS 获取到对应的服务器IP(实际上是LB的IP地址),这一层会有 DNS的负载均衡,并且如果是静态站资源会进入到CDN,这里DNS与CDN如何完成接棒的过程,后面会详细解释。 当请求到达LB层的时候(应用层协议是HTTP协议),这一层又会做一次负载均衡(可能用LVS或者Nginx做)。这里我们有两种不同的处理方式,一条路径会进入到代理集群,一条路径直接进入到应用集群。这是为什么?LB到代理集群通过最顶层的LB负责均衡后到达代理机器,这里不直接进入到应用集群,还要搞一层代理的目的主要是方便我们在代理集群进行各种高级(骚)操作。比如:请求日志收集,自定义缓存,自定义的负载均衡,自定义的路由规则制定(跨机房,路由分组)LB到应用集群上面到代理层有那么多好处,为什么还有绕过代理层这条路径存在呢?这主要是针对大流量服务。因为代理层因为有很多额外的操作,导致响应会变长,路径增加,到下一个集群多了一次网络传输往返。所以,一般针对大流量服务,为了防止代理被打满,响应更快,会直接在外网LB上进行负载到应用集群。通过上面的分割后,最终都会到达应用集群,每一台机器上我们会部署一台 Nginx 来按照域名转到对应服务,当然这里完全也可以不是 Nginx,比如微服务,这里可能是一个 SideCard 代理。这里主要是为了便于说明我们后面全部都是当成Nginx。服务调用 DB Cache 等,都是通过域名,这是为了负载均衡,请求时,会通过内网DNS服务,完成域名解析,然后拿到内网的 LB 的IP。然后再这里进行内网的负载均衡,会根据域名的端口来检查你是写操作、还是读操作返回IP。常规一点会保证是单点写入,多点读取。来完成数据一致性的保障。整个大体过程如此,接下来我们详细说一下 DNS 与 CDN 相关的工作原理。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地址。
下面根据图中的十个步骤说一下每一步都在干嘛。
  • 一个用户在浏览器输入了:example.com,这时会产生一个 DNS 查询,从而进入到 DNS Resolver中;
  • Resolver 会进入到 root server 进行查询;
  • root server 返回了 TLD server 的地址,查询请求转向顶级域名服务,这里是 .com 服务器。
  • 递归解析器向 .com 服务器发送一个请求;
  • TLD server 收到请求后会返回 example.com 权威服务器的地址;
  • 递归解析器又发了一个向权威服务器查询的请求,至此权威服务器查询自己的映射表拿到IP;
  • 返回查询到的IP给了 DNS Resolver;
  • DNS Resolver返回IP给浏览器,浏览器将会用这个IP来建立连接,发起请求;
  • 客户端通过这个IP地址,发起一个 HTTP 请求;
  • 服务器解析请求,并返回数据到浏览器。
这里需要补充一点是,上面每一步其实都有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访问加速度

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册