Sidekiqジョブの同時実行の問題

Sidekiq がマルチポッドで実行されている際に問題が発生しています。

シナリオ 1:
開発環境では、レプリカは 1 つ、つまり 1 つのポッドが実行されています。ここでは問題ありません。
参考情報:
確認済み: forum_url/sidekiq/busy (プロセス 1 つ実行中)

シナリオ 2:
ステージング環境および本番環境では、レプリカが 1 つ以上 (ポッドが 1 つ以上実行中) あります。Sidekiq の同時実行性の問題 (ジョブは実行されているが、コードの実行がスキップされる) に直面しています。

参考情報:
確認済み: forum_url/sidekiq/busy (プロセス 1 つ以上実行中)。各ポッドに Sidekiq プロセスが 1 つ実行されています。

訂正してください。
複数の Sidekiq プロセスを実行しても問題ありませんか?
問題ない場合、ジョブの同時実行性の問題をどのように修正すればよいですか?

参考情報: Discourse Docker を使用しています。

従うべき適切な手順は何ですか。よろしくお願いします。

「同時実行性」の問題とは、具体的にどういう意味ですか?詳しく説明していただけますか?具体的に何が順不同で実行されているのですか?

キューに追加されたサイドキックジョブは、優先度が異なるさまざまなキューがあるため、他のジョブが先行する可能性があるため、実行順序全体を保証するものではありません。

また、「コード実行のスキップ」とはどういう意味ですか?どのコードですか?ジョブが実行されるとき、コードはスキップされません。/logs を確認して、何も壊れていないことを確認しましたか?

また、サポートされていないインストールを実行している可能性があり、それが問題の根本原因である可能性がありますのでご注意ください…

「いいね!」 4

Hi @merefield 返信ありがとうございます。

「同時実行」の問題とは、具体的にどういう意味ですか?詳しく教えていただけますか?何が順不同で実行されているのですか?

前述の通り、preprodおよび本番環境では複数のsidekiqプロセスが実行されています。

わかりません!複数のワーカープロセスがあるため、ジョブがどのプロセスを取得すべきか混乱する可能性があります。

「コード実行のスキップ」についても、詳しく教えていただけますか?どのコードが?ジョブが実行されるときにコードがスキップされることはありません。/logsを確認して、何も壊れていないことを確認しましたか?

カスタムのsidekiqジョブを実行しており、カスタムの統計情報をCSVファイルにエクスポートしています。ジョブは定期的に実行されます。時々、ファイルの書き出しが行われません。ジョブはエラーメッセージなしで実行されます。

例:

テスト目的で、このトリガーボタンをクリックするとジョブは実行されますが、ファイルの書き出しが時々行われません。

参考までに、開発環境では同じコードが実行されていますが、sidekiqワーカープロセスは1つだけです。ここでは正常に動作しています。問題は、本番/preprodで複数のsidekiqプロセスが実行されていることが原因ではないかと疑問に思っています。

/logsを確認して、何も壊れていないことを確認しましたか?

はい、ジョブに関連するエラーは発生していません。

サポートされていないインストールを実行している可能性もあります

最新のdiscourseバージョンを実行しています。

ありがとうございます。

並行処理を想定する必要があります。これはマルチスレッドのバッチシステムです。

Kubernetes を使用している人もいますが、ここではサポートされていません。

何が起こっているのかを把握するために、ジョブにログを追加する必要があると思います。

これは独自のカスタムコードですよね?

カスタムコードにはすでにログを追加しました。私たちのコードに問題はありません。

はい

はい、Kubernetesクラスターを使用しています。

質問は一つだけです!

Sidekiq は 1 つのプロセスのみを実行する必要がありますか?それとも、複数の Sidekiq プロセスを実行しても問題ありませんか?

まともなバッチシステムと同様に、複数のジョブを同時に実行できるように設計されています。そうでなければ、スケーリングできません。

ジョブを設計する際には、必ずそれを考慮してください。