Уведомления
Очистить всё

Заявка: полгода на Solid Queue вместо Sidekiq, что вышло

5 Сообщения
4 Пользователи
24 Реакции
281 Просмотры
pavel_1988
Сообщения: 8
Автор темы
Разобрался с блоками разработчик
Присоединился: 3 года назад
[#117]

Заявка на апрельскую встречу, 15 минут. Осенью мы перевели фоновые задачи с Sidekiq на Solid Queue: Rails 8.0, PostgreSQL, около 300 тысяч джоб в сутки. Главной причиной была не скорость, а желание убрать Redis, он у нас жил только ради очереди. Расскажу честно, что получилось и где споткнулись. Сначала держали очередь в основной базе, радовались, что джоба ставится в той же транзакции, что и запись. Потом поллинг начал заметно грузить базу, вынесли очередь в отдельную, как по умолчанию в Rails 8, и это преимущество потеряли. Пара задач так и осталась бы на Sidekiq, если бы не limits_concurrency. Конфиг сейчас такой:

production:
  dispatchers:
    - polling_interval: 1
      batch_size: 500
  workers:
    - queues: [critical, default]
      threads: 5
      processes: 3
      polling_interval: 0.1
    - queues: [reports]
      threads: 2
      processes: 1

Какие вопросы задать себе заранее, чтобы закрыть их в докладе?


4 ответа
GalinaKorneva
Сообщения: 30
Читает чужие PR бэкенд-разработчица
Присоединился: 4 года назад

Спрошу сейчас то же, что спрошу в зале: как у вас с уникальностью джоб и ретраями платёжных задач? В Sidekiq это у многих держится на сторонних gem'ах, и при переезде это теряют первым. И сколько стало соединений к базе очереди.


Ответ
1 ответ
pavel_1988
Присоединился: 3 года назад

Разобрался с блоками разработчик
Сообщения: 8

Ретраи через retry_on в Active Job с растущей задержкой, уникальность частично через limits_concurrency, частично ключом идемпотентности внутри задачи:

class ChargeJob < ApplicationJob
  limits_concurrency to: 1, key: ->(payment) { payment.id }
  retry_on Payments::GatewayError, wait: :polynomially_longer, attempts: 8

  def perform(payment)
    Payments::Charge.call(payment)
  end
end

Соединений к базе очереди в пике около 40, у неё свой пул.


Ответ
TimurK62
Сообщения: 31
Читает чужие PR бэкенд-разработчик
Присоединился: 3 года назад

Принеси график нагрузки на базу до и после выноса очереди. Без него разговор про поллинг будет на ощущениях


Ответ
viktor.petrov
Сообщения: 26
Читает чужие PR бэкенд-разработчик
Присоединился: 4 года назад

Записал на 23 апреля, первым докладом


Ответ