DNS таралу уақыты: Cloudflare-дің 3 секунды мен сіздің TTL
Қысқаша (2026-11-03 тексерілді): Cloudflare осы аптада DNS жазбасы өзгерген сәттен бастап жинау жүйесі оны жазып бітіргенге дейінгі уақытты екі есе қысқартқанын жазды: медиана шамамен 7,7 секундтан шамамен 3,3 секундқа түсті, ал бұл жұмысқа кететін жад 85%-ға азайды. Бұл жақсы инженерия, бірақ сайтты жаңа серверге көшіргенде көретін күтуіңіз бұл емес. Сіздің күтуіңізді өзіңіз таңдайтын немесе кемінде оқи алатын мәндер анықтайды: жазбаның TTL-і, SOA-дағы теріс кэш мәні және атау серверлерін ауыстырсаңыз, .com тізіліміндегі екі күндік TTL. Біз кез келген аймақ үшін осының бәрін оқитын шағын скрипт жаздық, оны өз аймағымызда және Cloudflare аймағында іске қосып, нәтижесінен ауыстыру жоспарын құрдық.
Дереккөз. "We halved DNS build delay and cut memory use by 85%" (Cloudflare блогы, 2026-11-02 жарияланған), Hacker News талқылауы, 2026-11-03 жағдайы бойынша 173 ұпай. Олардың сандары жарияланғандай келтірілген; төмендегі DNS жауаптарын өзіміз сұрадық.
Cloudflare не өзгертті
API немесе панель арқылы жасалған өзгеріс дерекқорға, содан кейін Kafka-ға, одан кейін Zone Builder-ге түседі. Ол аймақты кілттерге айналдырып, тек айырмашылықты Quicksilver-ге жазады: бұл өзгерісті Cloudflare-дің әр дата-орталығына жеткізетін кілт-мән қоймасы. "Жинау кідірісі" тек бірінші бөлік: өзгерістен бастап Zone Builder жазуды аяқтағанға дейін. Таралу бұған кірмейді. Жазба өзгерістерінің саны 2022 жылғы секундына шамамен 250-ден шамамен 700-ге өсті, ал кейбір аймақтарда 20 миллионнан астам жазба бар, сондықтан бір жазба үшін бүкіл аймақты қайта жинау қымбатқа түсті. Жаңа жоспарлағыш енді ең кіші қауіпсіз жинауды таңдайды; 24 сағаттық іріктемеде жинаулардың 92,95%-ы толық қайта жинаусыз өтті.
| Көрсеткіш (Cloudflare, 2026-11-02 жарияланған) | Бұрын | Кейін |
|---|---|---|
| Жинау кідірісінің медианасы | шамамен 7,7 с | шамамен 3,3 с |
| Ең үлкен p99 секірісі | 14,6 мин | 1,21 мин |
| Орташа жұмыс жады | 49 GiB | 7 GiB |
| Толық аймақ жинауларының үлесі | 11,88% | 7,04% |
Жаңа, дәлірек гистограммада p99 көбіне 10 мен 14 секунд аралығында. Клиент үшін пайдалысы - құйрығы: нашар минутта ширек сағатқа созылған өзгеріс енді шамамен бір минут алады.
Шын мәнінде күтетін қабаттар
Келушінің резолвері әр сұрау сайын Cloudflare-ден немесе басқа провайдерден сұрамайды. Ол жауапты жазбаның TTL-і бойы сақтап, тек содан кейін қайта сұрайды. Сондықтан провайдердің секундтары басқа жерде шешілетін минуттарға немесе күндерге қосылады:
| Қабат | Кім белгілейді | Біз көрген немесе тапқан мән |
|---|---|---|
| Провайдердегі жинау | DNS провайдері | Cloudflare медианасы ~3,3 с, p99 10-14 с |
| Жазбаның TTL-і | сіз | 300 с www.cloudflare.com, 1800 с dcxv.com |
| Теріс кэш (атау болмаған) | SOA минимумы, RFC 2308 | 300 с cloudflare.com, 3600 с dcxv.com |
| Атау серверлерінің делегациясы | .com тізілімі | екі аймақта да 172800 с (2 күн) |
| Ақау кезіндегі serve-stale | резолвер, RFC 8767 | 1-3 күн ұсынылады, TTL 30 с-пен |
TTL жолдары төмендегі іске қосуымыздан алынды; serve-stale жолы - RFC ұсынысы, өлшем емес. Cloudflare құжаттамасы бойынша прокси жазбасында тұрақты Auto = 300 с, ал тек DNS жазбасын 60 с-тан (Enterprise-та 30 с) 1 күнге дейін қоюға болады (Cloudflare TTL құжаттамасы, 2026-11-03 тексерілді).
Аймақты өзіңіз тексеріңіз: dnscut.js
Скрипт TLD серверінен делегацияның TTL-ін, әр авторитетті серверден SOA сериялық нөмірі мен жазбаны, ал үш жалпыға ортақ резолверден қазір не сақтап тұрғанын және тағы қанша уақыт сақтайтынын сұрайды. Оған тек Bun-ға кірістірілген node:dns және рекурсиясыз бір сұрау үшін dig керек. Оны dnscut.js деп сақтаңыз:
// dnscut.js - how long until a DNS change is visible everywhere
// usage: bun dnscut.js <zone> [name] e.g. bun dnscut.js example.com www.example.com
import { Resolver } from 'node:dns/promises'
const zone = process.argv[2] ?? 'example.com'
const name = process.argv[3] ?? zone
const PUBLIC = { Cloudflare: '1.1.1.1', Google: '8.8.8.8', Quad9: '9.9.9.9' }
const sys = new Resolver()
const at = ip => {
const r = new Resolver({ timeout: 3000, tries: 2 })
r.setServers([ip])
return r
}
// 1. parent (TLD) delegation: how long resolvers may keep the old name servers
const tld = zone.split('.').pop()
const tldNs = (await sys.resolveNs(tld)).sort()[0]
const tldIp = (await sys.resolve4(tldNs))[0]
const dig = Bun.spawnSync(['dig', '+norec', '+noall', '+authority', 'NS', zone, '@' + tldIp])
const deleg = dig.stdout.toString().split('\n').find(l => /\sNS\s/.test(l))
console.log(`Zone ${zone}, name ${name}`)
console.log(`Delegation at .${tld} (${tldNs}): NS TTL ${deleg?.split(/\s+/)[1] ?? '?'} s`)
// 2. every authoritative server: same SOA serial, same answer?
const serials = new Set()
let ttl = 0
let neg = 0
for (const n of (await sys.resolveNs(zone)).sort()) {
try {
const r = at((await sys.resolve4(n))[0])
const soa = await r.resolveSoa(zone)
const a = await r.resolve4(name, { ttl: true })
serials.add(soa.serial)
ttl = Math.max(ttl, ...a.map(x => x.ttl))
neg = soa.minttl // RFC 2308: negative answers are cached for min(SOA TTL, SOA MINIMUM)
console.log(` ${n.padEnd(24)} serial ${soa.serial} A ${a.map(x => x.address).join(',')} TTL ${a[0].ttl}`)
} catch (e) {
console.log(` ${n.padEnd(24)} ERROR ${e.code}`)
}
}
console.log(serials.size === 1 ? 'Authoritative servers agree.' : `Authoritative servers DISAGREE: ${[...serials].join(' / ')}`)
// 3. public resolvers: what they hold now and how long they may keep it
let left = 0
for (const [label, ip] of Object.entries(PUBLIC)) {
try {
const a = await at(ip).resolve4(name, { ttl: true })
left = Math.max(left, ...a.map(x => x.ttl))
console.log(` ${label.padEnd(10)} ${a.map(x => x.address).join(',')} TTL left ${a[0].ttl} s`)
} catch (e) {
console.log(` ${label.padEnd(10)} ERROR ${e.code}`)
}
}
console.log(`Record TTL ${ttl} s: after a change, caches may serve the old answer for up to ${ttl} s (these three: ${left} s).`)
console.log(`SOA minimum ${neg} s: a resolver that saw NXDOMAIN for a new name may keep it that long.`)
bun dnscut.js dcxv.com
bun dnscut.js cloudflare.com www.cloudflare.com
Нәтиже, DCXV бұлттық серверінде Bun 1.4.4 және dig 9.20.24 арқылы 2026-11-03 іске қосылды (алдымен біздің аймақ, содан кейін Cloudflare аймағы):
Zone dcxv.com, name dcxv.com
Delegation at .com (a.gtld-servers.net): NS TTL 172800 s
ns1.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
ns2.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
ns3.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
ns4.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
ns5.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
ns6.dcxv.com serial 2025120630 A 217.28.140.182 TTL 1800
Authoritative servers agree.
Cloudflare 217.28.140.182 TTL left 1800 s
Google 217.28.140.182 TTL left 1800 s
Quad9 217.28.140.182 TTL left 1800 s
Record TTL 1800 s: after a change, caches may serve the old answer for up to 1800 s (these three: 1800 s).
SOA minimum 3600 s: a resolver that saw NXDOMAIN for a new name may keep it that long.
Zone cloudflare.com, name www.cloudflare.com
Delegation at .com (a.gtld-servers.net): NS TTL 172800 s
ns3.cloudflare.com serial 2418847198 A 104.16.124.96,104.16.123.96 TTL 300
ns4.cloudflare.com serial 2418847198 A 104.16.123.96,104.16.124.96 TTL 300
ns5.cloudflare.com serial 2418847198 A 104.16.124.96,104.16.123.96 TTL 300
ns6.cloudflare.com serial 2418847198 A 104.16.124.96,104.16.123.96 TTL 300
ns7.cloudflare.com serial 2418847198 A 104.16.124.96,104.16.123.96 TTL 300
Authoritative servers agree.
Cloudflare 104.16.124.96,104.16.123.96 TTL left 242 s
Google 104.16.124.96,104.16.123.96 TTL left 300 s
Quad9 104.16.123.96,104.16.124.96 TTL left 181 s
Record TTL 300 s: after a change, caches may serve the old answer for up to 300 s (these three: 300 s).
SOA minimum 300 s: a resolver that saw NXDOMAIN for a new name may keep it that long.
Нәтиже көрсететін төрт нәрсе
- Бірдей сериялық нөмірлер провайдердің жұмысы біткенін білдіреді. Әр атау серверіндегі бірдей SOA сериялық нөмірі өзгерістің провайдерден шыққанын көрсетеді; қалғаны - кэштер. Anycast серверлері орынға қарай өзгеше болуы мүмкін, сондықтан бұл сіз сұраған нүкте үшін дұрыс. Нөмірлер әртүрлі болса, күтіңіз немесе тикет ашыңыз: TTL-мен ешбір айла көмектеспейді.
- Резолверлер кері санайды, ерте жаңартпайды. Quad9-да www.cloudflare.com үшін 181 с, Cloudflare резолверінде 242 с қалған еді. Сол сәтте жасалған өзгеріс жинау қаншалықты жылдам болса да, олардың пайдаланушыларына үш-төрт минуттан кейін жетер еді. dcxv.com үшін дәл сондай күту 30 минутқа созылуы мүмкін, өйткені біздің A жазбамыздың TTL-і 1800 с.
- Жаңа атау өзгертілген атаудан кеш көрінуі мүмкін. Егер біреу атауды ол жасалмай тұрып іздесе, оның резолвері "мұндай атау жоқ" жауабын SOA минимумына дейін сақтай алады: біздің аймақта 3600 с. Жаңа хост атауларын жарияламас бұрын жасаңыз.
- Атау серверлерін ауыстыру - басқа ауқым. .com делегациясында 172800 с, яғни екі күн. DNS-ті басқа провайдерге көшіру екі провайдердің кемінде сонша уақыт бірдей аймақтарды қызмет етуін білдіреді.
Жаңа серверге немесе жаңа IPv4 блогына ауыстыру жоспары
- Бір ескі TTL бұрын: A және AAAA жазбаларын 300 с-қа түсіріңіз. Толық чеклист сайтты бұлттық серверге көшіру мақаласында.
- Ауыстыру кезінде: жазбаларды өзгертіп, сериялық нөмірлер сәйкес келгенше
dnscut.jsіске қосыңыз, содан кейін резолверлердің TTL-і жаңа мекенжайға дейін қалай кері санайтынын бақылаңыз. Ескі серверді логтары тынғанша қосулы ұстаңыз. - Атау серверлері ауысса: алдымен жаңа аймақты жинаңыз, тіркеушіде NS-ті ауыстырыңыз және ескі провайдерді сол жазбалармен кемінде тағы екі күн қалдырыңыз.
- Жаңа мекенжайлар: көшумен бірге жаңа сатып алынған немесе жалға алынған блок келсе, трафик келмей тұрып кері DNS пен геолокацияны тексеріңіз; трансферден кейін IPv4 геолокациясын түзету мақаласын және біздің IPv4 брокерлік қызметімізді қараңыз.
- Бір аптадан кейін: TTL-ді қайта көтеріңіз (1800-3600 с - әдеттегі мән), сонда провайдердің қысқа ақауы бірнеше минутта барлық кэштерді босатпайды.
Көшуді бізбен бірге жоспарлаңыз
Прага мен Ковильядағы Tier III дата-орталықтарымызда бұлттық серверлер мен арнайы серверлер жұмыс істейді. Бұлттық серверді іске қосып, көшуден бір күн бұрын өз аймағыңыз үшін dnscut.js орындаңыз және нәтижені sales@dcxv.com мекенжайына жіберіңіз: ауыстыруды жоспарлауға көмектесеміз.
