Проблема с конкурентностью задач Sidekiq

У нас возникла проблема с Sidekiq, работающим в нескольких подах.

Сценарий 1:
В окружении разработки у нас один реплик, то есть запущен один под. Здесь проблем нет.

Примечание:
Проверено: forum_url/sidekiq/busy (запущен 1 процесс).

Сценарий 2:
В окружениях preprod и prod у нас несколько реплик (запущено более одного пода). Мы сталкиваемся с проблемой конкурентности Sidekiq (задача запускается, но код не выполняется).

Примечание:
Проверено: forum_url/sidekiq/busy (запущено более 1 процесса). В каждом поде запущен один процесс Sidekiq.

Подскажите:
Можно ли запускать более одного процесса Sidekiq?
Если нет, как исправить проблему с конкурентностью задач?

Примечание: Мы используем Discourse Docker.

Какие правильные шаги мне следует предпринять? Заранее спасибо.

Что именно вы имеете в виду под проблемой «конкурентности»? Не могли бы вы уточнить? Что именно происходит вне очереди?

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

Также фраза «пропуск выполнения кода». Не могли бы вы уточнить? Какой именно код? При выполнении задания код не пропускается. Проверили ли вы логи в /logs, чтобы убедиться, что ничего не прерывается?

И имейте в виду, что у вас может быть установлена неподдерживаемая версия, что может быть корнем ваших проблем…

Привет, @merefield, спасибо за ответ.

Что именно вы имеете в виду под проблемой «конкурентности»? Не могли бы вы пояснить? Что именно происходит в неправильном порядке?

Как я уже упоминал выше, в средах preprod и production запущено более одного процесса Sidekiq.

Я не уверен! Возможно, задача путается при выборе процесса, который ей следует использовать, из-за наличия нескольких рабочих процессов.

Также «пропуск выполнения кода». Не могли бы вы пояснить? Какой код? Когда задача выполняется, код не должен пропускаться. Проверили ли вы логи в /logs, чтобы убедиться, что ничего не ломается?

Мы запускаем несколько пользовательских задач Sidekiq, которые экспортируют некоторые пользовательские данные в CSV-файл. Задача выполняется периодически. Иногда экспорт файла не происходит. Задача выполняется без каких-либо сообщений об ошибках.

Например:

Для целей тестирования: если я нажимаю эту кнопку запуска, задача выполняется, но иногда экспорт файла не происходит.

К сведению: в среде Dev тот же код выполняется, но там запущен только один рабочий процесс Sidekiq. Там всё работает нормально. Я предполагаю, что проблема связана с наличием более одного процесса Sidekiq в средах prod/preprod.

Проверили ли вы логи в /logs, чтобы убедиться, что ничего не ломается?

Да, мы не получили никаких ошибок, связанных с задачей.

И имейте в виду, что у вас может быть установлена неподдерживаемая версия

Мы используем последнюю версию Discourse.

Спасибо.

Вам нужно ожидать конкурентного выполнения. Это многопоточная пакетная система.

Так же как и некоторые пользователи Kubernetes, но здесь это не поддерживается.

Думаю, вам придётся добавить логирование в вашу задачу, чтобы выяснить, что происходит.

Это ваш собственный пользовательский код, верно?

Мы уже добавили логирование в свой собственный код. Проблем в нашем коде нет.

Да.

Да, мы используем кластер Kubernetes.

Всего один вопрос!

Sidekiq должен запускать только один процесс? Или нормально запускать несколько процессов Sidekiq?

Как и любая приличная пакетная система, он предназначен для выполнения нескольких заданий одновременно, иначе он не будет масштабироваться.

Учтите это при проектировании ваших заданий.