dev · · 09:14 · 2 min de citit
Înlocuirea unui Resolver DNS în Producție Fără Postmortem: Lecții dintr-o Ștergere de 180k Linii
Un furnizor de cloud de dimensiuni medii a înlocuit cu succes un resolver DNS moștenit scris în C++, format din 180.000 de linii de cod, cu o nouă implementare în Rust de 12.000 de linii. Migrația de șase luni, care a implicat lansare incrementală și shadowing de trafic, a evitat întreruperi majore și postmortem-uri prin prioritizarea disciplinei și a abstractizărilor corecte.
Un furnizor de cloud de dimensiuni medii a întreprins o actualizare semnificativă a infrastructurii, înlocuind vechiul său resolver DNS C++ de 180.000 de linii, responsabil pentru milioane de interogări pe secundă, cu o implementare modernă în Rust de 12.000 de linii. Acest proiect de șase luni a fost executat fără întreruperi majore sau postmortem-uri de urgență, subliniind succesul unei abordări disciplinate și incrementale în înlocuirea sistemelor critice. Motivația principală pentru înlocuire a fost povara de mentenanță a sistemului moștenit, bug-urile frecvente de siguranță a memoriei, blocajele de performanță și nepotrivirea generală pentru practicile moderne de dezvoltare.
Strategia tehnică s-a concentrat pe o înlocuire completă, mai degrabă decât pe refactorizare, având ca scop eliminarea datoriilor tehnice existente și a problemelor asociate. Principiile cheie au inclus o lansare incrementală, rularea simultană a resolver-elor vechi și noi, shadowing de trafic pentru a compara răspunsurile fără a afecta utilizatorii și o tranziție graduală cu capabilități de rollback instantanee. Noul resolver, construit folosind biblioteca trust-dns și valorificând Tokio pentru I/O asincron, a încorporat caracteristici moderne precum conformitatea RFC, DNS-over-TLS/HTTPS, metrici Prometheus și logging structurat, abordând neajunsurile sistemului anterior.
Acest proces meticulos de migrație, implicând shadowing extins și tranziții fazate, a relevat diferențe subtile în comportamentul DNS, variații ale resolver-elor upstream și gestionarea TTL, care au fost abordate sistematic. Succesul proiectului subliniază importanța începerii cu o observabilitate robustă, rularea duală a sistemelor și alegerea corectă a limitelor de abstractizare la modernizarea infrastructurii critice. Abordarea disciplinată a echipei a asigurat o tranziție lină, eliminând în final o povară semnificativă de mentenanță și îmbunătățind fiabilitatea sistemului.
$ sursa --originală
dev.to
Rezumat realizat de Sudofeed pe baza articolului original. Drepturile asupra conținutului aparțin sursei originale.