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

@nestjs/bull の活用について

odanado
September 30, 2022

@nestjs/bull の活用について

odanado

September 30, 2022
Tweet

More Decks by odanado

Other Decks in Programming

Transcript

  1. 目次
 • 自己紹介
 • 今日話すこと
 • @nestjs/bull とは
 • API

    と Worker のサーバを分ける
 • ログに共通の ID を仕込む
 • bull の各種イベントをログに出力する
 2

  2. 今日話すこと
 • バックエンドの非同期処理に @nestjs/bull を使用
 • サービス運用で便利になる
 テクニックをいくつかご紹介
 • サンプルコード


    ◦ odan-sandbox/nestjs-bull-patterns-sandbox
 
 • 前提知識
 ◦ AWS Fargate にバックエンドのサーバがある
 ◦ ログの集計は CloudWatch
 3

  3. @nestjs/bull とは
 • @nestjs/bull は bull の NestJS 向けのラッパー
 •

    bull の Queue の仕組みを NestJS way な方法で扱える
 6

  4. @nestjs/bull とは
 • @nestjs/bull は bull の NestJS 向けのラッパー
 •

    bull の Queue の仕組みを NestJS way な方法で扱える
 7

  5. API と Worker のサーバを分ける
 • API と Worker のサーバは求められる
 インフラの要件が異なる


    ◦ 水平スケールの条件など
 • 2つのサーバは独立で動くように
 プロセスを分けるのが良さそう
 
 • 「nestjs bull separate process」でググると Stack Overflow でヒットする
 9

  6. API と Worker のサーバを分ける
 • registerQueueAsync
 ◦ queue.add を使うモジュールに登録する
 ◦

    API サーバで呼び出されるモジュールなど
 
 • registerProcessorAsync
 ◦ 登録された job を実行するための関数
 ◦ worker 用のプロセスを起動するモジュールに登録する
 11

  7. API と Worker のサーバを分ける
 • app.init() を実行すると
 アプリケーションが開始
 • queue

    に job が追加されると
 processor が実行されるようになる
 
 • ファイルは worker.ts で API サーバのエントリーファイル (main.ts) とは別
 ◦ 別のプロセスで実行
 ◦ コンテナを分けることも可能
 13

  8. ログに共通の ID を仕込む
 • リクエストごとに共通の ID が割り振られていると
 障害発生時の原因調査が楽
 ◦ Observability

    の向上
 
 • ID で filter するとリクエストを受け付けてから
 レスポンスを返すまでの流れを把握できる
 ◦ 外部 API の呼び出しのログ
 ◦ クエリ発行のログ
 17

  9. ログに共通の ID を仕込む
 • worker でも pino-http みたいなことがしたい
 
 •

    worker の処理が開始してから終了するまでに
 どういうログが出力されたか追跡可能だと良い
 
 18

  10. bull の各種イベントをログに出力する
 • OnQueueError
 ◦ job がエラーになったとき
 • OnQueueActive
 ◦

    job がアクティブになったとき
 • OnQueueCompleted
 ◦ job が完了したとき
 • OnQueueFailed
 ◦ job が失敗したとき
 
 • これらのイベントのタイミングでログを
 出力しておくと障害発生時に調査が楽になる
 23

  11. まとめ
 • 運用を楽にする @nestjs/bull の使い方を紹介
 ◦ API と Worker のサーバを分ける


    ◦ ログに共通の ID を仕込む
 ◦ bull の各種イベントをログに出力する
 
 • いわゆる Observability を改善すると
 障害発生時の原因調査が楽
 26