GH GambleHub

イベント駆動カーネル

イベント駆動カーネルとは

Event-Driven Core (EDC)はアーキテクチャの「背骨」であり、ビジネスの事実は不変イベントとしてキャプチャされ配布され、残りの機能(読み取り、統合、分析、キャッシュ、通知)はこれらのイベントのフローの上に構築されます。カーネルはイベントコントラクト、配信ルール、およびorder/idempotency不変量を設定し、弱い接続性とスケーラビリティを提供します。

主なアイデア:最初に事実(コア)を書き留めてから、独立して豊かにし、希望するモデルに投影します。これにより、接続性が低下し、部分的な障害に対する回復力が向上します。

EDCの目標とプロパティ

事実の真実:それぞれの出来事は「何が起こったか」の不変の記録です。
弱い接続性:生産者は消費者を知らない。システム拡張-加入者を追加することによって。
スケーリング:パーティー/トピック、独立した消費者による水平成長。
オブザビリティと監査:エンドツーエンドの識別子、再現性、リテンションおよびリプレイ。
管理された進化:スキーマバージョン、互換性、非推奨。

建築部品

1.バス/イベントブローカー:Kafka/NATS/Pulsar/SNS+SQS-チャネル、パーティー、リテンション。
2.スキーマレジストリ:互換性と進化のためのJSON スキーマ/Avro/Protobuf。
3.Outbox/CDC contour: 「double write」なしでatomic fact fixing+publishing。
4.投影/読み取り(CQRS):クイッククエリの実体化ビュー。
5.Sagas/Orchestration:イベント/チームを通じた長期にわたるプロセスの調整。
6.エンリッチメント:クリティカルパスに影響を与える個々のトピック'。enriched'/'。derived'。
7.オブザビリティ:トレース、ロギング、イベントやラグによるメトリクス。

イベントモデル

イベントタイプ

ドメインイベント:ビジネス事実('支払い。認可された'、'kyc。「承認されました」)。
統合イベント:外部システムに焦点を当てています(安定していて、ゆっくりと変化しています)。
変更データキャプチャ(CDC):レコードの技術的な変更(移行/統合に使用)。
監査/テレメトリー:アクターアクション、セキュリティ、SLA。

必須属性(コア)

json
{
"event_id": "uuid",
"event_type": "payment. authorized. v1",
"occurred_at": "2025-10-31T11:34:52Z",
"producer": "payments-service",
"subject": { "type": "payment", "id": "pay_123" },
"payload": { "amount": 1000, "currency": "EUR", "method": "card" },
"schema_version": 1,
"trace_id": "abc123",
"partition_key": "pay_123"
}

推奨事項:'event_id'はグローバルに一意であり、'partition_key'はエンティティの順序を設定し、'trace_id'は相関を提供します。

配信セマンティクスとidempotency

少なくとも1回(多くのブローカーのデフォルト):消費者は独自性が必要です。
At-most-once:セカンダリ・テレメトリーでのみ使用できます。
正確に一度:トランザクション/idempotentキー/ウォータリング缶を介してフローとストレージレベルで達成(より高価で、十分な理由が必要)。

消費者の独自性パターン

「event_id」/「(event_id、 consumer_id)」でTTL ≥トピックを保持するテーブルをデダップします。
挿入の代わりにUpsert;'sequence'/'occuled_at'によるプロジェクションのバージョン管理。
トランザクション内のトランザクション:マーク「saw」+状態の変更。

注文とパーティショニング

パーティー内の保証注文。
同じ集計エンティティのすべてのイベントが同じバッチ('user_id'、 'payment_id')になるように'partition_key'を選択します。
「ホットキー」を避ける:負荷を分散する必要がある場合は、塩/サブキーでハッシュします。

スキームと進化

Additive-first:新しいオプションフィールド、メジャーバージョンなしでのタイプ/セマンティクスの変更の禁止。
互換性:スキーマレジストリのBACKWARD/FORWARD;CIは互換性のない変更をブロックします。
名前:'ドメイン。アクション。v {major}'('支払い。承認されました。v1')。
マイグレーション:ペア'v1'と'v2'を並列にパブリッシュし、出力ボックスを介してデュアル書き込みを提供し、遷移後に'v1'を撮影します。

CDCアウトボックス

アウトボックス(トランザクションサービスに推奨)

1.1つのデータベーストランザクションで、ドメインレコードとイベントをアウトボックスに保存します。
2.バックグラウンドパブリッシャーはアウトボックスを読み取り、ブローカーに公開し、「送信」をマークします。
3.保証:落下の事実の「損失」、非同期。

CDC(変更データキャプチャ)

既存のシステム/移行に適しています。source-DBレプリケーション・ログ。
ドメインイベントへのフィルタリング/トランスコードが必要です(rawテーブルを外部に変換しないでください)。

CQRSと投影

コマンドは(しばしば同期的に)状態を変更し、イベントは(非同期に)投影を形成します。
投影は、契約者によって更新されたクエリ(検索、リスト、レポート)のために設計されています。
一時的な非同期は標準です:安定したUXを表示します(「データは数秒で更新されます」)。

Sagas: プロセスコーディネート

オーケストレーション:1人のコーディネーターがコマンドを送信し、イベントを待ちます。
振り付け:参加者はお互いのイベントに反応します(シンプルですが、契約には規律が必要です)。
ルール:明確な補償とタイムアウト、繰り返し可能なステップ、idempotentハンドラ。

観測可能性

Trace/Span:イベントを生成するときにヘッダーから'trace_id'/'span_id'をトレースします。
メトリクス:消費者の遅延、パブリッシング/消費レート、デッドレターレート、重複排除シェア。
DLQ/駐車場:失敗したメッセージ-アラート付きの別のトピックへ;再処理を提供して下さい。

セキュリティとコンプライアンス

データ分類:コアには、必要最小限のPII/財務データ(リバースピラミッドモデル)、詳細のみが含まれます。
重要な属性の署名/ハッシュ、整合性制御。
topic/consummer (IAM/ACL)による機内および休止中の暗号化の権利。
保持ポリシーと忘れられる権利:トピックごとに明確に定義されています。

性能と安定性

Backpressure:消費者は限られた競争を持っています、ブローカーはクォータ/制限を持っています。
オーバーヘッドを低減するバッチおよび圧縮グループのレコード。
無限の試みの代わりにジッタとDLQでレトライ。
リバランス抵抗:オフセットをトランザクション/外部に保存し、スナップショットでコールドスタートを高速化します。

典型的なイベントテンプレート

ペイメントコア

支払いだよ。開始されました。v1'→'支払い。承認されました。v1'→'支払い。キャプチャされた。v1'→'支払い。落ち着いた。v1'

拒否: "支払い。拒否されました。v1'、'支払い。返金されます。v1'

パーティショニング: 'payment_id'

SLA:中心の遅れ≤ 2c p95;消費者のアイデンポテンスは必須です。

CCM/検証

'kyc。開始しました。v1'→'kyc。ドキュメント。受信しました。v1'→'kyc。承認されました。v1'/'kyc。拒否されました。v1'

PII-最小;ドキュメントの詳細-'kyc。豊かになりました。アクセス制限付きのv1'。

監査/セキュリティ

「オーディット」記録されています。属性'actor'、 'subject'、 'action'、 'overced_at'、 'trace_id'を持つv1'。

継続的な保存/アーカイブ;高められた完全性(WORM)

アンチパターン

脂肪のでき事:不必要に積み過ぎられたペイロード、PIIの漏出。
イベントを介して隠されたRPC:同期の「ここと今」応答を待っています。
Raw CDC外向き:DBスキーマへの接続を閉じます。
消費者の独自性はありません:2倍の副作用につながります。
一つの共通のトピック「すべてのために」:利益の対立、問題の秩序、複雑な進化。

EDCのステップバイステップの実装

1.ドメインマッピング:キーアグリゲートとライフサイクルを強調表示します。
2.イベントのカタログ:名前、意味、不変量、必須フィールド。
3.スキーマとレジストリ-フォーマットを選択し、互換性ルールを有効にします。
4.Outbox/CDC:プロデューサーごとに、事実を公開するメカニズムを定義します。
5.パーティショニング:キーを選択し、ホットキー/再パーティションを評価します。
6.Idempotency:重複除外パターン+消費者トランザクション性。
7.投影-実体化モデルを定義し、SLAを更新します。
8.観測性:トレース、ラグ、DLQ、アラート。
9.セキュリティ/PII:データ分類、暗号化、ACL。
10.進化へのガイド:移行のためのバージョンポリシー、非推奨、デュアルライト。

生産チェックリスト

  • 各イベントには'event_id'、 'trace_id'、 'overced_at'、 'partition_key'があります。
  • レジストリ内のスキーム、互換性チェックが有効になっています。
  • コンシューマーアイデンティティの実装とテスト。
  • DLQ/駐車場とアラートは、パブリッシュ/消費エラー用に設定されています。
  • 投影は、ログ(リプレイ)から許容時間で再作成されます。
  • PIIへのアクセスが制限されています。カーネルの最小ペイロードです。
  • lags/deliveryによるSLAが測定され、ダッシュボードに表示されます。
  • イベントバージョンと非推奨ウィンドウを移行する計画があります。

よくあるご質問

EDCと「バスだけ」の違いは?
コアは、ブローカーだけでなく、イベント契約、注文/特権ルール、進化プロセス、および観測可能性でもあります。

CDCだけで構築できますか?
CDCは統合/移行に適していますが、ドメインイベントはより明確に表現し、データベースの変更をより安定的に体験します。

一貫性についてはどうですか?
最終的な一貫性を受け入れ、UX/プロセス(アップデート、リトレイ、補償の指標)を設計します。

正確に一度必要なのはいつですか?
まれ:倍増が厳密に受け入れられず、補償することが不可能な場合。より頻繁に、少なくとも一度+idempotencyは十分です。

合計

イベント駆動カーネルは、ビジネス事実の流れをシステムの信頼できる基盤に変えます。イベント契約、配信規律、観察可能性を明確にすることで、スケーラビリティ、回復力、進化率が向上します。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。