Розробники TikTok зекономили компанії $300 000 на рік: просто переписали код Go API на Rust
Розробники TikTok переписали критично важливі Go API на Rust, що призвело до подвійного збільшення продуктивності та економії для компанії $300 тисяч на рік. Про це в своєму LinkedIn пише Tech Lead Amazon Анімеш Гайтонде. Автор коментує пост стажера TikTok Xiaoyun Wu, який той виклав у своєму блозі.
Довгий час платежі TikTok базувались на мові Go через її простоту, паралельність та продуктивність. Однак врешті трафік API, який стосується отримання балансу користувача та статистики, досяг 100 тисяч запитів на секунду. Завантаження процесора різко зросло, і це стало критичним вузьким місцем, яке могло б уповільнити продуктивність.
Центральний процесор став вузьким місцем через:
- Інтенсивну серіалізацію/десериалізацію.
- Паузи при зборі сміття в GoLang.
- Надмірних витрат під час виконання GoLang через неефективний розподіл пам’яті.
Команда TikTok вирішила поекспериментувати з Rust, оскільки подальша оптимізація коду Go дала б мінімальні переваги. Вони переписали лише критично важливі API, пов’язані з процесором, на Rust, залишивши інші API, написані на Go, недоторканими.
Міграція на Rust призвела до таких покращень:
- Зниження навантаження процесора на 33%.
- На 72% менше використання пам’яті.
- На 76% менше затримки при відповіді системи.
Ось як Rust вирішив проблеми, які були присутні в Go:
- Нульове збирання сміття — Rust забезпечує детерміноване володіння та терміни життя для об’єктів.
- Структури даних Copy-on-Write дозволяють уникнути непотрібних копій, зменшуючи обсяг пам’яті.
- Абстракції з нульовою вартістю — на відміну від Golang, немає додаткових накладних витрат під час виконання остаточного скомпільованого коду, що економить 10 циклів процесора.
Команда також виконала структуровану міграцію з Go на Rust, яка включала запуск нового сервісу в тіньовому режимі та гарантію 100% коректності.
Одним із вражаючих аспектів цього експерименту є переписування лише критичних частин системи на Rust, а не міграція всього сервісу. Це забезпечує правильний баланс між продуктивністю та додатковими накладними витратами на обслуговування.
 
        
        
    












 
    
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: