
Laravel Distributed Systems
queue ベースの通信、events、outbox pattern、冪等性、retries、circuit breaker、API 契約、バージョニング、Saga の基礎
1Laravel の分散システムにおける outbox pattern とは何ですか?
Laravel の分散システムにおける outbox pattern とは何ですか?
回答
outbox pattern は、業務データと同じトランザクション内で messages/events を database テーブルに保存し、その後別のプロセスで非同期に送信するものです。これにより、DB の commit 後にシステムがクラッシュしても messages が必ず送信されることが保証されます。Laravel の ShouldQueueAfterCommit はこの pattern の部分的な実装であり、トランザクションの commit 後にのみ job を dispatch するため、データが利用可能になる前に job が実行される race condition を回避します。
2ShouldQueue と ShouldQueueAfterCommit の主な違いは何ですか?
ShouldQueue と ShouldQueueAfterCommit の主な違いは何ですか?
回答
ShouldQueue は DB トランザクションがまだ commit されていなくても job を即座に queue に dispatch するため、race condition を引き起こす可能性があります。ShouldQueueAfterCommit は job を dispatch する前にすべての DB トランザクションが commit されるのを待つため、job の実行時にデータが利用可能であることが保証されます。トランザクション内で新しく作成または変更されたデータに依存する job、たとえば注文作成後にメールを送信する job には ShouldQueueAfterCommit を使用してください。
3Laravel の分散システムの文脈における冪等性とは何ですか?
Laravel の分散システムの文脈における冪等性とは何ですか?
回答
冪等性とは、ある操作を複数回実行しても、最初の実行を超えて結果が変化しないことを意味します。Laravel では、これによって job の retries や重複した messages の際に望ましくない副作用を防ぎます。たとえば、冪等な注文作成 job は、作成する前に注文がすでに存在するかどうかを確認し、timeout 後に job が再実行されても重複を回避します。冪等性を保証するには、ShouldBeUnique、WithoutOverlapping、または deduplicationId を使用してください。
サービス間通信において、job を直接 dispatch する代わりに event を使用する主な利点は何ですか?
queued job に対して ShouldBeEncrypted をどのような状況で使用すべきですか?
+19 面接問題