虎牙在全球 DNS 秒级生效上的实践( 五 )


大家可以看一下上面的图 , 这个改造和数据库域名的改造思路是一样的 , 最右上角有一个7层负载管理系统 , 我们把这个系统和名字服务打通 , 7层负载管理系统会把域名信息以服务形式注册到名字服务 , 变更域名记录时直接从7层负载管理系统推送到名字服务 , 名字服务再推送到 DNS-F , 达到快速切换的目的 。
如果域名配置了负载均衡策略 , 名字服务会从 CMDB 获取机器、机房等信息 , 打标到域名的实例信息 。然后 , DNS-F 查询名字服务时 , 会携带 ClientIp , 名字服务根据 ClientIp 的CMDB 信息过滤实例列表 , 返回同机房的实例给 DNS-F , 达到同机房优先的目的 。
由此带来的效果是:
第一 , 服务扩缩容能够秒级完成 , 减少了故障时间 。
第二 , 扩展了 DNS 的负载均衡策略 , 例如有些业务是需要在不同区域有不同的接入点的 , 而且不能跨区域调用 , 之前的 DNS 负载均衡策略是不能满足这个需求的 , 但在改造之后 , 我们能根据 CMDB 信息去做同区域调度的负载均衡策略 。
第三 , 业务在接入内部域名之后 , 延迟会有明显的下降 。上图显示的就是某个服务在接入到内部域名之后 , 延迟出现明显的下降 。
另一个落地的效果就是我们对主机上的域名解析的优化 。因为我们的 DNS - F 是部署在每台主机上的 , 然后提供一个缓存的功能 。带来的效果就是:

  • 平均解析延迟会从之前的200毫秒下降到现在的1毫秒;
  •  

虎牙在全球 DNS 秒级生效上的实践

文章插图
缓存命中率会从之前的90%上升到99.8% , 90%是用 CoreDNS 原生的那个 Cache , 99.8%是在这个 Cache 的组件下做了优化之后的效果;
  • 解析失败率是从之前的0.1%下降到0%;
这里再总结一下项目落地的技术价值:
第一 , 提供了基于 DNS 服务发现的能力 , 消除异构系统之间互相调用的障碍 。
【虎牙在全球 DNS 秒级生效上的实践】第二 , 填补了没有内部域名解析能力的空白 。
第三 , 解决我们上面说的内部服务调用面临的挑战:延时大、解析不准、不支持多种负载均衡策略、故障牵引慢 。
第四 , 优化外部域名的解析 , 屏蔽 LocalDNS 的故障 。
落地规模是:DNS - F 覆盖率100% , 完成 Taf 和 Eureka 注册中心的数据同步 。
后续规划LocalDNS:
解决公共 DNS 节点位置影响域名解析准确性的问题;
解决内部使用公共 DNS 不稳定的问题;
优化内外网解析;
精准调度:
解决全球 DNS 节点生效慢的问题 。
本文作者:
周健:GitHub ID @nanamikon , 虎牙中间件团队成员 , 2012年毕业于中山大学 , 主要负责名字和配置服务 , 以及虎牙 DNS 和微服务相关的工作 。
李志鹏:GitHub ID @lzp0412 , 虎牙中间件团队成员 , 主要负责 DNS , 以及服务注册与发现、服务治理、Service Mesh 等相关工作 。
------------------------------
本文作者:中间件小哥
原文链接:https://yq.aliyun.com/articles/703377?utm_content=g_1000059731




推荐阅读