SyncCoordinatorDocumentation

DOCUMENTATION / WORKFLOW

Workflow

業務DBで変更が起きると、SyncCoordinatorが現在の値を読み直し、問題がなければ同期先へ反映します。途中で止まっても、続きから安全にやり直せます。

PROCESSING FLOW

同期処理の流れ

Workerは一定の間隔で変更を確認し、送信元ごとに処理します。管理画面で設定を変えた場合は次の処理から使われるため、実行中に接続先が切り替わることはありません。

  1. 01変更に気づく

    業務DBのTriggerが、変更されたレコードをQueueへ知らせます。

  2. 02同じ変更をまとめる

    Workerが新しい通知を取り出し、同じレコードの通知をひとつにまとめます。

  3. 03いまの値を確認する

    通知された時点の値ではなく、業務DBにある現在の値を読み直します。

  4. 04同期先を決める

    どこで起きた変更かを確認し、同期ルールとマッピングを選びます。

  5. 05競合がないか確かめる

    前回の値と両システムの現在値を比べ、変換後の値も確認します。

  6. 06同期先へ反映する

    同じ変更を二重に書かないよう確認してから反映し、処理結果を保存します。

1回分の処理がすべて片づいたときだけ、読み取り位置(Checkpoint)を進めます。途中で一時的なエラーが起きた場合は位置を変えず、次の処理で同じ場所からやり直します。

LATEST STATE

いちばん新しい状態を同期する

Queueに入るのは、「このレコードが変わった」という知らせです。古い変更をひとつずつ再現するのではなく、Workerが処理する時点の値を読み直します。

更新 → 更新

最後に更新された値を反映

更新 → 削除

削除された状態を反映

削除 → 再作成

作り直された現在の値を反映

削除された場合

物理削除

同期元からレコードが削除されたことを検知し、同期先のレコードも削除します。

論理削除

指定した列が削除状態の値になったことを検知し、同期先にも同じ状態を反映します。

前回の同期後に同期先のレコードが変更されていた場合は、勝手に削除せず競合として扱います。削除は一部の項目だけに適用できないため、レコードを削除するか残すかを判断します。

SyncCoordinatorが得意なのは、複数システムの「現在の状態」を揃えることです。承認、在庫移動、仕訳のように途中の操作にも意味があるデータは、イベントを省略しない別の連携方式が適しています。

CONFLICT FLOW

競合した場合

前回保存した値から両方のシステムが同じ項目を変更し、結果が違っている場合に競合と判断します。片方だけが変わっている場合は、そのまま自動で反映します。

NO CONFLICT

競合なし

値の変換と書込み前の確認を行い、そのまま同期先へ反映します。

POLICY

ルールに従って決める

送られてきた値を使うか、同期先の値を残すかを設定済みのルールで決めます。結果は履歴に残します。

HOLD

人の判断を待つ

同期先の値を変えず、要対応として管理画面に残します。他のレコードの同期は続きます。

管理画面で解決する流れ

  1. 違いを確認送られてきた値と、同期先にある現在の値を並べて確認します。
  2. 残す値を選ぶ項目ごとに、どちらの値を使うか、または手入力するかを選びます。
  3. 解決を依頼管理画面から直接書き込まず、管理DBに解決要求を保存します。
  4. 安全を確認して反映Workerが同期先をもう一度確認し、変わっていなければ反映します。

画面を開いてから反映するまでに同期先の値が変わっていた場合は、上書きしません。最新の値を表示して、もう一度選び直せる状態に戻します。

RETRY AND RESUME

再試行と再開

Workerは、どこまで読んだか、どの変更を処理中かをDBに保存します。停止やエラーが起きても、完了済みの変更を二重に反映せず、残っている処理から続けます。

状態意味次の動き
Completed問題なく完了した、または反映する必要がなかった同じ変更は処理せず、次の読取位置へ進みます。
Failed接続エラーなど、一時的な理由で今回の処理に失敗した読取位置を進めず、次の周期で自動的にやり直します。
Held競合や値の問題があり、人の確認が必要になった要対応として残し、ほかのレコードの同期を続けます。
ProcessingWorkerが処理している途中途中で停止した場合は、5分後に別の周期が取得し直します。

Heldの扱い:競合によるHeldは管理画面から解決できます。値変換や列の検証でHeldになったデータを、管理画面から手動で再実行する機能は現在ありません。

同じ変更は二重に書かない

やり直すときも同じ配送IDを使います。同期先の適用済み記録を確認するため、二重反映を防げます。

別の送信元は止めない

ひとつの送信元でエラーが起きても、読取位置を別に持つほかの送信元は処理を続けます。

一時停止した場合

一時停止中はQueueも読み取り位置も動かしません。再開すると、停止中に残った通知から現在の値を読み直し、古い状態を順番に再生せず最新状態へ追いつきます。停止前に始まっていた処理は、そのまま完了する場合があります。

一時停止は「あとで続きから再開する」ための運用操作です。システムや同期ルールの無効化は、同期対象から外すための設定であり、同じ意味ではありません。

NOTIFICATIONS

通知の流れ

通知先が一時的に止まっていても、データ同期は続けたい。そのため、Workerは通知をすぐ送るのではなく、まず管理DBに保存し、別の処理でWebhookへ届けます。

イベント発生同期、削除、競合、失敗、一時停止・再開
送信待ちとして保存管理DBのOutboxへ記録
Webhook配送HMAC署名、配送履歴、段階的な再試行

Webhookへの送信に失敗しても、同期処理は止まりません。1分、5分、30分、2時間、6時間、12時間と間隔を空け、初回を含めて最大7回送ります。それでも届かなければ通知をFailedにします。同じ通知が届いた場合は、受信側でEvent IDを使って見分けられます。

OPERATIONS

管理画面での確認

ふだんの運用では、どこまで同期できているか、エラーや要対応が残っていないかを管理画面で確認します。Webhookの設定と送信履歴も同じ画面から管理できます。

処理状況画面。システムごとのキュー読取位置と同期処理履歴を表示
処理状況Checkpoint、処理結果、試行回数、エラーを確認します。
コンフリクト履歴画面。要対応の競合を一覧表示
コンフリクト要対応の競合と解決状態を確認します。
通知設定画面。Webhook通知先と対象イベントを設定
通知Webhook通知先、対象イベント、署名設定を管理します。

NEXT

次に読む

ArchitectureGetting Started