Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sidekiq Pro導入による非同期ジョブの安定性強化

Avatar for ozin ozin
June 12, 2025

Sidekiq Pro導入による非同期ジョブの安定性強化

Avatar for ozin

ozin

June 12, 2025
Tweet

More Decks by ozin

Other Decks in Programming

Transcript

  1. 自己紹介 名前: 桶谷 迅(おじん) 経歴: 株式会社メドレー ・2019年新卒入社 ・診療所向けのクラウド型電子カルテ CLINICSの開発担当 ・直近1年でRuby2.7

    → 3.3, Rails6.0 → 8.0までアップデートしました 趣味: ・ゲーム(Switch2当たりません) ・バイク(最近は暑くてヘルメット内がサウナ状態になります) ・最近は Layered Design for Ruby on Rails Applications を読んでます
  2. Sidekiq Proとは ・Sidekiq Pro は、OSS版Sidekiqに商用機能を追加した有償版 ・OSS版とは異なりSidekiq Pro独自の機能が利用可能 ・有償版ライセンスは組織単位で付与される → 会社で契約すれば複数プロダクトに導入できる

    Sidekiq is available under the terms of the GNU LGPLv3 license. In addition to its useful functionality, buying Sidekiq Pro grants your organization a Sidekiq commercial license instead of the GNU LGPL, avoiding any legal issues your lawyers might raise. Please see the Commercial FAQ for further detail on licensing including options for distributing Sidekiq Pro with your own products. ※ Sidekiq ProのGemをダウンロードときのみ認証情報を必要とする(起動時は認証不要) https://sidekiq.org/products/pro.html から抜粋
  3. 
 概要
 主な用途 Batches 
 複数ジョブをバッチ単位で管理し、完了後に コールバックを実行できる 
 複雑なワークフロー、データ一括処理など 


    Complex Workflows 
 Batchesの応用で依存関係のある複雑なジョ ブ構成を制御
 並列+順序制御が必要な処理(例:バッチ →個別通知→集計) 
 Really Complex Workflows 
 ネストされたバッチや段階的バッチの構成方 法を解説
 多段階・多依存ジョブフローの設計 
 Reliability 
 super_fetch! や reliable_scheduler! によるジョブの 再実行・復旧
 プロセス異常終了時のジョブ損失を防止 
 Client-side Reliability 
 reliable_push! によりRedisダウン中でもジョブ送 信が可能
 一時的なRedis障害でもジョブを失わない 
 Metrics 
 StatsD/Datadogへのジョブ実行状況のメトリク ス送信
 ジョブのパフォーマンス監視、可視化 
 Expiring Jobs 
 一定時間内に実行されないジョブを破棄する 機能
 時間制約付きの処理(例:期限付き通知な ど)
 Web UI Extensions 
 Web UIでのジョブ検索・キュー操作・詳細表示 などが強化される 
 運用時のジョブ可視化・手動介入がしやす くなる
 API Extensions 
 Web UIだけでなくAPI経由でもジョブ/キュー操 作が可能
 外部からの自動化や管理ツールとの連携 が容易に

  4. super_fetch! 
 ・ジョブが完了するまでRedisから削除しない ・実行中ジョブの再実行を可能にする 
 reliable_push! 
 ・Redisとの接続が切れていてもジョブをSidekiqメモリ上に一時保持 
 ・Redisとの接続が確認できたらメモリ上にあるジョブを送信

    
 
 Web UI 
 ・Pro仕様になる(何かかっこいい)
 ・メトリクスが見れる
 ・キューの一時停止操作が可能 
 ・バッチ処理の操作も可能(使ったことないから話せません) 
 今日話すのは以下の機能について
  5. reliable_push! Sidekiqではジョブ投入時にRedisへの書き込みが行われるが、 障害時にはジョブが失われる可能性がある。 これを防ぐため、Sidekiq Proは reliable_push! による信頼性向上機能を提供している Sidekiq ・ジョブの送信(perform_asyncなど)に失敗しジョブが消失する ・送信に失敗したジョブのリトライはしない

    Sidekiq Pro ・ジョブの送信に失敗しても、一時的にクライアント側のメモリ上にジョブを保持する ・Redis復旧後に新たなジョブが追加されるタイミングをトリガーとして、  メモリ上に保持しているジョブの送信リトライを実施する Redisとの接続が切れた状態のとき