当前位置:网站首页>除了解析域名,DNS还能干吗?
除了解析域名,DNS还能干吗?
2020-11-09 12:53:00 【osc_fge5j3lp】
一个http请求,典型的执行流程是怎么样的呢?

可以看到,典型流程为:
(1)客户端请求dns-server,发起域名解析;
(2)dns-server返回域名对应的外网ip(1.2.3.4);
(3)客户端通过外网ip(1.2.3.4),访问反向代理;
(4)反向代理通过内网ip(192.168.x.x),将请求分发给web-server;
(5)web-server对请求进行处理;
其中,第一个步骤,将域名转化ip的过程,发生在应用系统的外部,是通过DNS实现的。
除了域名解析,在架构设计时,还能利用DNS做一些什么事情呢?
一、用户就近访问

DNS可以实现,用户所需资源的就近访问:
(1)电信用户想要访问某一个服务器资源;
(2)浏览器向dns-server发起域名解析请求;
(3)dns-server识别出访问者是电信用户;
(4)dns-server将电信机房的nginx外网ip返回给访问者;
(5)访问者就近访问;
根据用户ip来返回最近的服务器ip,称为“智能DNS”,CDN以及多机房多活中最常用。
二、反向代理水平扩展

典型的互联网架构中,可以通过增加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进行轮询解析;
通过DNS来实施负载均衡有什么优缺点呢?
优点:
(1)利用第三方DNS实施,服务端架构不用动;
(2)少了一层网络请求;
不足:
(1)DNS只具备解析功能,不能保证对应外网ip的可用性,而nginx做反向代理时,与web-server之间有保活探测机制,当web-server挂掉时,能够自动迁移流量;
(2)当web-server需要扩容时,通过DNS扩容生效时间长,而nginx是服务端完全自己可控的部分,web-server扩容更实时更方便;
因为上面两个原因,架构上一般都使用高可用反向代理。
总结
架构设计中,除了域名解析,DNS还有其他用武之地:
(1)智能DNS,根据用户ip来就近访问服务器;
(2)DNS轮询,水平扩展反向代理层;
(3)利用DNS实施负载均衡;
希望大家有收获。
扫码关注“架构师之路”视频号
视频号要有100个关注,才能开通认证,希望大家成为前100个朋友。感谢,感恩。
版权声明
本文为[osc_fge5j3lp]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4417091/blog/4709460
边栏推荐
- 注意.NET Core进行请求转发问题
- 从编码、网络传输、架构设计揭秘腾讯云高质量、高可用实时音视频技术实践...
- inet_pton()和inet_ntop()函数详解
- Mac terminal oh my Zsh + solarized configuration
- Visual Studio (MAC) installation process notes
- Method of creating flat panel simulator by Android studio
- Android Studio Avd「真·小白食用方法」
- Several methods of initializing singleton variable in go language
- 从汇编的角度看pdb文件
- 嗯,查询滑动窗口最大值的这4种方法不错...
猜你喜欢

Four steps of Android integrated payment

An attempt to read or write to protected memory occurred using the CopyMemory API. This usually indicates that other memory is corrupted.

FGC online service troubleshooting, this is enough!

Oh, my God! Printing log only knows log4j?

手写Koa.js源码

Navigation component of Android architecture (2)

Stack & queue (go) of data structure and algorithm series

Download Netease cloud music 10W + music library with Python

Flink 系例 之 Reduce

零基础IM开发入门(四):什么是IM系统的消息时序一致性?
随机推荐
Depth analysis based on synchronized lock
vscode 插件配置指北
Gather in Beijing! Openi / O 2020 Qizhi Developer Conference enters countdown
嗯,查询滑动窗口最大值的这4种方法不错....
多线程真的比单线程快?
10款必装软件,让Windows使用效率飞起!
Mac terminal oh my Zsh + solarized configuration
Vscode plug-in configuration pointing North
Biden wins the US election! Python developers in Silicon Valley make fun of Ku Wang in this way
手写Koa.js源码
彩虹排序 | 荷兰旗问题
How to use function framework to develop large web application
The history of C1 research in Shenzhen
未来中国电信将把云计算服务打造成为中国电信的主业
关于无相互作用极化率的计算
基于synchronized锁的深度解析
An attempt to read or write to protected memory occurred using the CopyMemory API. This usually indicates that other memory is corrupted.
android studio AIDL的使用
彩虹排序 | 荷兰旗问题
Windows must be installed with efficiency software!