コンテンツにスキップ

イベント配信と Webhook プラットフォーム

イベント配信(modules/eventingLIVE)は、エンジンのインプロセス イベントバスを外部サブスクリプションサーフェスへと変換する。バス自体は at-most-once でシャットダウン時にドロップするのに対し、本モジュールは 永続性の境界である。すなわち、イベントがキャプチャトランザクションで 捕捉された時点から、配信は永続的かつ監査可能となる。ルートは /v1/m/eventing/ 配下にマウントされる。

サブスクリプションは、必要とするイベント種別、任意のソースフィルター、 コンシューマーのエンドポイント URL、その配信が認可されるロール、そして サーバー生成の HMAC 署名シークレット(一度だけ返却され、その後は sealed-at-rest シーム経由でのみ保持される)を記録する。サブスクライブ可能な 種別は型付きカタログから提供される。GET /event-types は各種別をその 安定性ティアおよびそれをゲートするパーミッションとともに返す。サブスクリプションの 管理は特権操作であり監査される。すなわち create/update/rotate-secret は write ティア、delete・replay・redeliver・テスト配信は admin ティアである。

配信は at-least-once + コンシューマー冪等性キーである。exactly-once は 偽りの約束として却下された。キャプチャされた各イベントは、マッチする サブスクリプションごとに 1 つの永続配信行となり、同一トランザクション内で エンキューされる。ワーカーは楽観的バージョン(HA 下でも安全)で行を クレームし、署名付きイベントエンベロープを POST し、確認応答(2xx)するか、 次の試行をスケジュールする。

  • リトライ/バックオフ — 408/425/429/5xx およびネットワークエラーは バックオフスケジュールでリトライされる。それ以外のステータスは終端である。 リダイレクトは決してフォローされない。
  • デッドレターキュー — 試行を尽くした配信は dead ステータスに到達する。 denied ステータスはイベント単位の RBAC 拒否を記録する。
  • カーソルリプレイ — テナント単位の単調増加シーケンス(max(seq) ではなく カーソル行から割り当てられる)により、永続ログ内の任意の地点から、保持 ウィンドウの範囲内でリプレイできる。

すべての試行は、Stripe 形式のタイムスタンプ付き HMAC-SHA256 署名と、冪等性 キーとしての安定したイベント id を伴う。各試行の前にディスパッチャーは、 サブスクリプションのロールに対して deny-closed の RBAC+ABAC パイプライン全体を 実行する。したがって送信されるイベントは、ライブの読み取りとまったく同じように フィルタリングされる。

バウンデッドコンテキスト、率直に

Section titled “バウンデッドコンテキスト、率直に”
  • インプロセスバスは at-most-once であり、シャットダウン時にドロップする。 永続性は publish 時点ではなくキャプチャトランザクションから始まる。有効な サブスクリプションが 1 つもマッチしない間に publish されたイベントは キャプチャされない(ストレージ節約)ため、リプレイはキャプチャまでしか 遡れない。
  • マルチノードの NATS ブリッジは率直に at-most-once である。本プラットフォームは その上位の永続レイヤーであり、分散バス自体に関する保証ではない。
  • これはインテグレーター向けサーフェスである。notify は引き続きオペレーター向けのアラートルーターである。live / on-demand / deny-closed の規約については 誠実さと限界 を参照。
  • SIEM フォワーディング — シール済みの台帳と 検出結果を SIEM タワーへ送出する。本プラットフォーム上に直接構築されている。
  • Notify — プロビジョニング済みの宛先への オペレーター向けアラートルーター。
  • イベントリファレンス — サブスクライブするイベントの 語彙と、配信されるエンベロープの形状。