Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
@nestjs/bull の活用について
Search
odanado
PRO
September 30, 2022
Programming
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
@nestjs/bull の活用について
odanado
PRO
September 30, 2022
More Decks by odanado
See All by odanado
Vitest Browser Mode への期待 / Vitest Browser Mode
odanado
PRO
3
5.5k
クラウド KMS の活用 / TOKYO BLOCKCHAIN TECH MEETUP 2022
odanado
PRO
0
1.3k
Vue.observable で状態管理 / vue-observable-state-management
odanado
PRO
4
2.1k
nuxtjs-axios-error-handling
odanado
PRO
0
410
ブロックチェーンアプリのトランザクションに対するデータ分析 / PyCon-JP-2019
odanado
PRO
0
460
スマートコントラクトに対する既知の攻撃とその対策 / bc.tokyo-21
odanado
PRO
0
290
最近のweb3.js事情 / bc.tokyo-19
odanado
PRO
2
560
YAPC::Tokyo 2019に スタッフ参加してみて / kichijojipm-18
odanado
PRO
1
2.4k
JavaScript + Dockerの知見 / knowledge-of-docker-in-javascript
odanado
PRO
9
55k
Other Decks in Programming
See All in Programming
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
140
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
150
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.7k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
360
Agentic UI
manfredsteyer
PRO
0
170
Claspは野良GASの夢をみるか
takter00
0
200
AI時代のUIはどこへ行く?その2!
yusukebe
21
7.3k
Performance Engineering for Everyone
elenatanasoiu
0
170
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.3k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
790
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
200
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
It's Worth the Effort
3n
188
29k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
How to train your dragon (web standard)
notwaldorf
97
6.7k
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Git: the NoSQL Database
bkeepers
PRO
432
67k
How STYLIGHT went responsive
nonsquared
100
6.2k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Paper Plane
katiecoart
PRO
1
51k
The Curious Case for Waylosing
cassininazir
1
390
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
Transcript
@nestjs/bull の活用について NestJS meetup Online #4 @odan3240
目次 • 自己紹介 • 今日話すこと • @nestjs/bull とは • API
と Worker のサーバを分ける • ログに共通の ID を仕込む • bull の各種イベントをログに出力する 2
今日話すこと • バックエンドの非同期処理に @nestjs/bull を使用 • サービス運用で便利になる テクニックをいくつかご紹介 • サンプルコード
◦ odan-sandbox/nestjs-bull-patterns-sandbox • 前提知識 ◦ AWS Fargate にバックエンドのサーバがある ◦ ログの集計は CloudWatch 3
@nestjs/bull とは 4
@nestjs/bull とは • https://github.com/OptimalBits/bull は Redis バックエンドの非同期キューのライブラリ 5
@nestjs/bull とは • @nestjs/bull は bull の NestJS 向けのラッパー •
bull の Queue の仕組みを NestJS way な方法で扱える 6
@nestjs/bull とは • @nestjs/bull は bull の NestJS 向けのラッパー •
bull の Queue の仕組みを NestJS way な方法で扱える 7
API と Worker のサーバを分ける 8
API と Worker のサーバを分ける • API と Worker のサーバは求められる インフラの要件が異なる
◦ 水平スケールの条件など • 2つのサーバは独立で動くように プロセスを分けるのが良さそう • 「nestjs bull separate process」でググると Stack Overflow でヒットする 9
API と Worker のサーバを分ける 10 WebhookProcessor の登録の有無
API と Worker のサーバを分ける • registerQueueAsync ◦ queue.add を使うモジュールに登録する ◦
API サーバで呼び出されるモジュールなど • registerProcessorAsync ◦ 登録された job を実行するための関数 ◦ worker 用のプロセスを起動するモジュールに登録する 11
API と Worker のサーバを分ける 12 worker の実行
API と Worker のサーバを分ける • app.init() を実行すると アプリケーションが開始 • queue
に job が追加されると processor が実行されるようになる • ファイルは worker.ts で API サーバのエントリーファイル (main.ts) とは別 ◦ 別のプロセスで実行 ◦ コンテナを分けることも可能 13
ログに共通の ID を仕込む 14
ログに共通の ID を仕込む • pino-http は express 向けのロガーライブラリ • jsonl
ベースのログを出力する 15
ログに共通の ID を仕込む • nestjs-pino は pino-http の NestJS 向けラッパー
16
ログに共通の ID を仕込む • リクエストごとに共通の ID が割り振られていると 障害発生時の原因調査が楽 ◦ Observability
の向上 • ID で filter するとリクエストを受け付けてから レスポンスを返すまでの流れを把握できる ◦ 外部 API の呼び出しのログ ◦ クエリ発行のログ 17
ログに共通の ID を仕込む • worker でも pino-http みたいなことがしたい •
worker の処理が開始してから終了するまでに どういうログが出力されたか追跡可能だと良い 18
ログに共通の ID を仕込む 19 AsyncLocalStorage を使う
ログに共通の ID を仕込む 20 BaseProcessor を継承するだけ
bull の各種イベントをログに出力する 21
bull の各種イベントをログに出力する • bull は queue に入った job の状態に 応じて様々なイベントを
emit する 22
bull の各種イベントをログに出力する • OnQueueError ◦ job がエラーになったとき • OnQueueActive ◦
job がアクティブになったとき • OnQueueCompleted ◦ job が完了したとき • OnQueueFailed ◦ job が失敗したとき • これらのイベントのタイミングでログを 出力しておくと障害発生時に調査が楽になる 23
bull の各種イベントをログに出力する 24 イベントに対してログを出す
まとめ 25
まとめ • 運用を楽にする @nestjs/bull の使い方を紹介 ◦ API と Worker のサーバを分ける
◦ ログに共通の ID を仕込む ◦ bull の各種イベントをログに出力する • いわゆる Observability を改善すると 障害発生時の原因調査が楽 26