Cloudflare е намалила паметта, използвана от DNS кеша зад своя резолвер 1.1.1.1 с повече от половината, като по този начин е освободила около 100TB RAM в цялата си мрежа. Компанията не е подменяла сървърния хардуер, нито е премахвала паметни модули. Вместо това инженерите промениха начина, по който кешираните DNS данни се съхраняват в софтуера.

Работата по оптимизацията беше съсредоточена върху Big Pineapple – платформата за DNS кеширане на Cloudflare, която стои зад популярния резолвер 1.1.1.1, DNS Firewall и няколко други DNS услуги, които компанията предлага. В техническа публикация в блога си системният инженер Себастиан Нютебоом описа подробно пет промени в кода на Rust, които намалиха типичния размер на кеш записите от 953 на 420 байта. Промените също така ускориха кеша. Cloudflare съобщи, че пропускателната способност при вмъкване се е повишила от 625 000 на 893 000 записа в секунда, докато латентността при търсене е спаднала от 828 на 670 наносекунди. По време на внедряването, от средата на май до началото на юли, p99 потреблението на памет на инстанция е спаднало от 9,3 на 5,3GB.

Cloudflare посочва, че Big Pineapple съхранява повече от 250 милиарда DNS записа във всеки един момент, а при такъв мащаб дори малки количества изгубена памет бързо се натрупват. Компанията изчислява, че един-единствен ненужен байт във всеки запис в кеша заема повече от 250GB в цялата ѝ инфраструктура.

Cloudflare освободи зашеметяващите 100TB RAM памет чрез оптимизиране на DNS кеша на 1.1.1.1Big Pineapple Една от най-големите промени засегна типовете Vec и String в Rust. Тези контейнери са проектирани да се разширяват, затова съхраняват данни за капацитета в допълнение към самите данни. Но DNS записите не се нуждаят от разширяване, след като влязат в кеша. Cloudflare замени тези структури с „boxed slices“ с фиксиран размер, премахвайки метаданните, които вече не бяха полезни. Компанията заяви, че само тази промяна е спестила над 15TB RAM.

Инженерите също преосмислиха начина, по който DNS отговорите се подреждат в паметта. Big Pineapple съхраняваше по три отделни списъка със записи за всеки отговор. Новият дизайн поставя записите в един буфер и ги идентифицира с двубайтови офсети.

Кешът вече не запазва имената на собствениците, когато те просто повтарят запитвания домейн. Cloudflare възстановява тези имена, когато предоставя отговора. Сега компанията съхранява данните от записите като сурови байтове в мрежов формат с префикс за дължина. Тази промяна отстранява несъответствие в предишния дизайн. Четирибайтов IPv4 A запис заемаше същите 144 байта, колкото и най-големият тип DNS запис, който Cloudflare кешира – относително рядко срещаният NAPTR запис. Съхранението на сурови данни във формат с променлива дължина намалява това разхищение.

100-те терабайта RAM, които Cloudflare е освободила в цялата си инфраструктура са приблизително равни на паметта в 130 от нейните сървъри от 13-то поколение, всеки от които разполага със 768GB DDR5-6400. Компанията обмисляше конфигурация от 1152GB за това поколение сървъри, но се отказа от нея, след като прецени разходите за RAM с по-голям капацитет.

Благодарение на спестената RAM памет Cloudflare планира да насочи паметта към по-големи DNS кешове. Съхраняването на повече записи локално би трябвало да подобри процента на уцелване в кеша и да намали трафика, който се изпраща към авторитетните DNS сървъри. Този проект е продължение на друга мащабна инициатива за оптимизиране на паметта, завършена миналата година, когато Cloudflare пренаписа своя слой за обработка на заявки FL2 на езика Rust. Това вероятно е добър начин да се използват ресурсите и да се извлече повече от съществуващата инфраструктура, тъй като сървърната памет става все по-скъпа.