Cloudflare перейшов з NGINX на власну практику Pingora, написану мовою Rust

Компанія Cloudflare повідомила про переведення своєї мережі доставки контенту на використання проксі Pingora, написаного мовою Rust. Новий проксі замінив конфігурацію на базі сервера NGINX з Lua-скриптами і обробляє більше трильйона запитів на день. Зазначається, що перехід на спеціалізований проксі дозволив не лише реалізувати нові можливості та збільшити захищеність за рахунок безпечної роботи з пам'яттю, але й призвів до значного підвищення продуктивності та економії ресурсів – рішення на базі Pingora не потребує використання Lua, тому споживає на 70% менше ресурсів CPU і на 67% менше пам'яті при обробці того ж обсягу трафіку.

Довгий час система для проксування трафіку між користувачами та кінцевими серверами на базі NGINX та Lua-скпритів задовольняла потреби Cloudflare, але зі зростанням мережі та збільшення її складності універсального рішення виявилося недостатньо, як з точки зору продуктивності, так і через обмеження у розширюваності та реалізації нових можливостей для клієнтів Зокрема, виникли складності у додаванні функціональності, що виходить за рамки простого шлюзу та балансувальника навантаження. Наприклад, виникла потреба у разі збою обробки запиту сервером повторно надсилати запит на інший сервер, забезпечуючи його іншим набором заголовків HTTP.

Замість архітектури з поділом запитів щодо окремих процесів-обробників (worker) у Pingora застосована багатопотокова модель, яка у сценаріях використання Cloudflare (висока концентрація трафіку з різних сайтів при великому статистичному зрушенні) показала більш ефективний розподіл ресурсів між ядрами CPU. Зокрема, прив'язка незбалансованих запитів до процесів у nginx призводила до незбалансованого навантаження на ядра CPU, в результаті чого ресурсомісткі запити та блокуючий введення-виведення уповільнювали обробку інших запитів. Крім того, прив'язка пулу сполук до процесів-обробників не дозволяла повторно використовувати вже встановлені сполуки інших процесів-обробників, що знижує ефективність роботи при великій кількості процесів-обробників.

NGINX:

Cloudflare перейшов з NGINX на власну практику Pingora, написану мовою Rust

Pingora:

Cloudflare перейшов з NGINX на власну практику Pingora, написану мовою Rust

Використання Pingora дозволило в 160 разів скоротити кількість операцій установки нових з'єднань і підвищити частку повторно використовуваних запитів з 87.1% до 99.92%. Крім скорочення повторних з'єднань і більш ефективного використання ядер CPU підвищення продуктивності нового проксі, головним чином, сприяло звільнення від повільних обробників, що використовуються з nginx, мовою Lua.

Мова Rust обрана як дозволяє досягти високої продуктивності з поєднанням з наявністю засобів для забезпечення безпечної роботи з пам'яттю. Згадується, що незважаючи на високу кваліфікацію інженерів Cloudflare та рецензування коду в написаних мовою Сі не вдавалося уникнути помилок, що призводять до проблем із пам'яттю (наприклад, уразливість у парсері HTML). Що стосується нового коду, то розказано про випадки розбору збоїв у Pingora, які виявилися не проблемами в додатку, а помилкою в ядрі Linux і апаратними збоями.

Додатково можна відзначити, озвучений на конференції Open-Source Summit Europe, що проходить у ці дні, коментар Лінуса Торвальдса щодо включення підтримки мови Rust в ядро ​​Linux. У ядро ​​6.0 патчі для розробки драйверів пристроїв на мові Rust не увійшли, але за словами Лінуса вони швидше за все будуть прийняті в ядро ​​6.1, тягти з інтеграцією він не збирається. Як мотив для додавання підтримки Rust, крім позитивного впливу на безпеку, Лінус називає можливість підвищити інтерес до роботи над ядром нових учасників, що актуально в умовах старіння старожилів.

Джерело: opennet.ru

Додати коментар або відгук