کلودفلر با بازطراحی نحوهٔ ذخیره‌سازی ورودی‌های کش در پلتفرم Big Pineapple—که پشت سرویس رزولور 1.1.1.1 قرار دارد—حدود 100 ترابایت رم در ناوگان جهانی خود آزاد کرد و هم‌زمان عملکرد کش را بهبود داد. این تغییر نمونه‌ای روشن از تأثیر بهینه‌سازی کش DNS در کاهش هزینه‌ها و افزایش کارایی است.

  • کاهش اندازهٔ هر ورودی: از 953 بایت به 420 بایت (کاهش حدود 56%).
  • ورودی‌های هم‌زمان: بیش از 250,000,000,000 ورودی کش‌شده نگهداری می‌شود.
  • صرفه‌جویی کلی: آزادسازی نزدیک به 100 ترابایت حافظه روی ناوگان جهانی.
  • ارتقاء عملکرد: افزایش توان درج و کاهش تأخیر جستجو.
معماری حافظه کش DNS کلودفلر

چگونه یک بازطراحی کوچک باعث بهینه‌سازی کش DNS شد

تیم مهندسی کلودفلر پنج تغییر فنی در سطح زبان Rust اعمال کرد که اندازهٔ هر ورودی کش را از 953 بایت به 420 بایت کاهش داد. با توجه به مقیاس فوق‌العادهٔ تعداد ورودی‌ها، هر کاهش جزئی در مصرف حافظه به صرفه‌جویی قابل‌توجهی منجر شد.

پنج تغییر فنی کلیدی

  • جایگزینی Vec و String با برش‌های ثابت (boxed slices): حذف فیلدهای ظرفیت (capacity) که پس از کش شدن هرگز استفاده نمی‌شد؛ صرفه‌جویی بیش از 15 ترابایت فقط از این مورد.
  • ادغام سه لیست رکورد در یک بافر متوالی: ذخیرهٔ رکوردها به‌صورت پیوسته و ایندکس‌شدن با آفست‌های دو بایتی، که سربار اشاره‌گرها و ساختارهای تو در تو را حذف می‌کند.
  • حذف نام‌های مالک تکراری: نام‌هایی که برابر با دامنهٔ پرس‌وجو بودند حذف می‌شوند و تنها در زمان خواندن بازسازی می‌گردند.
  • ذخیرهٔ رکوردها به‌صورت بایت‌های خام با پیشوند طول: پایان‌دادن به نگهداری رکوردهای کوتاه در قالب اندازهٔ بزرگ‌ترین رکوردها (مثلاً نگهداری رکورد A چهار بایتی به اندازهٔ NAPTR).
  • چینش پیوستهٔ داده‌ها برای بهبود locality کش CPU: بیشتر رکوردها اکنون مستقیماً از بافر ذخیره‌شده کپی می‌شوند و نیاز به سریال‌سازی فیلد به فیلد از بین رفته است.

نتایج عملکردی و اثر بر زیرساخت

بنچ‌مارک‌های داخلی نشان می‌دهد توان درج (insert throughput) از 625,000 به 893,000 ورودی در ثانیه افزایش یافته و تأخیر جستجو از 828 نانوثانیه به 670 نانوثانیه کاهش یافته است. در دورهٔ پیاده‌سازی این تغییرات، حافظهٔ مقیم در صدک 99 (p99) به ازای هر نمونه از 9.3 گیگابایت به 5.3 گیگابایت کاهش یافت.

سرورهای دیتاسنتر و ماژول‌های حافظه DDR5

کلودفلر معادل حافظهٔ آزادشده را برابر با مجموع DDR5 در 130 سرور نسل سیزده اعلام کرده است؛ هر یک از این سرورها 768 گیگابایت DDR5-6400 دارند. این صرفه‌جویی در زمانی رخ داد که قیمت ماژول‌های حافظه سرور در حال افزایش بود و جلوگیری از خرید ماژول‌های اضافی صرفهٔ اقتصادی قابل‌توجهی به همراه داشت.

پیامدها برای معماری، هزینه و عملیات شبکه

کلودفلر تصمیم گرفته رم آزادشده را صرف بزرگ‌تر کردن اندازهٔ کش‌های DNS کند تا نرخ برخورد (hit rate) افزایش یابد و بار پرس‌وجو به سرورهای authoritative کاهش پیدا کند. افزایش اندازهٔ کش باعث کاهش درخواست‌های خروجی از شبکه و بهبود تجربهٔ پاسخ‌دهی برای کاربران می‌شود؛ این تصمیم هم از منظر هزینه‌ای و هم از منظر کارایی منطقی است.

این پروژه دومین تلاش بزرگ بازیابی حافظه در یک سال اخیر برای کلودفلر است؛ پیش‌تر بازنویسی لایهٔ مدیریت درخواست (FL2) به Rust منجر به بهبودهای مشابهی در مصرف منابع شده بود. همچنین مهاجرت به پردازنده‌های AMD EPYC نمونه‌ای از این رویکرد کارایی‌محور در تصمیم‌گیری‌های سخت‌افزاری است.

چشم‌انداز و توصیه‌ها برای تیم‌های زیرساختی

کاهش قابل‌توجه اندازهٔ ورودی‌ها و بهبود locality کش CPU نشان می‌دهد اصلاحات کوچک در طراحی داده و ساختار حافظه می‌تواند در مقیاس جهانی اثرات بزرگی بر هزینه و عملکرد داشته باشد. شرکت‌های ارائه‌دهندهٔ خدمات زیرساختی باید توجه بیشتری به طراحی داده‌ها، نمایه‌سازی حافظه و انتخاب ساختارهای ذخیره‌سازی داشته باشند، زیرا هر بایت هدررفته در آن مقیاس به هزینه‌ای محسوس تبدیل می‌شود.

نکات عملی برای تیم‌های مهندسی:

  • بازبینی ساختارهای داده‌ای برای حذف سربار ظرفیت و اشاره‌گرهای غیرضروری.
  • استفاده از بافرهای پیوسته و ایندکس‌های کوچک برای کاهش سربار حافظه.
  • ذخیرهٔ فشردهٔ رکوردها با پیشوند طول برای جلوگیری از هدررفت فضا.
  • اندازه‌گیری مداوم p99 و توان عملیاتی پس از هر تغییر برای ارزیابی اثرات واقعی.