Sidekiqってどんなキック?
こんにちは、サーバーサイドエンジニアの寺井(@krpk1900_dev)です。
4ヶ月前にiCAREに入社した当時、会話の中でSidekiqという単語を初めて聞いて何のことか分からず、一体どんなキックなんだろうと思っていました。
そこで、今日は初心者の方でもイメージしやすいようにSidekiqについてかなり噛み砕いて書いていきたいと思います。
Sidekiqとは?
Sidekiqとは、Rubyとは異なるプロセスをバックグラウンドで実行するためのキューイングバックエンドです。
iCAREでは、メール送信処理やCSVファイルのアップロードなどを非同期的に実行するために使っています。
https://github.com/mperham/sidekiq(公式リポジトリ)
すごく簡単に言うと、メール送信など時間のかかるタスクを「後で処理するリスト」に入れておき、他のタスクを実行しながら「後で処理するリスト」のタスクも並列で行っていく感じです。
例えばプリンタで100ページ分印刷したいときに、印刷が終わるまでブラウザで次のページに行けなかったりキーボードで文字が入力できなかったらすごく不便ですよね。
コンピュータが処理を行う速度と紙に印刷する速度は、印刷する速度の方が圧倒的に遅いので、100ページ分印刷する処理は「後で処理するリスト」に入れておき、バックグラウンドで並列して実行していきます。
「後で処理するリスト」にはRedisのキューがよく使われます。これから処理していく予定のJobのデータをRedisに永続化することで、Railsプロセスが落ちたとしてもエンキューされたJobのデータが失われることはありません。
Railsサーバとredisとの関係
RailsサーバとRedisとSidekiqの関係を簡単に図で表すと上のようになると思います。
Sidekiqを使ってバックグラウンドで非同期的にJobを処理するためには、Railsサーバの他にRedisとSidekiqを起動しておく必要があります。
Railsサーバの処理の中で「後で処理するリスト」に任せたいJobがあれば、Redisに永続化しているキューにJobを追加(エンキュー)し、SidekiqがJobを取り出して(デキュー)実行していきます。
ちなみに、これらのキュー操作を様々な方法で実行するためにインターフェースなどを定めてくれているフレームワークがActive Jobとなります。
Active JobはキューのアダプタとしてSidekiqをサポートしているため、iCAREのようにActive Job + Sidekiq + Redis でバックグラウンドでの非同期処理を実現している企業も多いのではないでしょうか?
おわりに
記事を書きながら、Sidekiqの処理については頭の中で整理できましたが、Sidekiqの由来については解明できずに終わってしまいました。
Sideの方は「横で実行しておく」のような意味から来ていると思うのですが、kiqの方はどこから来ているのか気になったままなので、ご存知の方はぜひ教えていただけると嬉しいです!
※この記事は以下のサイトを参考にさせていただきました。
http://tech-blog.tsukaby.com/archives/1519
https://serip39.hatenablog.com/entry/2020/12/28/235800
https://e-words.jp/w/%E3%82%AD%E3%83%A5%E3%83%BC.html