Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

28.12.2022

Покращення для gRPC сервера на Ruby - Gruf

🎄🎅🎁 Сьогодні день покращення нашого gRPC сервера. Саме те, чим варто займатися в новорічний сезон — дрібна задача, на яку зазвичай не вистачає пріоритету.

gRPC сервер, як я вже писав, на gruf. Перше, що бісило — це кепська робота перезавантаження коду у режимі розробки. Причина — відсутність засобів безпеки при паралелізації. Якщо клієнт робив паралельно декілька запитів, то кожний запит окремо викликав перезавантаження, та це призводило до помилок на кшталт “Невизначений клас”. При чому якийсь мьютекс у коді був присутній. Тільки він не покривав весь код, що перезавантажується. Я взяв інструкцію по конкуренції Zeitwerk (Zeitwerk - то гем, що забезпечує перезавантаження коду як для Gruf, так і для Rails.) та зробив по неї. Вийшов отакий святковий PR.

Далі, оснастив сервер інтеграцією з Sentry. Ми її втратили при переході з самописного сервера на Gruf. Та якось далі жили без неї, бо помилки все одно реєструвались з клієнта. Але це було незручно — помилки втрачали свій стектрейс та контекст. Нарешті, приєднав офіційну інтеграцію gruf-sentry.

І третє — увімкнув також моніторинг швидкодії також від Sentry. Чому не New Relic? Тому, що у нас він на власному сервері, тож це виходить “безплатно”. New Relic на наших обсягах виходить дорого. Та й моніторинг потрібен суто базовий.