知识卡片

TTL临界点的过期前预取与过期后宽限窗口

普通读书笔记卡

内容

缓存记录的有效期由TTL(生存时间)控制,但如果严格按照”TTL一到就立刻判定缓存失效、必须等新数据回来才能继续服务”的做法,会在TTL临界点上产生一个明显的服务空窗期——尤其是当更新请求因为网络原因失败需要重试时,这个空窗期可能被进一步拉长。HttpDNS SDK的做法是提前介入:在TTL即将过期前的10秒就主动向HttpDNS服务端发起更新请求,即使这次更新因为各种原因失败也会不断重试;与此同时,即使TTL已经真正过期,系统在过期后的10秒内仍然认为原来那条记录是有效的、可以继续使用,相当于给后台更新操作额外争取了20秒的缓冲时间。这是缓存系统里一种常见的应对”TTL边界抖动”的思路(常被称为”过期前刷新、过期后宽限”):与其在缓存到期的一瞬间强制切断服务、逼迫调用方等待一次可能失败或较慢的实时更新,不如提前一步启动异步更新、同时允许在短暂的宽限期内继续使用略微过期但仍大概率有效的旧数据,用一点点数据新鲜度的妥协换取服务的连续性。

参考来源

- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.2 App域名劫持之DNS高可用——开源版HttpDNS方案详解"节,"7.2.4 开发过程中的一些问题及应对","4.在域名TTL刚刚过期,库还没有从HttpDNS拉取回来数据时该怎么办?"(源文件:_epub-src/OEBPS/Text/Chapter7_2_5.xhtml) - 结论依据:原文说明"在HttpDNS SDK中会在TTL过期的前10秒访问HttpDNS Server端更新数据。如果数据因为任何原因导致请求失败会不断重试更新操作,在TTL过期后的10秒内,SDK也认为该A记录是有效的,相当于给更新操作留有20秒的时间",直接支撑本卡片结论。 - 原始内容:在HttpDNS SDK中会在TTL过期的前10秒访问HttpDNS Server端更新数据。如果数据因为任何原因导致请求失败会不断重试更新操作,在TTL过期后的10秒内,SDK也认为该A记录是有效的,相当于给更新操作留有20秒的时间。