📂 Категория: performance

Ruby, RabbitMQ или Kafka — что выбрать и зачем?

Введение: зачем нам эти очереди?

Pain: · ⏱ ~9 мин. чтения

Ruby 3.0 → 3.4: что добавили, что убрали, что изменилось

Ruby продолжает развиваться, предлагая разработчикам новые инструменты для работы с параллелизмом, улучшенную производительность и удобные синтаксические конструкции. В этой статье мы рассмотрим ключевые изменения в версиях Ruby 3.x, которые помогут вам эффективнее использовать язык в проектах с Rails, PostgreSQL и современными DevOps-практиками.

Pain: 🐣🧑‍💻🔧 · ⏱ ~7 мин. чтения

Ruby: Ractor и Ruby 3.4 — наконец-то настоящая параллельность?

Ruby 3+ представил революционный механизм Ractor, который наконец-то позволяет достичь настоящей параллельности в MRI Ruby, обходя ограничения GIL. В статье разберём, как работают Ractor’ы в Ruby 3.4, какие объекты можно передавать между ними и как избежать типичных ошибок при работе с этим мощным инструментом для CPU-bound задач.

Pain: 🐣🧑‍💻🔧🧠 · ⏱ ~10 мин. чтения

YJIT и производительность Ruby 3+: стоит ли того?

YJIT — это как турбонаддув для вашего Ruby-приложения. Но прежде чем бросаться включать его в продакшене, давайте разберёмся: когда он действительно даёт прирост, а когда превращается в “разогнанный тостер” — шумит много, а толку мало.

Pain: 🐣🧑‍💻🔧 · ⏱ ~11 мин. чтения

Очередь или поток? Kafka vs RabbitMQ с практическим уклоном

Выбор между очередями и потоками сообщений — это как выбор между почтальоном и радиостанцией: один гарантированно доставит письмо, другой мгновенно разошлёт новости тысячам. В статье разберём Kafka и RabbitMQ на примерах из Rails-приложений, покажем, как избежать «брокерного ада» и не перегрузить PostgreSQL фоновыми задачами.

Pain: 🐣🧑‍💻🔧 · ⏱ ~12 мин. чтения

Debug, Benchmark, StackProf — как Ruby помогает себе сам

Вы когда-нибудь видели, как разработчик пытается отладить код, добавляя puts на каждом шаге? Это как искать чёрную кошку в тёмной комнате, особенно если кошка — это утечка памяти в продакшене. К счастью, Ruby даёт нам целый арсенал инструментов для самодиагностики. Сегодня разберём три кита: Debug, Benchmark и StackProf — и научимся не тыкать в код наугад.

Pain: 🐣🧑‍💻🔧 · ⏱ ~12 мин. чтения

Prometheus и Grafana: метрики, дашборды и здравый смысл

Мониторинг приложений — это не роскошь, а необходимость. Prometheus и Grafana стали стандартом де-факто для сбора метрик и их визуализации. Но как избежать типичных ошибок и не превратить дашборды в “стену ужаса”? Разберём на примерах Ruby-приложений.

Pain: 🐣🧑‍💻🔧🧠 · ⏱ ~11 мин. чтения

Ruby: fork, Parallel, Ractor и async — когда GIL не пройдёт

Ruby предлагает несколько подходов для достижения параллельности, несмотря на ограничения GIL. В этой статье разберёмся, как использовать процессы через fork, асинхронные библиотеки и новые возможности вроде Ractor, а также когда стоит перейти на альтернативные реализации Ruby вроде JRuby.

Pain: 🐣🧑‍💻🔧 · ⏱ ~10 мин. чтения

Ruby: Многопоточность, которой нет — потоки, GIL и Mutex

Ruby — мощный язык с богатыми возможностями для работы с потоками, но его реализация в MRI имеет важную особенность: Global Interpreter Lock (GIL), который ограничивает параллельное выполнение Ruby-кода. Это делает потоки полезными для I/O-операций, таких как работа с сетью или базой данных, но не даёт преимуществ в CPU-задачах. В статье разберёмся, как эффективно использовать многопоточность в Ruby, какие подводные камни ждут разработчиков и какие альтернативы существуют для настоящего параллелизма.

Pain: 🐣🧑‍💻🔧 · ⏱ ~10 мин. чтения