Apple завершила перенесення глобальної служби Password Monitoring із Java на Swift, досягнувши 40% приросту пропускної здатності та суттєвого зменшення використання памʼяті. Компанія повідомляє, що вдалося звільнити майже 50% попередньо виділеної місткості кластерів Kubernetes, про це йдеться в InfoQ.
У нещодавньому технічному дописі інженери Apple описали, як перепис служби дозволив обробляти мільярди запитів на день, водночас покращивши відгук системи та її зручність супроводу. До ключових причин вибору Swift віднесено менші накладні витрати памʼяті, пришвидшений старт і спрощене керування паралельністю — на відміну від подальшої оптимізації JVM.
«Swift дозволив створити компактніші, менш багатослівні та більш виразні кодові бази (скорочення обсягу коду на ≈85%), які легко читаються та акцентують на безпеці й ефективності», — зазначають інженери Apple.
Служба Password Monitoring, частина екосистеми застосунку Passwords, забезпечує безпечну перевірку збережених облікових даних користувача на предмет наявності в базах відомих витоків даних. Цей процес не розкриває жодної приватної інформації Apple і вимагає криптографічного порівняння з використанням протоколів із захистом приватності.
Служба обробляє мільярди запитів щоденно, вимагаючи високої обчислювальної потужності, мінімальної затримки та гнучкого масштабування в різних регіонах. Добова активність може коливатись до 50% між піковими навантаженнями в різних країнах. Тож система має швидко масштабуватись, підтримуючи низьку затримку.
Попередня реалізація на Java не справлялася з цими вимогами. Під час навантажень збірка сміття спричиняла непередбачувані затримки, що погіршувало стабільність. Початкові витрати на запуск JVM, завантаження класів і JIT-компіляцію уповільнювали масштабування. Крім того, слід відзначити великий обсяг оперативної памʼяті — до десятків гігабайтів на інстанс, що зменшувало ефективність інфраструктури й збільшувало витрати.
Swift, спочатку створений як мова для клієнтських застосунків на платформах Apple, нині активно використовується для серверних рішень. Інженери обрали Swift не лише через відповідність екосистемі, а й завдяки стабільній продуктивності у ресурсоємних середовищах.
Перепис було реалізовано з використанням фреймворку Vapor, доповненого власними бібліотеками для операцій з еліптичними кривими, криптографічного аудиту та проміжного програмного забезпечення, орієнтованого на специфіку Password Monitoring.
Використання детермінованого керування памʼяттю Swift (через підрахунок посилань замість GC) усунуло затримки, спричинені збиранням сміття. Це стало критичним для масштабованої служби з низькою затримкою. Після оптимізації Apple досягла латентності на рівні <1 мс для 99.9-го процентиля, а споживання памʼяті скоротилося до сотень мегабайт проти десятків гігабайтів на Java.
Час запуску теж покращився: завдяки відсутності ініціалізації JVM і розігріву JIT Swift-сервіси стартують набагато швидше, що відповідає вимогам глобального автошардування.
Ця міграція відображає ширшу тенденцію до використання продуктивніших мов у сервісах з надвисоким навантаженням. Meta активно застосовує Rust — від високопродуктивного контролю версій до блокчейн-рішень. Netflix замінив клієнт на Java на Go-проєкт Rend для роботи з Memcached. AWS дедалі більше використовує Rust у сервісах, де важлива детермінованість і ефективність використання ресурсів.
«Це не означає, що Java та інші універсальні мови зникають. Але на межі продуктивності деякі компанії вже шукають альтернативи традиційним runtime-середовищам», — підсумували автори.
Читайте на ProIT: Майбутнє Java: зміна вподобань у корпоративному секторі.
Підписуйтеся на ProIT у Telegram, щоб не пропустити жодної публікації!