Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 512новых вакансий за сутки·54 396вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 565
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 395 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

DevOps и инфраструктура

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

Аналитика и данные

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн67
  • Ручное тестирование14

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе10 259
  • Работа в России2 963
  • Вакансии в Канаде2 034

По формату

  • Удалённые вакансии39 691
  • Релокация в США22 951
  • Гибридная работа3 633
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Ruby on RailsВсе вопросы
Ruby on RailsMiddleТеория

Как Puma concurrency, database pool и Sidekiq pool связаны между собой?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Puma workers×threads определяет нагрузку на БД: каждый поток держит одно соединение. Размер database pool должен быть ≥ Puma threads, а Sidekiq требует отдельный pool равный своему concurrency.

Формула расчёта

  • Puma: WEB_CONCURRENCY (воркеры) × RAILS_MAX_THREADS (потоки на воркер).
  • database pool в config/database.yml: должен быть равен RAILS_MAX_THREADS на процесс.
  • Sidekiq: запускается как отдельный процесс с собственным concurrency (количество потоков). Для него нужен отдельный pool того же размера.
# config/database.yml
production:
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
# config/sidekiq.yml
:concurrency: 10
# config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
  config.redis = { url: ENV["REDIS_URL"] }

  # Переопределяем pool под concurrency Sidekiq
  database_count = ActiveRecord::Base.configurations
    .find_db_config(Rails.env).configuration_hash[:pool].to_i
  sidekiq_count  = Sidekiq.options[:concurrency]

  if sidekiq_count > database_count
    ActiveRecord::Base.connection_pool.disconnect!
    config_hash = ActiveRecord::Base.configurations
      .find_db_config(Rails.env).configuration_hash
      .merge(pool: sidekiq_count + 2)
    ActiveRecord::Base.establish_connection(config_hash)
  end
end

Как Puma, database pool и Sidekiq pool связаны

Puma — многопоточный веб-сервер. Каждый живой поток Puma может одновременно выполнять запрос к БД, поэтому ActiveRecord держит пул соединений размером не меньше числа потоков.

Пример полной конфигурации

# .env / Heroku config vars
WEB_CONCURRENCY=2
RAILS_MAX_THREADS=5
# Итого Puma держит 2*5=10 соединений с БД
# Sidekiq concurrency=10 → ещё 10 соединений
# Итого PostgreSQL получит до 20 соединений

На Heroku Postgres Hobby лимит — 25 соединений. При WEB_CONCURRENCY=2, RAILS_MAX_THREADS=5 и Sidekiq concurrency=10 суммарно будет 20 соединений — это нормально. Если превысить лимит, Postgres вернёт ошибку too many connections.

PgBouncer как буфер

При большом масштабе между Rails и Postgres ставят PgBouncer в режиме transaction. Тогда каждому Rails-пулу достаточно 1–2 соединений, а PgBouncer мультиплексирует их на меньшее число реальных соединений PostgreSQL.

Подводные камни

  • Установка pool ниже RAILS_MAX_THREADS приводит к ActiveRecord::ConnectionTimeoutError при пиковой нагрузке.
  • Sidekiq запускает свой процесс независимо от Puma — забыть пересчитать pool для него очень легко.
  • При использовании preload_app: true в Puma пул открывается до форка; после форка каждый воркер должен переустановить соединения (ActiveRecord::Base.establish_connection в on_worker_boot).
  • PgBouncer в режиме session не даёт выигрыша — только transaction режим позволяет мультиплексирование.
  • Слишком большой pool держит соединения впустую, тратя память PostgreSQL (каждое соединение ~5–10 МБ).
  • ENV-переменная DATABASE_URL переопределяет database.yml целиком; явный pool: в ней имеет приоритет (?pool=10 в URL).
  • Active Job адаптеры (Delayed Job, GoodJob) тоже используют БД-соединения — их тоже нужно учитывать в суммарном лимите.
  • Puma before_fork/on_worker_boot хуки нужно прописывать явно в config/puma.rb, иначе соединения не сбрасываются при форке.

Частые вопросы на собеседовании

  • Как Rails обрабатывает защиту от CSRF?
  • Что такое паттерн MVC и как Rails его реализует?
  • Что такое migrations в Rails и как их создавать и запускать?
  • В каких backend-проектах Ruby on Rails является сильным выбором, а где лучше выбрать более простой или другой стек?

Типичные ошибки

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

Что проверяет интервьюер

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

Как вы знаете этот вопрос?

Проверить себя по теме Ruby on Rails →

Источники

  • https://guides.rubyonrails.org/8_1_release_notes.html
  • https://guides.rubyonrails.org/

Связанные темы

Ruby on Railsrisk-analysisruby-on-rails-productiontechnical-depth