Meteor 3.5 дозволяє розробникам відмовитися від SockJS на користь uWebSockets.js за допомогою однієї змінної оточення, що обіцяє помітно нижчі витрати CPU, RAM та збору сміття (garbage collection) для застосунків, які значною мірою покладаються на виклики методів.
Чому це важливо
З моменту свого запуску Meteor спрямовував кожне повідомлення DDP (Distributed Data Protocol) через SockJS — резервний варіант на JavaScript, який працює всюди, але ніколи не був розроблений для максимальної швидкості. Новий реліз відокремлює транспортний рівень, надаючи точку підключення, яка приймає будь-яку реалізацію WebSocket, що відповідає вимогам DDP. Встановлення DDP_TRANSPORT=uws під час запуску замінює стандартний варіант на uWebSockets.js — сервер на базі C/C++, відомий своєю високою пропускною здатністю.
Аспект продуктивності
Бенчмарки, що постачаються з релізом, показують:
- Використання CPU знижено на 9%
- Споживання RAM знижено на 11%
- Час паузи збору сміття (garbage collection) скорочено на 26%
- Пропускна здатність зросла в 1,6 раза у мікробенчмарках
Ці переваги стають помітними, коли застосунок виконує багато викликів методів у стилі RPC. Сам транспорт стає «вузьким місцем» лише після того, як бізнес-логіка застосунку була оптимізована, тому перехід може безпосередньо призвести до зниження витрат на сервери.
Як спробувати вже сьогодні
Окремий бінарний файл не потрібен — лише Meteor 3.5. Запустіть застосунок за допомогою:
DDP_TRANSPORT=uws meteor run
Сервер uWebSockets.js слухає власний порт (за замовчуванням 5001). Якщо кілька екземплярів Meteor працюють на одному хості, кожному потрібно призначити окремий uws.port через METEOR_SETTINGS, щоб уникнути конфліктів.
Кому це вигідно, а хто не помітить великої різниці
- Навантаження з великою кількістю RPC — сервіси, які викликають багато методів за один запит, зможуть заощадити цикли CPU та пам'ять, що полегшить масштабування.
- Застосунки, орієнтовані на Pub/Sub — більша частина затримки у патернах publish/subscribe виникає через розрахунки різниці даних (data-diff), а не через транспорт, тому приріст швидкості буде скромним.
Зміна є добровільною (opt-in); SockJS залишається варіантом за замовчуванням, зберігаючи сумісність із середовищами, де нативні WebSockets недоступні.
Компроміси та застереження
Перехід на інший транспорт додає невеликий операційний крок: керування додатковим портом і забезпечення того, щоб він не конфліктував з іншими сервісами. Оскільки uWebSockets.js є нативним модулем, він потребує звичайних роздумів щодо бінарних залежностей — на хості розгортання мають бути інструменти збірки, а будь-які майбутні оновлення бібліотеки потрібно буде тестувати на відповідність коду застосунку.
Що далі для транспортного рівня Meteor
Створивши чітку межу, Meteor тепер запрошує спільноту експериментувати з альтернативними транспортами — чи то для спеціалізованих вимог безпеки, чи то для розширення протоколів, чи для подальшого налаштування продуктивності. Те, як швидко з'являтимуться сторонні реалізації, покаже, чи стане ця модульна модель постійною частиною архітектури Meteor.
Підсумок: Модульний DDP-транспорт у Meteor 3.5 дозволяє замінити застарілий стек SockJS на uWebSockets.js однією командою, забезпечуючи до 1,6-кратного зростання пропускної здатності та помітну економію ресурсів для інтенсивних RPC-застосунків, зберігаючи при цьому існуюче налаштування без змін для навантажень, які не потребують такого прискорення.
