カテゴリ
信頼性・非同期・リアルタイム処理の設計ガイド
分散システムの信頼性は「少なくとも1回」「順不同」「失敗する」を前提に設計してこそ守れます。業務更新とイベントを同じトランザクションに記録し(Outbox)、複数workerでも二重に配送しない所有権を持たせ(Dispatcher)、受信は記録と業務更新を1コミットにまとめ(Inbox)、存在しない行に対する競合はAdvisory Lockで直列化し、それでも残るズレは照合で収束させる(Reconciliation)。『Exactly-once』を配信・処理・効果に分けて考え、冪等キーとリトライで業務効果を1回に収束させる——イベント駆動と非同期の回復性を扱います。
全 10 記事
基礎ガイド
基礎ガイド(まずはここから)
トランザクショナル・アウトボックスパターン:DB更新とイベント発行を原子的にし、取りこぼし・二重発行を断つ
分散システムの二重書き込み問題(dual-write)を解くトランザクショナル・アウトボックスパターンの実装ガイド。業務更新と同一トランザクションでoutboxに書き、リレー(ポーリング/CDC)で確実に発行、downstreamは冪等に。順序保証・at-least-once・整合化(reconciliation)までを実コードで解説します。
関連する実践記事
- 信頼性アーキテクチャ設計決済AWSPython
Exactly-onceは何を保証するのか:配信・処理・効果を区別し、冪等キーとReconciliationで外部APIの副作用を1回に収束させる
Exactly-onceは「存在しない」のでも「どこでも使える」のでもなく、保証する境界と対象(配信・処理・効果)で意味が変わる。Kafka transactions・SQS FIFO・DBトランザクションが何を保証し、PostgreSQL・Stripe・Lambdaをまたぐ業務効果では何が保証されないのかを一次資料で整理し、応答が消えた外部API呼び出しを冪等キーと照合で1回に収束させる実装を、検証済みのPythonコードで示します。
23分 - PostgreSQL信頼性アーキテクチャ設計Pythonデータベース
Outbox Dispatcherを複数workerで安全に動かす:FOR UPDATE SKIP LOCKEDだけでは足りない理由とLease・Fencing Token
PostgreSQLのOutboxテーブルを複数workerで処理するとき、SELECT ... FOR UPDATE SKIP LOCKEDしてCOMMITした後に外部APIを呼ぶと同じメッセージが二重に処理される理由と、lease・fencing token(lease_version)による正しいclaim/finalizeを解説。バックオフ、dead-letter、集約内の順序、監視SQLまで、PostgreSQL 18で並行実行テストしたPythonコードで示します。
22分 - PostgreSQLデータベース信頼性Pythonアーキテクチャ設計
PostgreSQL Advisory Lock 実践:FOR UPDATE では防げない check-then-insert の競合を pg_advisory_xact_lock で直列化する
「存在しなければINSERT」が同時リクエストで二重に通るTOCTOU競合を、PostgreSQLのAdvisory Lockで直列化する方法を解説。FOR UPDATEとの違い、session/transactionレベル、PgBouncer・RDS Proxyでの注意、UUIDから64bitキーへの変換、lock_timeout、pg_locksでの観測、制約との役割分担まで、PostgreSQL 18で実行検証したPython(SQLAlchemy 2.x)コードで示します。
21分 - 決済信頼性アーキテクチャ設計PostgreSQLPython
Reconciliation(整合性チェック)の設計:DBとStripeのズレを検出・分類し、Outbox経由で安全に修復する
Webhookの取りこぼしや障害で、自社DBとStripeなど外部サービスの状態がズレたときに、それを検出・分類し、正規の書き込み経路へ修復コマンドを流すReconciliationの設計と実装。『毎時LIMIT 200』が全件を見ない理由、keysetカーソルと1周の保証、確認できない状態を健全とみなさない分類、レート制限、監視まで、PostgreSQL 18で検証したPythonコードで解説します。
22分 - 決済信頼性PostgreSQLPythonアーキテクチャ設計
Webhookの冪等性をTransactional Inboxで実装する:イベントIDの重複排除だけでは防げない『永久消失』と『二重処理』
Webhookの冪等性を、受信記録と業務更新を同じPostgreSQLトランザクションでコミットするTransactional Inboxで実装する方法。先に処理済みを記録するとイベントが永久に失われ、後で記録すると二重処理になる理由、同時重複配信・順不同・別Eventオブジェクトへの対処、DynamoDB重複排除との比較を、PostgreSQL 18で検証したPythonコードで解説します。
28分 - AWSSQSサーバーレス冪等性アーキテクチャ設計
SQS + Lambda + EventBridge で冪等な非同期処理を作る:at-least-once 前提の重複・順序・DLQ 設計
AWSのサーバーレス・イベント駆動非同期処理(SQS+Lambda+EventBridge)を本番品質で設計する実装ガイド。at-least-once配信ゆえの冪等consumer、可視性タイムアウト、DLQと再処理、FIFOの順序/重複排除、部分バッチ失敗(ReportBatchItemFailures)を実コードで解説します。
27分 - PythonCeleryRedis非同期処理タスクキュー
Celery + Redis 本番運用ガイド — 公式ドキュメントに忠実な非同期タスク設計(冪等性・リトライ・可観測性)
Celery 5.6 + Redis で本番に耐える非同期タスクキューを設計する実践ガイド。公式ドキュメントに忠実に、broker/backend設定・visibility_timeoutの罠・冪等性・autoretry・Beat定期実行・Canvasワークフロー・prefetchチューニング・可観測性・セキュリティを、実コードと「使うべき/使わないべき」判断軸つきで解説します。
26分 - アーキテクチャ設計TypeScriptAWSサーバーレスB2B SaaS
外部依存が落ちても落ちないシステム設計:リトライ・指数バックオフ+ジッター・サーキットブレーカー実装ガイド
信頼できない外部APIを相手に「落ちないシステム」を作るための実務ガイド。リトライの大原則(冪等性が前提)、指数バックオフ+ジッター、タイムアウト予算、サーキットブレーカー(closed/open/half-open)、バルクヘッド、フォールバックの罠まで、AWS/Azure公式に忠実な動くTypeScriptコードで解説します。
33分 - リアルタイムアーキテクチャ設計Next.jsTypeScriptパフォーマンス
リアルタイムUIの設計判断:WebSocket / SSE / 楽観更新+無効化 を、要件から正しく選ぶ
リアルタイムUIの実装方式(WebSocket/SSE/ポーリング/楽観更新+キャッシュ無効化)を要件から選ぶ意思決定ガイド。『リアルタイム=WebSocket必須』ではない理由、冪等な同時編集、SSEのワイヤ形式と実装、準リアルタイムの設計を、MDN公式仕様と実プロジェクトの判断を交えた実コードで解説します。
25分