URL(Uniform Resource Locator)
一种树状设计
- Scheme 代表协议,不只有 https,还有 ftp、ssh 等,不同协议代表着不同类型的应用在提供资源
- Host 代表站点,我们今天介绍的 DNS 主要作用就是根据 Host 查找 IP 地址
- Port 是端口,代表提供服务的应用
- Path 是路径,代表资源在服务中的路径
- Query 是查询条件,代表需要的是资源中的某一个部分
- Fragment 是二级查询条件,通常不在服务端响应,而是用于前端展示定位内容
域名系统
DNS(Domain Name System,域名系统)是一个将域名和 IP 地址相互映射的分布式服务

- 顶部第一级是根 DNS 存储,存储的是顶级域的目录,被称作根 DNS 服务器
- 第二级是顶级域存储,存储的是二级域的目录,被称作顶级域 DNS 服务器(Top Level DNS,TLD)
- 最后一级是叶子节点,存储的是具体的 DNS 记录,也被称作权威 DNS 服务器
因为流量、防止单点故障、平衡地理分布等问题,根域名服务器只是一个目录,并不提供具体的数据
域名解析

在上面的例子当中,每一步都有缓存的设计。浏览器会缓存 DNS,此外,操作系统、路由器、本地 DNS 服务器也会……因此,绝大多数情况,请求不会到达根 DNS 服务器
如果在某个时刻同一个区域内有一个用户触发过上述 1~8 的过程,另一个同区域的用户就可以在本地 DNS 服务器中获得 DNS 记录,而不需要再走到根 DNS 服务器。这种设计,我们称作分级缓存策略
DNS记录
// CNAME 别名a.example.com. IN CNAME b.example.com.// MX 邮件IN MX mail.lagou.com// NS 权威服务器a.com. IN NS ns1.a.com.a.com. IN NS ns2.a.com.
设计一个智能 DNS 服务
- 为域名增加两条以上的 ns 记录(且这两个域名的 IP 需要配置 A 记录)
- ns1 和 ns2 最好在不同的物理机上
- 对应的每个物理机上的容器(虚拟机)安装 Named 服务,使之成为一个权威服务器节点
- 配置完 Named 后增加 DNS 域名配置信息的脚本( Named 有 GeoNDS 插件,基于地理位置提供智能 DNS 服务 https://bind9.readthedocs.io/en/latest/configuration.html )
