بهینه‌سازی کد در Cloudflare؛ آزادسازی ۱۰۰ ترابایت حافظه RAM بدون افزودن سرور جدید

بهینه‌سازی کد در Cloudflare؛ آزادسازی ۱۰۰ ترابایت حافظه RAM بدون افزودن سرور جدید

شرکت Cloudflare اعلام کرد که بدون افزودن حتی یک سرور جدید یا ارتقای سخت‌افزاری، موفق شده است حدود ۱۰۰ ترابایت حافظه RAM را در سراسر شبکه خود آزاد کند. این دستاورد بزرگ از طریق بهینه‌سازی نرم‌افزاری پلتفرم حافظه پنهان (DNS caching) این شرکت موسوم به Big Pineapple به دست آمده است که سرویس‌های معروفی مانند DNS 1.1.1.1 و DNS Firewall را پشتیبانی می‌کند.

مهندسان سیستم Cloudflare با اعمال پنج تغییر در کدهای Rust این پلتفرم، حجم یک ورودی معمولی در حافظه پنهان را از ۹۵۳ بایت به ۴۲۰ بایت کاهش دادند. این بهینه‌سازی نه تنها مصرف حافظه را کاهش داد، بلکه سرعت عملکرد سیستم را نیز بهبود بخشید؛ به‌طوری‌که نرخ ثبت ورودی‌ها از ۶۲۵,۰۰۰ به ۸۹۳,۰۰۰ مورد در ثانیه افزایش یافت و تأخیر جستجو نیز از ۸۲۸ نانوثانیه به ۶۷۰ نانوثانیه کاهش یافت. همچنین میانگین مصرف حافظه در هر نمونه (instance) از ۹.۳ گیگابایت به ۵.۳ گیگابایت رسید.

پلتفرم Big Pineapple در هر لحظه میزبان بیش از ۲۵۰ میلیارد ورودی DNS است. در چنین مقیاس عظیمی، حتی یک بایت صرفه‌جویی در هر ورودی می‌تواند بیش از ۲۵۰ گیگابایت حافظه را در کل شبکه آزاد کند.

جزئیات فنی بهینه‌سازی کدهای Rust

یکی از بزرگ‌ترین تغییرات مربوط به نحوه استفاده از ساختارهای داده Vec و String در زبان Rust بود. این ساختارها برای رشد پویا طراحی شده‌اند و فراداده‌های مربوط به ظرفیت را ذخیره می‌کنند، در حالی که رکوردهای DNS پس از ورود به حافظه پنهان نیازی به تغییر اندازه ندارند. Cloudflare با جایگزین کردن آن‌ها با اسلایس‌های باکس‌شده با اندازه ثابت (fixed-size boxed slices)، فراداده‌های اضافی را حذف کرد که همین تغییر به تنهایی بیش از ۱۵ ترابایت RAM آزاد کرد.

علاوه بر این، مهندسان نحوه چیدمان پاسخ‌های DNS در حافظه را بازطراحی کردند. پیش از این، رکوردهای پاسخ در سه لیست مجزا ذخیره می‌شدند، اما در طراحی جدید، تمام رکوردها در یک بافر واحد قرار گرفته و با آفست‌های ۲ بایتی شناسایی می‌شوند. همچنین، ذخیره‌سازی داده‌ها به فرمت بایت‌های خام (raw wire-format) با طول مشخص تغییر یافت تا از هدررفت حافظه برای رکوردهای کوچک (مانند رکوردهای ۴ بایتی IPv4 A) جلوگیری شود.

مقدار ۱۰۰ ترابایت حافظه رم آزاد شده در شبکه Cloudflare، تقریباً معادل حافظه موجود در ۱۳۰ سرور نسل ۱۳ (Gen 13) این شرکت است که هر کدام ۷۶۸ گیگابایت رم DDR5-6400 دارند. Cloudflare قصد دارد این حافظه آزاد شده را به افزایش حجم حافظه پنهان DNS اختصاص دهد تا نرخ پاسخ‌دهی محلی بهبود یافته و ترافیک ارسالی به سرورهای DNS مرجع کاهش یابد.