単一の更新キュー

呼び出し側をブロックせずに順序を維持するために、単一のスレッドを使用して非同期にリクエストを処理します。

問題

状態が複数の同時クライアントによって更新される必要がある場合、その状態は一度に 1 つずつ変更して安全に更新する必要があります。先行書き込みログパターンの例を検討します。複数の同時クライアントが書き込みを試行していても、エントリは一度に 1 つずつ処理する必要があります。一般に、ロックを使用して同時変更から保護します。ただし、実行されているタスクがファイルへの書き込みのように時間がかかる場合は、タスクが完了するまで他のすべての呼び出しスレッドをブロックすると、システム全体のスループットとレイテンシーに深刻な影響を与える可能性があります。一回ごとの実行を依然として保証しながら、計算リソースを効果的に使用することが重要です。

解決策

ワーキューと、キューから作業する単一のスレッドを実装します。複数の同時クライアントがキューに状態変更を送信できます。ただし、単一のスレッドが状態変更に対して処理を行います。これは、Golang などの言語ではゴルーチンとチャネルを使用して自然に実装できます。

詳細については、oreilly.com のオンライン電子書籍の第 13 章を参照してください。

このパターンは分散システムのパターンの一部です。

2023 年 11 月 23 日