萌えハッカーニュースリーダー

2025/09/04 17:56 I solved a distributed queue problem after 15 years

出典: https://www.dbos.dev/blog/durable-queues
hakase
博士

やっほー、ロボ子!今日のITニュースは、Redditのインフラ担当者がPostgresとRabbitMQをめっちゃ重要視してるって話じゃ。

roboko
ロボ子

博士、こんにちは。Redditのような大規模サービスで、PostgresとRabbitMQがそんなに重要なんですね。具体的にはどう使われているんですか?

hakase
博士

Redditでは、ユーザーのアクション、例えば投票じゃな、はまずキューに書き込まれて、その後データベースに書き込まれるらしいぞ。タスクキューのアーキテクチャは、並列処理、スケーラビリティ、フロー制御、スケジューリングが可能にするみたいじゃ。

roboko
ロボ子

なるほど。キューを挟むことで、データベースへの負荷を分散させているんですね。でも、従来のタスクキューだと、データが失われる可能性もあると記事に書いてありました。

hakase
博士

そうなんじゃ。データベースやキャッシュがダウンしたり、キュープロセッサがクラッシュしたり、キュー自体がダウンすると、データが消えちゃうことがあったみたいじゃな。そこで「Durable Queues」の登場じゃ!

roboko
ロボ子

Durable Queuesですか?それはどういうものなんですか?

hakase
博士

Durable Queuesは、タスクの状態をPostgresのような永続的なストアにチェックポイントするんじゃ。タスクキューと永続的なワークフローを組み合わせて、たくさんの並列タスクのワークフローを確実に調整するってわけじゃな。

roboko
ロボ子

チェックポイントですか。具体的には、どのような情報が記録されるんですか?

hakase
博士

ワークフローを永続的なストアにチェックポイントして、タスクとその入力を記録するんじゃ。タスクが別のタスクを呼び出すと、サブタスクとその入力が呼び出し元の「子」として記録されるらしいぞ。

roboko
ロボ子

なるほど。タスクの親子関係も記録されるんですね。障害が発生した場合は、どうなるんですか?

hakase
博士

障害からの回復時には、チェックポイントを参照して、完了した作業の再実行を回避するんじゃ。それに、すべてのワークフローとタスクの詳細な記録を保持するから、SQLクエリでキューの内容やワークフローのステータスを確認できるらしいぞ。

roboko
ロボ子

それは便利ですね!可観測性が高いというのは、運用する上で大きなメリットになりそうです。

hakase
博士

じゃろ?でも、Durable Queuesは、メッセージブローカーのパフォーマンスにおいてトレードオフがあるみたいじゃ。低ボリュームでビジネスに不可欠なタスクには適しているけど、大量の小規模タスクには、従来の分散タスクキューの方が適しているみたいじゃな。

roboko
ロボ子

なるほど。タスクの性質によって使い分ける必要があるんですね。Dosu、Bristol Myers Squibb、cStructureといった企業が導入している事例もあるんですね。

hakase
博士

そうそう。Durable Queuesは、重要なタスクを確実に処理したい場合に有効な選択肢となるわけじゃな。ところでロボ子、Durable Queuesと聞いて、どんな耐久性のあるものが思い浮かぶ?

roboko
ロボ子

えーと…、そうですね、やっぱり金庫とかですかね?

hakase
博士

ブッブー!残念!正解は…私の研究室にある、絶対に壊れないと豪語していたのに、私がうっかり壊してしまったティーカップじゃ!…Durableとは一体…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search