DNS中有哪些值得学习的架构设计

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: DNS中有哪些值得学习的架构设计


我曾经也当过学生,现在回想起来,会发现,学生时代的男生记忆力贼好 ,他们总能记住一串复杂神秘的字母数字串域名 ,有些大神甚至能直接敲IP 上网。

在每个翻校墙去网吧 的夜晚,你总能发现他们会在某个论坛里寻找开源学习资料 ,完事还不忘在页面底下祝楼主好人一生平安

原来那时候,他们就已经在学习互联网最重要的开源和分享精神

每每想起,感动不已

感动之余。

我们会发现这里面有几个值得一聊的技术性问题

比如,为什么用域名和IP都能上网。

他们之间是什么关系。

往深了聊,我们可以聊到DNS的原理,以及它的设计有哪些是值得我们学习的。

今天的话题,我们从为什么要有DNS聊起。

为什么要有DNS

如果我们想要访问某度,你可以在浏览器上的搜索栏里输入112.80.248.76这个IP地址,直达页面。

通过IP访问网页

这样的行为,合法,但有病

大部分人,连自己对象的电话号码都记不住,又怎么可能记得住这么一串IP地址呢。

哦,不好意思,伤害到兄弟们了,你们没对象。

但我假设你们有。

回想一下,虽然你记不住对象的电话号码,但却不影响你给她打电话。你的操作过程是不是打开通讯录 ,输入"富婆",然后就弹出一个电话号码。点击即拨打。

在计算机领域,你大概率也记不住IP,所以也需要有类似的通讯录的功能 。比如,你只需要输入www.baidu.com,它就能帮你找到对应的 112.80.248.76,然后进行访问。

用域名访问

其中www.baidu.com域名 ,通过这个域名可以获得它背后的IP是112.80.248.76

就像一个人可以有多个电话号码一样,一个域名也可以对应有多个IP地址。

而将域名解析为IP的过程,也就是查"通讯录"的过程 ,其实就是DNSD omain N ame S ystem,域名系统)协议需要做的事情。

另外需要注意的是,上面的这个IP地址,我写这篇文章的时候能访问,不代表大家看文章的时候能访问。因为这背后的IP地址是有可能变更的。可以通过使用 ping www.baidu.com获得最新的IP地址。

ping获得IP

但问题就来了。

普通人的通讯录,一般有一千个电话号码就算是社交小达人 了,放在通讯录里绰绰有余。

然而网站域名,却不一样,据说2015年的时候就已经超过3亿了。

如果将这3亿条记录都放在一个服务器里,会有两个问题

  • • 超过3亿条域名数据,数据量过大 ,并且数据量持续增加
  • • 需要承受大量的读请求 。每个网站域名都可能会有成千的访问。这加起来,四舍五入也有千亿qps了。

显然,如果将DNS做成类似手机通讯录这样的单点服务,那是不可能实现这样的能力的,必须得是分布式系统

于是,问题就变成了,如何设计一个支持千亿+qps请求的大型分布式系统

我知道肯定有人要说:"这是服务只有10qps的人该考虑的事情吗?"

虽然我们做的服务可能只有10qps,但这并不妨碍我们学习DNS里优秀的设计。

我们就从URL的层次结构聊起。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

URL的层次结构

举个例子。一个常见的域名,比如 www.baidu.com

可以看到,这个域名中间用了两个句点 。通过句点符号,可以将域名分为三部分。

其中com被称为一级域顶级域 ,其他常见的顶级域还有cn,co等,baidu二级域www则是三级域

除此之后,在com后面,其实还有一个被省略掉的句点号 。它叫根域

域名的层次结构

当域名多起来了之后,将它们相同的部分抽取出来,多个域名就可以变成这样的树状层级结构

层次结构

这时候我们就可以看到,这些域之间其实是一种层级关系 ,就像是学校,年级,班级那样。

当你想要去定位一个具体域名的时候,你就可以通过这样的层级找到对应的域名。

举个例子。大家应该还记得那句广告词,"三年级2班的李小明同学,你妈妈拿了两罐旺仔牛奶给你",其实李小明的妈妈,就是通过,学校、年级、班级的层级形式,一层层找到人。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

DNS的原理

我们重新回来看下大佬们是怎么设计DNS。

先直接说最重要的结论。

  • 利用层级结构去拆分服务
  • 加入多级缓存

接下来展开。

利用URL层级结构去拆分服务

DNS承载的流量压力非常大,必须要做成分布式服务 ,于是问题的关键就变成了如何拆分服务

既然URL是树状的层级结构,那保存它们的服务,也可以依据这个,非常自然的拆成树状的形式。

一台服务器维护一个或多个域的信息。于是服务就变成了下面这样的层级形式。

当我们需要访问www.baidu.com

查询过程就跟下图一样。

DNS查询过程

请求会先打到最近的DNS服务器(比如你家的家用路由器)中,如果在DNS服务器中找不到,则DNS服务器会直接询问根域服务器,在根域服务器中虽然没有www.baidu.com这条记录的,但它可以知道这个URL属于com域,于是就找到com域服务器的IP地址,然后访问com域服务器,重复上面的操作,再找到放了baidu域的服务器是哪个,继续往下,直到找到www.baidu.com的那条记录,最后返回对应的IP地址

可以看到,原理比较简单,但这里涉及到两个问题。

  • • 本机怎么知道最近的DNS服务器IP是什么?
  • • 最近的DNS服务器怎么知道根域的IP是多少?

我们一个个来回答。

本机怎么知道最近的DNS服务器的IP是什么?

这个在之前写过的《刚插上网线,电脑怎么知道自己的IP是什么?》 提到过,插上网线时,机子会通过DHCP协议获得本机的IP地址,子网掩码,路由器地址,以及DNS服务器的IP地址

DHCP协议

下面是我的mac机子,第二阶段DHCP Offer中的抓包截图。可以看到,这里面返回的信息里包含了DNS服务器的IP

offer阶段

同时也可以在左上角的点左上角的苹果图标->系统表偏好设置->网络->高级->DNS中查看到DNS服务器的IP地址。

这里有个小细节,从上面的抓包图里可以看到路由器地址和DNS服务器地址,以及DHCP服务器地址 ,其实都是192.168.31.1,这个其实是我这边的家用路由器 的IP地址,也就是说一般家用路由器自带这几个功能。

而在某里云服务器里,DNS服务器也是一样,是通过dhcp协议获得。查看DNS服务器的IP地址也很方便,执行cat /etc/resolv.conf就好了。

这上面的nameserver中,可以看出有两台DNS服务器,机子会按照文件中出现的顺序来发起请求,如果第一台服务器没反应,就会去请求第二台。

最近的DNS服务器怎么知道根域的IP是多少?

我们也知道根域,就是域名树的顶层,既然是顶层,那信息一般也就相对少一些。对应的IPV4地址只有13个,IPV6地址只有25个。

我们可以通过dig命令的+trace选项来查看一个域名的dns解析过程。

而前面提到的传说中的13个根域,从字母a-m,就都在上图中。

但这又引发了一个问题,上面看到的都是域名。

这。。。

"我本来是想通过域名去找IP的,你又让我去找其他域名的IP?"

听起来不科学,这不就死循环 了吗。

是的,所以这些根域名对应的IP会以配置文件的形式,放在每个 域名服务器中。

也就是说并不需要再去请求根域名对应的IP ,直接在配置里能读出来就好了。

下面这个截图是域名服务器里的配置内容。

可以看到A开头的根域,它的IPV4地址是198.41.0.4

相关文章
|
19天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
52 1
|
25天前
|
运维 监控 负载均衡
探索微服务架构下的服务治理:动态服务管理平台深度解析
探索微服务架构下的服务治理:动态服务管理平台深度解析
|
28天前
|
消息中间件 存储 缓存
十万订单每秒热点数据架构优化实践深度解析
【11月更文挑战第20天】随着互联网技术的飞速发展,电子商务平台在高峰时段需要处理海量订单,这对系统的性能、稳定性和扩展性提出了极高的要求。尤其是在“双十一”、“618”等大型促销活动中,每秒需要处理数万甚至数十万笔订单,这对系统的热点数据处理能力构成了严峻挑战。本文将深入探讨如何优化架构以应对每秒十万订单级别的热点数据处理,从历史背景、功能点、业务场景、底层原理以及使用Java模拟示例等多个维度进行剖析。
53 8
|
1月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
120 6
|
11天前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
113 36
微服务架构解析:跨越传统架构的技术革命
|
16天前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
18天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
19天前
|
SQL 数据可视化 数据库
多维度解析低代码:从技术架构到插件生态
本文深入解析低代码平台,涵盖技术架构、插件生态及应用价值。通过图形化界面和模块化设计,低代码平台降低开发门槛,提升效率,支持企业快速响应市场变化。重点分析开源低代码平台的优势,如透明架构、兼容性与扩展性、可定制化开发等,探讨其在数据处理、功能模块、插件生态等方面的技术特点,以及未来发展趋势。
|
18天前
|
SQL 数据可视化 数据库
多维度解析低代码:从技术架构到插件生态
本文深入解析低代码平台,从技术架构到插件生态,探讨其在企业数字化转型中的作用。低代码平台通过图形化界面和模块化设计降低开发门槛,加速应用开发与部署,提高市场响应速度。文章重点分析开源低代码平台的优势,如透明架构、兼容性与扩展性、可定制化开发等,并详细介绍了核心技术架构、数据处理与功能模块、插件生态及数据可视化等方面,展示了低代码平台如何支持企业在数字化转型中实现更高灵活性和创新。
41 1
|
22天前
|
缓存 监控 网络协议
深入解析微服务架构中的服务发现机制
深入解析微服务架构中的服务发现机制
25 1

相关产品

  • 云解析DNS
  • 推荐镜像

    更多