Масштабирование Rails-приложений [Юрий Самойленко] [Thinknetica]

Складчина: Масштабирование Rails-приложений [Юрий Самойленко] [Thinknetica]

upload_2025-3-25_13-20-43.png
Этот воркшоп для вас, если вы:

  • Хотите быть готовым к горизонтальному масштабированию и сложным архитектурным вызовам.
  • Стремитесь эффективно использовать ресурсы и обеспечить стабильную работу системы под нагрузкой
  • Сталкивались с проблемами производительности и стремитесь лучше понимать, как их предсказывать и устранять
  • Хотите быть готовым к нетривиальным и неочевидным проблемам, возникающим при масштабировании

День 1. Стратегии масштабирования Rails-приложений
Изучим общие подходы к масштабированию, параллельной обработке данных, асинхронности и рассмотрим влияние на производительность и потребление ресурсов.

Результат

  • Сможете выбрать конфигурацию web-сервера, подходящую именно под вашу нагрузку
  • Определитесь со стратегией масштабирования: потоки, процессы или файберы
  • Оптимизируете потребление памяти при масштабировании

Содержание

  • Проблемы и подходы к масштабированию
  • Введение в процессы/потоки: IO-bound и CPU-bound нагрузки
  • Архитектура веб-серверов Puma (Multi-threaded, Multi-process, Standalone), Passenger Master Process
  • Асинхронная обработка запросов: throw :async, Rack Socket Hijacking
  • Потребление памяти: Copy On Write, Garbage collection, фрагментация памяти

День 2. Проблемы при масштабировании Ruby-приложений
Разберёмся с проблемами общих данных при масштабировании и вариантами их решения. На примерах рассмотрим техники синхронизации данных и обеспечения одновременного доступа. Научимся настраивать мониторинг системы для повышения Observability

Результат

  • Научитесь заранее решать типовые проблемы и проблемы с общим доступом к данным
  • Сможете организовать мониторинг и всегда быть в курсе происходящего в системе
  • Поймете, как устроено взаимодействие экземпляров приложения между собой

Содержание

  • Кеширование: KeyDd/Redis
  • Синхронизация: Leader Election и Distributed Locking, Consul/Redlock
  • Работа с данными: Posix-File, S3/MinOO
  • Мониторинг: Victoria/Prometheus, dynamic targets
  • Service Discovery: consul, traefik

День 3. Разделение приложений на компоненты и налаживание взаимодействия

Разберёмся, из каких функциональных частей состоит Rails-приложение, как они взаимодействуют и масштабируются, какое место занимают в выполнении бизнес-функций.

Результат

  • Сможете разделять приложение на части с точки зрения бизнес-функций
  • Научитесь выделять и масштабировать отдельно только нагруженные компоненты
  • Повысите качество обслуживания приложения на протяжении его жизненного цикла

Содержание

  • Проблемы и выгоды единой кодовой базы
  • HTTP-компонент. Rails
  • JOBS-компонент. Solid Queue, Sidekiq, Delayed Job
  • Cron/Scheduler-компонент, Rufus Scheduler
  • Вспомогательные компоненты: AMQP-listener, KAFKA-listener
  • Мониторинг компонентов приложений
  • Service Discovery компонентов приложений

Этот воркшоп поможет:

  • Настроить сервер под реальную нагрузку

Выберете подходящую конфигурацию веб-сервера, определитесь со стратегией масштабирования и сократите потребление памяти.

  • Избежать типовых проблем масштабирования в продакшене

Научитесь организовывать доступ к данным, выстраивать мониторинг и понимать взаимодействие экземпляров приложения.

  • Масштабировать приложение без лишних затрат

Разделите приложение на части по бизнес-функциям и оптимизируйте нагруженные компоненты.

  • Обеспечить стабильность и высокую доступность

Улучшите поддержку приложения на всех этапах жизненного цикла и добьётесь надежной и предсказуемой работы приложения.

Автор воркшопа — Юрий Самойленко

Архитекторв и Техлид в RNDSOFT