Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!19.02.2024
Вебсервери на Ruby: чим вони відрізняються
Хотів в завершення теми про рівночасне програмування пройтися по серверах на Ruby та порівняти їх. Виявилось… що тема трохи застаріла. Памʼятаю часи, коли вибір сервера був гарячою темою — років з 10, а то й 15 тому. Але наразі все стабільно (та й Ruby перестав бути такою гарячою темою.) Отже.
-
Puma на цей час еталонний вибір. Заслужила місце в стандартному пакеті Rails, а це багато значить. Puma є як багатопотоковою, так і багатопроцесовою бібліотекою, тож все, про що я писав останні дні, до неї застосовується.
-
Webrick - офіційний сервер Ruby - є однопотоковим. Через це обробляє запити лише по черзі — навіть поки один з запитів чекає, скажімо, на інформацію з бази, у Webrick немає можливості взяти інший — тому процесор просто марнує час. Перевага Webrick у реалізації чисто на Ruby, а також у модульності: я використовував Webrick для інтеграції у застосунок проксі-сервера.
-
Unicorn колись був вибором №1, бо першим навчився робити декілька процесів та керувати ними — таким чином досягнувши паралелізму. Але всередині процесу був тільки один потік, тому Puma обʼєктивно виграє у швидкодії. Перевагою Unicorn є надійність, причому реальна: навіть критична помилка в коді призведе до відмови тільки в конкретному запиті, далі процес буде перезапущений. А в Puma якщо один з потоків ламається, наприклад, зависає (а таке трапляється й досі!) - то всі інші запити з цього процесу теж ламаються. Проте наразі Unicorn не підтримується, а в Puma за бажанням можна обмежити 1 потік на процес.
-
Thin - відрізняється використанням EventMachine - однопотокової бібліотеки для обробки вводу/виводу. За архітектурою вона схожа на JavaScript (який теж однопотоковий). Але, на відміну від JavaScript, для отримання переваг рівночасності наш код повинний був використовувати бібліотеки вводу/виводу з підтримкою EventMachine. В контексті вебсервера такий підхід втратив популярність, проте є багато популярних бібліотек, які й досі використовують EventMachine.
-
Практично у всіх серверів є парсер на C. Ну, бо так обʼєктивно швидше. JIT це гарно, але надійніше один раз переписати вузьке місце, ніж сподіватись на вдачу. Але, прошу помітити, всього на С ніхто не переписує.
НДНЧ: Puma - це все, що тобі потрібно.