本文整理自虎牙中间件团队在 Nacos Meetup 的现场分享 , 阿里巴巴中间件受权发布 。
这次分享的是全球 DNS 秒级生效在虎牙的实践 , 以及由此产生的一些思考 , 整体上 , 分为以下5各部分:
- 背景介绍;
- 方案设计和对比;
- 高可用;
- 具体实践和落地;
- 规划;
![虎牙在全球 DNS 秒级生效上的实践](http://img.jiangsulong.com/220403/0130151492-0.png)
文章插图
DNS 的解析过程很关键 , 例如上图中的 DNS 解析器通过一个定位解析追踪到我们的 DNS , 再到本地域名服务器迭代解析 , 经过根域再到.com名 , 最后到huya.com的根域名 , 获取最终的解析结果 。
在这个过程中 , DNS解析是天然的分布式架构 , 每一层都会有缓存 , 上一层出现问题挂掉 , 下一层都会有缓存进行容灾 。另外 , 整个 DNS 协议支持面广 , 包括手机和 PC , 我们用的编程框架里也有 DNS 解析器 , 服务器也会配 DNS 解析引擎 , 因此 , DNS 在虎牙的基础设施中是很重要的部分 。
虎牙的 DNS 的应用现状虎牙当前主要是依赖于公共的 DNS , 相信在座的小伙伴们或多或少都会遇到过下面这些问题:
- 依赖公共 localDNS , 解析不稳定 , 延迟大 。
- 记录变更生效时间长 , 无法及时屏蔽线路和节点异常对业务的影响 。例如 , 权威 DNS 全球各节点数据同步时间不可控 , 全局生效时间超过10分钟;localDNS 缓存过期时间不可控 , 部分 localDNS 不遵循TTL时间 , 缓存时间超过48小时 。
- 内部 DNS 功能缺失 , 无法解决内部服务调用面临挑战 。例如 , 时延大、解析不准、支持多种调度策略 。
- 无法满足国外业务的快速发展 , 虽然一些海外云厂商提供了基于 DNS 的快速扩容方案 , 以及基于 DNS 的数据库切换方案 。
名字服务架构
![虎牙在全球 DNS 秒级生效上的实践](http://img.jiangsulong.com/220403/0130153538-1.png)
文章插图
整个规划会分三个方面 , 核心是我们做了「名字服务」的中心点 , 基于此 , 可以满足我们的需求 。
一方面通过 Nacos Sync , 将现有多个注册中心的服务 , 同步到「名字服务」中 , 通过 DNS 实现不同框架之间的 Rest 服务方式的调用 , 实现例如 Eureka , Consul , Taf等框架之间的服务调用 。
另一方面 , 在全球负载均衡的场景下 , 由于虎牙是以音视频业务为主 , 而音视频业务对节点的延迟是非常敏感的 , 所以我们希望一旦出现节点延迟的情况 , 能立马做切换 。
第三个是传统 DNS 的场景 , 可以满足容器和物理机的 DNS 需求 , 提供本机 Agent 和集群两种方案 , 通过缓存和 prefect 大大提高 DNS 解析的可用性和加快生效时间 。
![虎牙在全球 DNS 秒级生效上的实践](http://img.jiangsulong.com/220403/0130152215-2.png)
文章插图
对于名字服务的总体设计主要分3部分 , 接入层需要提供 API , 消息通知和 DNS 接入的能力 。核心功能需要能在基于现有网络数据 , CMDB 和 IP 库的数据基础上 , 提供灵活的负载均衡能力 , 全球数据的秒级同步 , 多个数据源的同步 , 能对全网服务的健康状态进行监控 , 及时感知到大范围的节点异常 , 并且能够及时将节点的屏蔽的信息推送到端上 。
最终 , 我们选择 Nacos 作为名字服务的核心 , 提供统一的 API , 包括名字注册、变化推送、负载均衡等;Nacos Sync 作为全球集群间数据同步的组件;DNS - F是客户端组件 , 用于拦截 DNS 请求 , 实现基于 DNS 的名字服务 。
改造前后 DNS 变更生效流程的不同
接下来 , 我们通过对比看下改造前后 DNS 变更生效流程的差异 。
![虎牙在全球 DNS 秒级生效上的实践](http://img.jiangsulong.com/220403/0130153208-3.png)
文章插图
原有 DNS 变更生效流程中 , 对 DNS 生效时间有影响的是:
Auth DNS:
跨区域、跨国数据同步慢 , 不稳定 。
推荐阅读
- 行李箱拉链一边脱落自己怎样修
- 详解内网渗透之环境架设
- 红茶警惕潜在的四种副作用
- 怀孕后不能吃什么
- 土豆和鸡蛋能一起吃吗
- 罂粟壳火锅有什么危害
- 在快手发视频怎么能赚钱 快手发视频能不能赚钱
- 一 馒头好看松软有嚼劲 馒头不发酵怎么补救
- 年轻人改如何正确的创业 如何创业创业
- 买新茶当心被小贩忽悠