1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【RDB】同期複製と非同期複製は何が違う?

1
Posted at

はじめに

違いは、プライマリがクライアントにコミット完了を返すとき、レプリカの応答を待つかどうかです。待つ同期複製はデータ保護を優先し、待たない非同期複製は応答速度を優先します。

対象読者:RDBのレプリケーションをこれから学ぶ人

違いを比較

観点 同期複製 非同期複製
コミット応答 レプリカの確認を待つ レプリカを待たない
書き込み応答 遅くなりやすい 速くしやすい
障害時の更新損失 設定した確認条件の範囲で抑えやすい レプリカ未反映分を失う可能性がある
レプリカの読み取り 確認条件による 古いデータを読む可能性がある

rdb-sync-async-replication.png

同期複製

プライマリで更新した後、設定された確認条件をレプリカが満たすまで、プライマリはクライアントにコミット完了を返しません。

レプリカ側の確認条件は製品や設定によって異なります。たとえばPostgreSQLでは、スタンバイがトランザクションログを書き込んだことなどを確認条件にできます。

  • 利点:確認済みの更新がレプリカにも届いてから応答するため、プライマリ障害時に失われる更新を抑えられる
  • 注意点:レプリカやネットワークの応答を待つ分、書き込みの応答が遅くなる。レプリカに障害があると、設定によっては書き込みが待たされたり止まったりする

非同期複製

プライマリは自身の更新を確定すると、レプリカの応答を待たずにクライアントへ完了を返します。更新はその後、レプリカへ送られて反映されます。

  • 利点:レプリカの応答待ちがなく、書き込みへの影響を抑えやすい
  • 注意点:プライマリ障害のタイミングによっては、レプリカに届いていない更新が失われることがある。また、レプリカの読み取り結果が少し古い場合がある

どちらを選ぶか

更新を失うリスクを小さくすることが最優先なら同期複製、書き込みの応答速度やプライマリへの負荷を重視するなら非同期複製が候補になります。

実際には「同期なら絶対にデータを失わない」とは限りません。どのレプリカの、どの反映段階まで確認するか、障害時に書き込みを止めるか、といった設定も合わせて確認します。

まとめ

同期複製はレプリカの確認を待ち、非同期複製は待たずに応答します。その違いが、書き込みの応答速度と障害時に失う可能性のある更新量に現れます。

参考資料

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?