5章レプリケーション

うまくいかないかもしれないことと、うまくいかないはずがないこととの大きな違いは、うまくいかないはずがないことがうまくいかなくなったときには、対処や修復が不可能であることが判明するという点である。

――Douglas Adams, “Mostly Harmless”(1992)

レプリケーションとは、ネットワークで接続された複数のマシンに同じデータのコピーを保持しておくことを指します。第Ⅱ部の導入部で述べたとおり、データのレプリケーションを行う理由はいくつかあります。

  • データを地理的にユーザーの近くで保持しておく(そしてレイテンシを下げる)ため。
  • 一部に障害があってもシステムが動作し続けられるようにする(そして可用性を高める)ため。
  • 読み取りのクエリを処理するマシン数をスケールアウトさせる(そしてスループットを高める)ため。

本章では、各マシンに全体をコピーしておける程度にデータセットが小さいものとします。6章ではこの前提を緩め、単一のマシンで扱うには大きすぎるデータセットのパーティショニング(シャーディング)について論じます。その後に続く章では、レプリケーションを行うデータシステムで生じうる様々な障害と、それらへの対処について述べます。

対象のデータが時間が経っても変化しないのであれば、レプリケーションは容易です。単にデータのコピーを各ノードに一度だけコピーすれば完了です。レプリケーションの難しさは、すべてレプリケーションされたデータへの変更の扱いから生じるものであり、本章ではこれについて取り上げます。また、変更をノード間でレプリケーションするのに広く使われているアルゴリズムである、シングルリーダーマルチリーダーリーダーレスという3つのレプリケーションを紹介します。ほぼすべての分散データベースは、これら3つのアプローチのいずれかを利用しています。それぞれの長所と短所をこの後詳しく見ていきましょう。 ...

Get データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.