GH GambleHub

APIによるデータ同期

1)同期が必要な理由と目標は何ですか

ドメインの一貫性:プロファイル、ウォレット、ディレクトリ、制限、KYC。
ラグを下げる:重要なプロセス(支払い、ボーナス)のほぼリアルタイム。
レジリエンス:イベントの損失なしにネットワーク/プロバイダの停止を経験しています。
経済学:デルタおよび包装化によって出口/CPUを最小にして下さい。

成功指標:ソースと消費者の間の遅延、鮮度、重複の割合、競合の割合、GB/時間の青色のコスト。

2)同期モデル

2.1プル(ポーリング)

クライアントは間隔で変更を要求します。

長所:シンプルさ、負荷制御。
短所:遅延、「空」の世論調査、変化の高い割合でスキップのリスク。
改善:If-Modified-Since、 Etag/If-None-Match、 change_token。

2.2プッシュ(webhook/イベント)

ソースはイベントを受信者に流します。

長所:ほとんどリアルタイム、世論調査経済。
短所:リトレイ、重複排除、セキュリティ(署名、mTLS)での配信が必要です。
要件:idempotent消費者、指数関数的なバックオフ、再生。

2.3 CDC/ストリーミング(変更データキャプチャ)

トランザクションログ/イベントログ(Kafka、 Debezium)からの変更のスナップショット。

長所:完全性、順序、スケール。
短所:複雑さ、あなたは操作の種類を制御する必要があります(挿入/更新/削除/墓石)。

2.4ハイブリッド

Webhookは「トリガー」として、フォールバックとして、そして和解のためにポーリングします。

3)差分デルタ

3.1透かし(タイムスタンプ)

クライアントは'last_seen_ts'を格納し、'updated_at> watermark'を要求します。

リスク:時間のドリフト-UTCとNTPを使用します。1-2 minのオーバーラップウィンドウを取得し、ID+バージョンでデッドアップします。

3.2トークン/カーソルの変更

安定したシーケンストークン:'?cursor=eyJvZmZzZXQiOjEwMDB9'。

長所:順序、スケールを変える回復力。
要件:劣化していないカーソル、TTL、安全な再生。

3.3番号付きオフセット(自動増分)

'id> last_id'。シンプルですが、シャーディング時に分解し、シーケンスで「穴」を開けます。

4)大きいサンプルpagination

キーセット/カーソル(推奨):'?after=cursor&limit=1000'-変更で安定。
オフセット/リミット-シンプルですが、高価でシフトの対象となります。
常に安定したソートキー('(updated_at、 id)'など)を指定します。

カーソル応答の例:
json
{
"items": [ { "id": "u_1", "updated_at": "2025-11-03T16:59:10Z" } ],
"next_cursor": "eyJ1cGRhdGVkX2F0IjoiMjAyNS0xMS0wM1QxNjo1OToxMFoifQ==",
"has_more": true
}

5)セマンティクスの変更: upsert、 merge、 delete

5.1アップサート/マージ

'PUT/resource/{ id}'は完全な置換です。
'PATCH/resource/{ id}'-部分更新(検証でパッチをマージ)。
すべての書き込みに対して'Idempotency-Key'によるIdempotency。

5.2削除

ソフト削除(フィールド'deleted=true'、 'deleted_at')-履歴を保存します。シンクは墓石を与える。
Hard delete-イベントが消える前に'deleted'を与えます。

墓石の例:
json
{ "id":"u_1", "event":"deleted", "deleted_at":"2025-11-03T17:00:00Z" }

6)バージョン管理と競争

6.1 ETag/If-Match(楽観ロック)

"ETag:" v123"を返します。
"If-Match:" v123"からの更新-"lost updates"からの保護。
競合の場合-409 'error_code: "CONFLICT_VERSION"'と競合します。

6.2レコードのバージョン管理

フィールド'version'/'updated_at'-デルタ計算と重複除外。

6.3コンフリクト

ポリシー:last-write-wins、 server-wins、 merge-strategy by fields(例:sum→additive、 flags→source priority)。

7)順序および重複除外

7.1配達プロシージャ

保証:最低1回+idempotency→事実上の標準。
重要なキャッシュフローの場合は、idempotencyストアを通じて正確に1回の効果を発揮します。

7.2 Idempotenceキー

ドメインフィールドの構成:'source_id' event_type 'sequence'。
ストレージTTL 24-72時間(SLAでは以上)。

7.3重複除外

受信者に適用された最後のバージョン/seqを保存します。古いものをドロップします。

8)繰り返し、タイムアウト、バックオフ

取得可能:5xx/429/408/timeouts;取得不可:400/401/403/404/ 409/422/410/412。
指数関数バックオフ+ジッタ:1s、 2s、 4s……30-60年代に。
429/503の再試行後の尊重。
クライアントのタイムアウト:接続3-5s、一般的な要求10-30s;試行の合計制限3-6。

9) LagsおよびSLA制御

9.1 SLI/SLO

SLI Lag: 'consumer'と'applied in consumer'の間の中央値/p95 lag。

SLO: 例えば、'p95 lag ≤ 60s (28d)'、 "share of lost events=0"、 "share of duplicates ≤ 0。01%».

エラー予算:リリース/実験に費やす。

9.2メトリクス

'sync_lag_seconds'、 'events_received_total'、 'events_applied_total'、 'duplicates_total'、 'conflicts_total'、 'retries_total'、 'backlog_size'、 'cursor_advance_rate_rate_rate'。

10)和解とバックフィル

日/時間の調整:合計/ウィンドウのハッシュ値。
和解API: 'GET/和解?from=……&to=……チェックサムと分散を返す。
Backfill: DDOSソースなしで、カーソルを使用してバッチ内の履歴データを安全に再ロードします。限界を守れ。

11)スキームと例

11.1 Webhookイベント(署名済み)

json
{
"event": "user. updated",
"id": "evt_01HX",
"occurred_at": "2025-11-03T18:00:05Z",
"sequence": 123456,
"data": { "id": "u_1", "email": "a@b. com", "updated_at": "2025-11-03T18:00:02Z" }
}
タイトル:
  • 'X-Signature: sha256='
  • 'X-Event-Id: evt_01HX'
  • 'X-Retry: 0。。 N'

11.2インクリメンタルサンプリング(ポーリング)

'GET/v1/users?updated_after=2025-11-03T17:58:00Z&cursor=...&limit=1000'

11.3 Idempotentアップサート


POST /v1/users
Idempotency-Key: upsert-u_1-20251103T1800Z
{ "id":"u_1","email":"a@b. com","version":124 }
→ 201/200 (stable)

12)安全性とコンプライアンス

Auth: OAuth2 スコープ/JWT;リンクチャンネル-mTLSオンデマンド。
キャプション:WebhookのためのHMACの見出し、回転秘密。
PIIの最小化、ログのマスキング;GDPR/DSARアップロード/削除。
RBAC/ABAC:テナント/組織へのアクセス、厳格なクォータ。

13) Observabilityおよびログ

「env」「、service」「、tenant」「、source」「、cursor」「、seq」「、event_type」。
相関:'trace_id'を入力→ログとトレースに適用します。
ダッシュボード:遅延、バックログ、カーソル速度、タイプエラー、429/5xx、コスト(egress/min)。

14) FinOps: 同期コスト

バッチ(バッチサイズ100-1000)+圧縮(gzip/br)。
変更されていないページのキャッシュとETag。
薄いペイロード:変更されたフィールドのみ、需要に応じて完全なリソースへのリンク。
バックフィルのための並行限界と「夜間窓」。

15)テストおよび質

15.1契約とマイナスのケース

JSONスキーム、必須フィールド、安定性'error_code'を検証します。
テスト:順不同、重複、イベントのスキップ、バージョン競合、429/5xx。

15.2カオス/ゲーム

注射:ネットワーク遅延、ドロップ10-30%イベントの、順序を変更します。。
基準:維持された順序/完全性か?損失はないのか?SLO内の遅延?

16)実装チェックリスト

  • 選択したモデル(プッシュ/プル/ハイブリッド)と真実のソース。
  • 差分デルタ:透かしまたはカーソル/トークン。
  • ページネーション:安定したグレードのカーソル/キーセット。
  • Idempotency-store、キーおよびTTL;dedup by '(id、 version/seq)'。
  • ETag/If-Matchと競合ポリシー(LWW/server-wins/merge)。
  • Retry/backoff/jitter、 respect 'Retry-After'。
  • メトリクスlag/backlog/duplicates/conflicts、ダッシュボード、アラート。
  • 和解API+毎日の和解。
  • セキュリティ:OAuth2/JWT、 webhook署名、mTLS、 PIIポリシー。
  • FinOps: batch+compression、 concurrency limits、 egress quotas。
  • テストスイート:並べ替え、重複、停止、バックフィル。

17)実施計画(3つの反復)

1.MVP (1-2週):

カーソルページネーション、透かしデルタ、idempotent upsert、基本的な遅延/バックログ、再試行+バックオフメトリクス。

2.スケール(2-3週):

trigger+polling-fallback、 HMACシグネチャ、和解、ETag/If-Match、ダッシュボード、書き込みアラートなどのWebhook。

3.プロ(3-4週間):

ホットドメイン用のCDC/ストリーミング (Kafka/Debezium)、自動バックフィル、DRスクリプト、FinOps最適化(batch/brotley)、遅延およびレポート用のSLA。

18) ミニFAQ

選択するもの:透かしまたはカーソル?
カーソル/キーセットは、並べ替えやスケールに耐性があります。ウォーターマークの起動は簡単ですが、オーバーラップとデッドアップを追加します。

それは正確に一度必要ですか?
一般的に、高価です。練習-少なくとも一度+idempotency;正確に一度-金銭的効果のためにのみ。

競合を最小限に抑えるには?
ETag/If-Matchを使用して、フィールドごとにデザインのマージを行い、「非表示」の副作用を避けます。

合計

信頼性の高い同期は、インクリメンタルデルタ+正しいペジネーション+独自性とバージョン制御であり、観測性、輝き、経済的な輸送によって強化されています。適切なモデル(プッシュ/プル/CDC)を選択し、遅延時にSLOをピン留め、競合ポリシーと汚れたシナリオテストを実装します。データ交換は予測可能で、持続可能で費用対効果が高くなります。

Contact

お問い合わせ

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

Telegram
@Gamble_GC
統合を開始

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

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

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