Cloudflare在11月2日的官方博客中介绍,已为DNS变更处理引入定向构建规划器和新调度器。两项改动共同将峰值内存降低85%;释放的资源余量又让团队能够安全缩短流水线中为保障韧性而保留的等待时间,使DNS变更到数据写入Quicksilver的时间缩短一半。

这次优化针对的是DNS区域设置变化带来的构建开销。一个DNS区域包含某个域名的记录和设置。Cloudflare的Zone Builder目前每秒接收约700次DNS记录变更,另有约100次区域设置变更等事件;2022年,记录变更约为每秒250次。博客指出,真正的问题并非事件数量,而是部分事件所需的工作会随区域规模增长。如今,一些区域已拥有超过2000万条记录。

在这条流水线中,变更先存入数据库,再由数据库变化或其他系统产生Kafka事件。事件经汇总后交给Zone Builder,后者读取所需数据,转换成权威DNS服务器使用的键,与分布式键值存储Quicksilver中的内容比较,只写入发生变化的部分。随后,Quicksilver将变化传播到Cloudflare网络。因此,此次“时间减半”的统计终点是写入Quicksilver,而非整个网络完成传播。

按需构建的难点在于判断哪些工作不能省。记录事件会标明发生了什么变化,区域事件却可能来自多个Cloudflare产品,也可能不说明变化原因,还可能改变多个同名区域共享的数据。博客强调,做得过多会浪费容量,做得过少则可能让边缘节点保留过时或错误的DNS数据。

新的规划器选择能够证明安全的最小构建范围,新调度器则合并同一区域的工作。按照Cloudflare的说明,区域设置变更如今不再触发对包含数千万条记录的区域进行重建。这次调整的核心,是减少不必要的构建工作,同时保留DNS数据正确性所需的处理范围。

原始来源:How we halved DNS build delay and cut memory use by 85%