专栏名称: 架构师之路
架构师之路,坚持撰写接地气的架构文章
目录
相关文章推荐
架构师之路  ·  想要提升deepseek回复质量,会这一招就 ... ·  3 天前  
51好读  ›  专栏  ›  架构师之路

DNS在架构设计中的巧用

架构师之路  · 公众号  · 架构  · 2017-05-17 08:29

正文

一、缘起

一个 http 请求从客户端到服务端,整个执行流程是怎么样的呢?

一个典型流程如上:

(1) 客户端通过域名 daojia.com 请求 dns-server

(2)dns-server 返回域名对应的外网 ip(1.2.3.4)

(3) 客户端访问外网 ip(1.2.3.4) 向反向代理 nginx

(4) 反向代理 nginx 配置了多个 后端 web-server 服务 内网 ip(192.168.0.1/192.168.0.2)

(5) 请求最终落到某一个 web-server 进行处理

其中,第一个步骤域名 daojia.com 到外网 ip(1.2.3.4) 的转换,发生在整个服务端外部,服务端不可控。


架构设计时,能够巧用 dns 做一些什么事情呢,是本文要讨论的问题。

二、 反向代理 水平扩展

典型的互联网架构中,可以通过增加 web-server 来扩充 web 层的性能,但 反向代理 nginx 仍是整个系统的唯一入口 如果系统吞吐超过 nginx 的性能极限,难以扩容 ,此时就需要 dns-server 来配合 水平扩展。


具体做法是:在 dns-server 对于同一个域名可以配置多个 nginx 的外网 ip 每次 dns解析 请求,轮询返回不同的 ip ,这样就能实现 nginx 的水平扩展,这个方法叫“ dns 轮询 ”。

三、 web-server 负载均衡

既然“ dns 轮询”可以将同一个域名的流量均匀分配到不同的 nginx ,那么也可以利用它来做 web-server 的负载均衡:

(1)架构中 去掉 nginx

(2)将多个 web-server 内网 ip 直接改为外网 ip

(3)在 dns -server 将域名对应的外网 ip 进行 轮询 解析

nginx 相比, dns 来实施负载均衡有什么优缺点呢?

优点

  • 利用第三方 dns 实施,服务端架构不用动

  • 少了一层网络请求

不足

  • dns 只具备解析功能,不能保证对应外网 ip 的可用性 (即使能够做 80 口的探测,实时性肯定也是比 nginx 差很多的),而 nginx 做反向代理时,与 web-server 之间有保活探测机制,当 web-server 挂掉时,能够自动迁移流量

  • web-server 需要扩容时,通过 dns 扩容生效时间长 ,而 nginx 是服务端完全自己可控的部分, web-server 扩容更实时更方便

因为上面两个原因, 架构上 很少取消反向代理层 ,而直接使用 dns 来实施负载均衡。

四、用户就近访问

如文章“缘起”中所述, http 请求的第一个步骤域名到外网 ip 的转换,发生在整个服务端外部,服务端不可控,那么如果要实施“ 根据客户端 ip 来分配最近的服务器机房访问 ”,就只能在 dns-server 上做了:

(1) 电信用户想要访问某一个服务器资源

(2) 浏览器向 dns-server 发起服务器域名解析请求

(3)dns-server 识别出访问者是电信用户

(4)dns-server 将电信机房的







请到「今天看啥」查看全文