ノード間のデータフロー
(セクション: エコシステムとネットワーク)
1)本質と目標
ノード間のデータフローは、エコシステムロール(バリデータ/リーダー/インデックス/ブリッジ/ゲートウェイ/ストレージ/分析)間のイベント、ステート、アーティファクトの管理チャネルです。目的:- 予測可能性:遅延/成功/鮮度による安定したSLO。
- 信頼性:損失、重複、再調整に対する抵抗。
- セキュリティとコンプライアンス:暗号化、署名、居住。
- スケーラビリティ:地理分布、パーティショニング、QoS。
2)フロータクソノミ
1.Control Plane: configs、 phicheflags、ルーティング/リミットポリシー。
2.Data Plane-event: ドメインイベント('deposit。'、'ペイアウト。'、'ブリッジ。').
3.Data Plane-ストリーム:信号とライブ指標の長寿命ストリーム(gRPC/WebSocket)。
4.バッチ/バックフィル:過去のスライス、リプレイ、スナップショットのダウンロード。
5.Replication/anti-entropy:状態同期、merclization、 CRDTストリーム。
6.テレメトリー/オブザビリティ:logs/metrics/trailsサイドバンド、メインのUXに干渉しません。
各タイプにはQoSクラスと独自のretray/orderルールがあります。
3)トポロジーとルーティング
ハブ・アンド・スポーク:タイヤとしての地域ハブ;plays-ロールノード。
Mesh/P2P:レプリケーション/ゴシップ用の部分メッシュ。
エッジ階層:薄いエッジゲートウェイ(rate-limit/cache)→厚いリージョナルクラスタ。
ジオルーティング:Anycast/Latency-Aware LB+レジデンシールール。
キー-パーティショニング:'partition_key=chainId'テナント'トピック'entityId'は予測可能な順序とスケールを与えます。
4)輸送とフォーマット
HTTP/2/3、 gRPC/QUIC-低遅延、多重化、キープアライブ。
Kafka/Pulsar/NATS-永続性/パーティー/消費者グループのキュー。
WebSocket-イベントとライブフィードをプッシュします。
フォーマット:Protobuf/Avro(進化を伴うスキーム)、外部APIのJSON。
完全性検証のためのハッシュアドレッシングとMerkleレシート。
5)順序、配達および最終化
配達モデル:- At-less-once(デフォルト;idempotency/deadup required)。
- Outbox/Inbox+idempotent consumer経由で正確に1回効果。
- 順序:党の内で保証される;パーティ間の注文は保証されていません。
- 確定:ステータス'observed→confirmed (K)→finalized→invalid (reorg)';楽観的な-紛争ウィンドウ。
6) Idempotenceおよびdedup
イベントのIdemotenceキー:- 'idempotency_key=${chainId}|${block}|${tx}|${logIndex}|${type}'
- キーによるアップサート、重複除外ウィンドウのTTL ≥ 72時間です。
- 競合の場合、ペイロードは「真実の源」ポリシー(優先度、バージョン、署名)です。
- HTTPリクエストの場合、ヘッダーは'Idempotency-Key'+レスポンスログです。
7)キュー、バックプレッシャー、クォータ
キュー:キーによるパーティー;「有毒な」メッセージのためのDLQ。
Backpressure:クレジット/トークン、max-inflight limit、 circuit-breaker。
クォータ/QoS: P0(クリティカル)、P1(製品)、P2(バルク)。プール/RPS 制限/バイト/s/サブスクリプションを分割します。
入場管理:「高価な」要求の早期拒否、範囲/サイズによるガード。
8)一貫性とデータモデル
party/node内のread-you-write。
地域/当事者間の最終的な一貫性。
一部のセット(カウンタ、セット)の競合のないレプリケーションのためのCRDT。
高速なブートストラップと決定的なリプレイのためのスナップショット+ログ。
9)セキュリティと信頼
ノード間のmTLS、キーピン、回転。
メッセージ/Webhook署名、タイムスタンプ、およびアンチリプレイウィンドウ。
外出中/休憩中の暗号化;地域キーの分離。
PII最小化:トークン化、ラベル/メトリック内の個人データの禁止。
10)効率: 包装、圧縮、キャッシュ
バッチ:オーバーヘッドを削減するための小さなメッセージのグループ化。
圧縮:zstd/gzipと安全な辞書。
現金:否定的な答えと「ホット」ディレクトリ。イベントによってTTLと障害。
11)データ図(参考資料)
フロー/ロットレジスタ
sql
CREATE TABLE streams (
name TEXT PRIMARY KEY,
partitions INT,
qos TEXT, -- P0 P1 P2 retention_days INT,
schema_version TEXT
);
CREATE TABLE offsets (
stream TEXT, partition INT, consumer_group TEXT,
offset BIGINT, updated_at TIMESTAMPTZ,
PRIMARY KEY (stream, partition, consumer_group)
);
イベントログ(idempotent upsert)
sql
CREATE TABLE events_core (
id UUID PRIMARY KEY,
idempotency_key TEXT UNIQUE,
ts TIMESTAMPTZ,
partition_key TEXT,
type TEXT,
payload JSONB,
status TEXT, -- observed confirmed finalized invalidated signature TEXT
);
DLQ/検疫
sql
CREATE TABLE dlq (
id UUID PRIMARY KEY,
stream TEXT, partition INT, offset BIGINT,
reason TEXT, payload JSONB, ts TIMESTAMPTZ
);
12)ポリシー(YAML)
QoSと制限
yaml qos:
P0: { ack_timeout_ms: 2000, retries: 3, backoff_ms: [100,400,800], rps_per_org: 1500 }
P1: { ack_timeout_ms: 5000, retries: 2, rps_per_org: 800 }
P2: { best_effort: true, rps_per_org: 200 }
limits:
max_message_bytes: 1048576 max_stream_subscriptions_per_client: 20
ファイナライズとウィンドウ
yaml finality:
eth-mainnet: { k: 12 }
polygon: { k: 256 }
optimistic: { k: 0, challenge_minutes: 20 }
ルーティング/レジデンシー
yaml routing:
prefer_local_region: true fallback: [nearest_healthy, master_hub]
residency:
eu: ["eu"]
uk: ["uk"]
13)観察可能性: SLI/SLO
SLI(中心):- レイテンシp95/p99 (ingress→egress、 per-stream/QoS)。
- 成功率/ドロップレート。
- キューラグp95とパーティーによる消費者ラグ。
- 鮮度p95 (ingest→consume)。
- Reorg/Invalid Rate(オンチェーンの場合)。
- Dedup Efficiency(%of takes absolated idempotely)。
- Geo-Hit Ratio(ローカルサービスレシオ)。
- P0遅延p95 ≤ 400ミリ秒;成功≥ 99。95%;Queue-lag p95 ≤ 2インチ;鮮度P95 ≤ 60°。
- Dedupの効率≥ 99%;DLQ ≤ 0。トラフィックの1%。
ダッシュボード:Streams Core/Lag&Freshness/QoS&Errors/Geo/Security (mTLS/signatures)。
14)消費者パターン
Outbox/Inbox: atomic publishingとidempotent application。
正確に一度のエフェクト:最後に適用されたキーとバージョンを保存します。
透かし:遅いデータ。
Idempotent Side-Effects:キーとレスポンスログのみを持つ外部クエリ。
15)劣化モード
finalized-onlyモード:finalizedイベントのみを発行します。
参考図書のキャッシュのみ、重い方法を凍結します。
ストリーム用のスロットルP 2と「ダイエットモード」(リフレッシュレートを削減)。
セカンダリAPIの読み取り専用。
16)ダウンタイムフリーのリリースと移行
フローと消費者によるブルーグリーン/カナリア。
Schema-first:フィールドのみ追加;MAJOR-トピックの並列バージョン。
オフセット移行:シャドウ消費者、ラグ/成功比較、スイッチング。
17)運営規程
毎日:SLOレポート(レイテンシ/成功/遅れ/鮮度)、署名監査、DLQチェック。
ウィークリー:バッチ/クォータの改訂、DRテスト(スナップショットからのブートストラップ)、Dedup Efficiency分析。
毎月:カオステスト(損失/ジッタ、ブローカー障害、reorg-burst)、ファイナリティウィンドウのリビジョン。
リリース前:カナリア≥ 120分、SLOゲート、ロールバック計画。
18) Playbookインシデント
A。キューラグ/コンシューマラグ爆発
1.消費者の増加/KEDA;2)当事者の再配布;3) P2およびバルクジョブを凍結する。4)「ホット」キーの分析。
B。 p95 レイテンシーP 0の成長
1.P2-throttle、 P0優先順位付け;2)スケールゲートウェイ/ブローカー;3)参考図書のみのキャッシュ。4) outlier-ejection。
C。高いDLQ/吹き替え
1.idempotenceのキー/TTLを点検して下さい;2)はdedupを増強します;3)騒々しい生産者を限って下さい;4)修正後のリプレイ。
D。ドリフトスキーム/契約
1.strict-modeを有効にする(無効なものを切断する)。2)生産者に通知する。3)アダプターを解放して下さい;4)更新のlinters。
E。居住者/署名の違反
1.輸出/チャネル単位;2) キー/sertsの回転;3)監査および死後。4)ポリシーの更新。
19)実装チェックリスト
1.ストリームタイプとパーティションキーを定義します。
2.K/紛争ウィンドウでidempotence/dedupとfinalizationを有効にします。
3.キュー、QoS、クォータ、およびバックプレッシャーを構成します。
4.mTLS/Signatures and Residence Policyを実行します。
5.スキーマ/レジスタ(ストリーム、オフセット、dlq)とSLI/SLOテレメトリーを入力します。
6.カナリア/ブルーグリーンおよびダウンタイムのない回路移行を整理します。
7.劣化モードとインシデントプレイブックを操作します。
20)用語集
Backpressure-入力負荷制御(クレジット/トークン/制限)。
DLQ-問題のメッセージの「デッドキュー」。
CRDT-協調なしの紛争解決を伴うデータ構造。
Finality-イベント/状態の不可逆性。
正確に1回効果-リピートセーフな結果が少なくとも1回配信されます。
透かし-遅延イベントの処理進行をマークします。
Outlier-ejection-プールからの劣化したインスタンスの除外。
ボトムライン:ノード間のデータフローは単なる「キューとリスナー」ではなく、秩序の体系的な規律、確定、偶像性、セキュリティ、観測性です。標準的なパーティションキー、QoS/クォータ、厳格なスキーム、SLO、劣化モードとプレイブックは、エコシステムに安定したデータ伝送チャネルをスケールと監査の下で提供します。