我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

本期作者

魏志雄 - 基础设施部高级运营工程师

01 引言

域名系统(DNS)就像互联网的地址簿,通过将一个或多个复杂的IP地址映射到易于识别和记忆的域名上,使人们可以通过简单的域名(如简单的域名)方便地访问互联网资源。最重要的是,DNS还提供重要的服务,例如负载均衡。是互联网基础设施的重要组成部分。

基于 DNS 的私有 DNS 服务提供一些额外的好处:

1. 私有域名

2. DNS劫持

3. 具体业务逻辑支持

4. 极低的解析延迟和极高的吞吐量

因此,本文将分享B站内网DNS服务建设的相关实践。

02 架构演进

考虑到基础设施的稳定性,我们选择了最知名和最广泛的 DNS 实现 BIND9 作为 DNS。

在进入体系结构之前,让我们简要了解一下 DNS 中最常用的两个角色:

权威名称是实际持有并负责特定域的资源记录的服务器,通常是解析器查找 IP 地址以及这些域的最终解释过程的最后一步。

软件层实现权威名称可以分为主权限和从权限。对于DNS查询,主从权限是平等的,但它在软件架构中提供了必要的故障恢复和水平扩展能力。

解析器通常是 DNS 查询的第一站,处理用户的递归查询并提供完整的答案。当收到请求时,解析器会向 DNS 层次结构发出一个或多个迭代查询。在获得完整的答案(或错误)后,解析器将答案传递给用户,并将记录放入其缓存中。用户对同一查询的后续请求将从解析器的缓存中得到应答,直到缓存记录的 TTL 过期,此时它将从缓存中刷新;下一个请求相同信息的用户查询将导致对 DNS 层次结构的一系列新查询。

在不同的用例中,解析器通常由混淆的名称来引用,例如缓存名称服务器、递归名称服务器、转发解析器、区域解析器和全方位服务解析器。

典型的域名解析流程图:

阿里云服务器内网互通_阿里云内网互通_阿里内网器云互通服务怎么开启

1. 第一代DNS架构

阿里云服务器内网互通_阿里云内网互通_阿里内网器云互通服务怎么开启

B站早期第一代内网DNS服务架构相对简单,核心注重高可用性和稳定性,采用主从模式,保证每个核心IDC都有独立的从权威集群,通过VIP提供负载均衡,并通过VIP健康检查机制自动踢出故障节点。同时,各IDC机房的内网互联互通,相互备份。

随着业务的发展,在高QPS场景下,主从权威区域配置同步过程中,分辨率持续时间突然增加,响应延迟不稳定。其次,来自权威的可扩展性也相对较弱。因此,我们衍生出了第二代 DNS 架构。

2. 第二代DNS架构

第二代DNS架构主要引入多级缓存。

首先是 Name 的引入,大大提高了可扩展性。同时,也避免了权威节点配置/区域变更导致的抖动。

二是引入NSCD作为缓存服务,针对大数据、AI等QPS极高的服务。它不仅可以减少响应延迟,还可以提高整体服务吞吐量。

除此之外,第二代架构还对 BIND9 进行了升级和优化。虽然 BIND9 支持多线程,但在 9.11 早期版本中,我们最多只能使用高达 400% 的 CPU,单个实例的峰值 QPS 约为 100,000。在新版本中,由于支持、日志写入缓存等新功能,性能得到了大幅提升,单个实例可以充分利用多核CPU,而且在生产环境的压测中,单机QPS超过150万,所以我们也进行了线上升级。

03 DNS服务监控建设

DNS 服务监控警报分为三个级别:

1. 主机层

2. 业务层

3. 结束

1. 主机层

主机层,通常存在 CPU、内存、网络、磁盘等资源使用率、饱和度、错误监控等告警。在这里,我们主要强调两个容易被忽视或对 DNS 服务很重要的监控警报。

2. 业务层

3. 末端检测报警

服务内部的监控并不总能反映用户访问服务器的质量,因此我们在每个数据中心部署多个探针,模拟真实的用户请求,并在多个区域和域中高频率地监控每个探针的可用性、内容正确性和响应延迟。通过探查,我们及时发现了业务方尚未察觉到的网络设备bug和网络拥塞。

同时,当异常发生时,可以使用要添加的网络ping延迟和丢包率监测功能来辅助判断。

作为参考,公共DNS也不稳定,需要进行监控和警报。目前我们的实践经验是,阿里云公共DNS的稳定性相对来说要好一些。

04 进站体验

在一个复杂的系统中,总会有很多细节,我们在使用的早期阶段是无法理解或掌握的,所以这里有一些我们已经克服的陷阱,以帮助你走上自己的道路。还建议阅读“常见的DNS操作和配置错误”[3]。

1. 确保 UDP 和 TCP 端口均可供用户访问

通常,DNS默认使用UDP传输,当RFC中约定当DNS使用UDP传输时,数据包体需要小于或等于512字节(不包括IP或UDP头)。512 字节的限制在大多数情况下可以满足要求,但当记录值过长并且超过限制时,端需要将 TC 位设置为 1,以告诉要截断的响应。当您收到 TC 位为 1 的响应时,您需要使用 TCP 重新启动请求。这要求 TCP 端口也必须是可访问的。

基于以上信息,我们也提醒大家,在选择域名时,应尽量简短,记录值应尽可能简单,以提高解析速度。

2.区域配置更改后必须增加序列号

主从权限的同步过程如下:

(1)变更主节点区域配置,向从节点发送通知

(2) 从服务器返回并向主机发起 SOA 查询

(3) 主节点返回 SOA

(4)比较SOA中的序列号是否大于节点的序列号,仅当SOA序列号大于SOA的序列号时才启动区域,并使用TCP端口53进行数据传输

因此,在区域配置更改后,必须增加序列号,否则主从节点的数据将不一致。

3. 使用 rndc flush 刷新整个缓存

如果直接使用rndc flush来刷新全量缓存,对于NSCD等客户端缓存,每次客户端缓存过期都可能导致QPS过高。

因此,只要有可能,请使用 或 刷新指定的域名或区域。

4. 谨慎对待泛域名解析

通配符DNS是指使用通配符*将所有子域名指向同一DNS记录,以实现灵活配置。但是,当一个子域名需要独立配置时,很容易忽略泛域名的配置,导致故障。

下面是一个示例(基于真实的失败),以使每个人都更容易理解:

(1)在服务启动之初,采用泛域名解析,方便配置:*。别名

(2)经过一段时间的发展,有新的需求,需要增加一个TXT进行验证

(3)运维学生添加和解析TXT xxx

(4)此时,由于只有TXT记录,没有A/AAAA或CNAME,因此站点A无法直接访问

05 结语

基础设施服务具有杠杆效应,良好的基础设施服务可以帮助企业提高效率,降低开发和运营成本。作为基础设施一部分的私有 DNS 也是如此。我们以业务需求为基础,不断发展迭代,致力于提供稳定、可靠、易用、易用的服务。

引用:

[1] BIND 9 管理员参考手册 (

[2] 域名 – 实施和规范 (

[3] 常见 DNS 操作和配置错误 (

[4] ISC 知识库中有关 BIND 和 DNS 的系列文章 (

二维码
扫一扫在手机端查看

本文链接:https://by928.com/5417.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线