コンピューティングにおけるレプリケーションとは、冗長なコンポーネント間で一貫性を確保するために、データ、プロセス、またはリソースの複数のコピーを維持することを指します。この基本的な技術は、データベース、ファイルシステム、分散システムに及び、可用性、耐障害性、アクセス性、およびパフォーマンスの向上に役立ちます。 [ 1 ]レプリケーションにより、コンポーネントが故障した場合でもシステムは動作を継続でき(フェイルオーバー)、地理的に分散した場所からの要求に対応し、複数のマシン間で負荷を分散できます。課題は、データの一貫性、システムの可用性、ネットワークのパーティション耐性の間の基本的なトレードオフ( CAP定理として知られる制約)を管理しながら、レプリカ間の一貫性を維持することです。[ 2 ]
コンピューティングにおけるレプリケーションとは、以下を指す場合がある。
空間的または時間的な複製は、スケジューリングアルゴリズムと関連付けられることが多い。[ 3 ]
複製されたエンティティへのアクセスは、通常、単一の複製されていないエンティティへのアクセスと均一です。複製自体は外部ユーザーに対して透過的であるべきです。障害発生時には、サービス品質の観点から、レプリカのフェイルオーバーは可能な限り隠蔽されるべきです。[ 4 ]
コンピュータ科学者は、複製を次のように説明している。
リーダー選出によって1つのリーダーレプリカがすべてのリクエストを処理するように指定される場合、システムはプライマリバックアップまたはプライマリレプリカ方式を使用しており、これは高可用性クラスタで主流となっています。これに対し、どのレプリカでもリクエストを処理して新しい状態を配布できる場合、システムはマルチプライマリまたはマルチマスター方式を使用しています。後者の場合、分散ロックマネージャなどの何らかの分散並行性制御を使用する必要があります。
負荷分散はタスクレプリケーションとは異なり、異なる計算処理の負荷を複数のマシンに分散させ、障害発生時には単一の計算処理を破棄することができます。ただし、負荷分散は、データをマシン間で分散させるために、内部的にデータレプリケーション(特にマルチマスターレプリケーション)を使用する場合があります。
バックアップは、保存されたデータのコピーが長期間変更されないという点で、レプリケーションとは異なります。[ 5 ]一方、レプリカは頻繁に更新され、履歴状態をすぐに失います。レプリケーションは、分散システム全体の中で最も古く、最も重要なトピックの1つです。
データレプリケーションと計算レプリケーションはどちらも、受信イベントを処理するプロセスを必要とします。データレプリケーションのプロセスは受動的であり、保存されたデータの維持、読み取り要求への応答、および更新の適用のみを行います。計算レプリケーションは通常、耐障害性を提供し、コンポーネントの1つが故障した場合に操作を引き継ぐために実行されます。どちらの場合も、根本的なニーズは、レプリカが同じイベントを同等の順序で認識し、一貫性のある状態を維持し、どのレプリカもクエリに応答できるようにすることです。
データ複製には、広く知られている3つのモデルがあり、それぞれに独自の特性と性能があります。
データベースレプリケーションとは、複数のマシン上に同じデータのコピーを保持することであり、通常はシングルリーダー、マルチリーダー、リーダーレスレプリケーションの3つの主要なアプローチによって実装されます。[ 1 ]
シングルリーダー(プライマリ/レプリカとも呼ばれる)レプリケーションでは、1つのデータベースインスタンスがリーダー(プライマリ)として指定され、すべての書き込み操作を処理します。リーダーはこれらの更新をログに記録し、それがレプリカノードに伝播されます。各レプリカは更新の受信を確認し、後続の書き込み操作を有効にします。レプリカは主に読み取り要求に対応しますが、リーダーからの変更の伝播遅延(レプリケーションラグ)により、古いデータを提供する場合があります。
マルチマスターレプリケーション(マルチリーダーとも呼ばれる)では、更新は任意のデータベースノードに送信でき、その後他のサーバーに伝播されます。このアプローチは、データセンター間のネットワーク遅延を隠蔽しながらローカル書き込み処理を可能にするため、マルチデータセンター展開で特に有益です。 [ 1 ]ただし、コストと複雑さが大幅に増加するため、状況によっては実用的でない場合があります。マルチマスターレプリケーションで最も一般的な課題は、異なるリーダーノードで同時変更が発生した場合のトランザクション競合の防止または解決です。
ほとんどの同期(または即時)レプリケーションソリューションは競合防止を実行しますが、非同期(または遅延)ソリューションは競合解決を実行する必要があります。たとえば、同じレコードが 2 つのノードで同時に変更された場合、即時レプリケーションシステムはコミットを確認する前に競合を検出し、トランザクションの 1 つを中止します。遅延レプリケーションシステムは、両方のトランザクションのコミットを許可し、再同期中に競合解決を実行します。競合解決方法には、最終書き込み優先、アプリケーション固有のロジック、同時更新のマージなどの手法が含まれます。[ 1 ]
しかし、レプリケーションの透過性は常に実現できるとは限りません。データベース内でデータが複製される場合、CAP定理またはPACELC定理によって制約されます。NoSQLムーブメントでは、可用性(A)、パーティション耐性(P)など、より望ましい特性と引き換えに、データの一貫性が犠牲にされることが一般的です。また、サービスプロバイダーとユーザー間のサービスレベル契約(SLA)として機能する、さまざまなデータ一貫性モデルも開発されています。
ノード間でデータ変更を複製するための手法はいくつかあります。[ 1 ]

アクティブ(リアルタイム)ストレージレプリケーションは通常、ブロックデバイスの更新を複数の物理ハードディスクに分散することで実現されます。この方式では、オペレーティングシステムがサポートするあらゆるファイルシステムを、変更なしで複製できます。これは、ファイルシステムコードがブロックデバイスドライバ層よりも上位のレベルで動作するためです。この方式は、ハードウェア(ディスクアレイコントローラ)またはソフトウェア(デバイスドライバ)のいずれかで実装されます。
最も基本的な方法はディスクミラーリングで、これはローカルに接続されたディスクでよく用いられます。ストレージ業界では定義が狭く、ミラーリングはローカル(短距離)操作とされています。レプリケーションはコンピュータネットワーク全体に拡張可能で、ディスクを物理的に離れた場所に配置でき、通常はプライマリ/レプリカのデータベースレプリケーションモデルが適用されます。レプリケーションの目的は、ある場所で発生する可能性のある障害や災害によるデータ損失を防ぐこと、あるいはそのような事態が発生した場合にデータ復旧能力を向上させることです。レプリケーションにおいては、レイテンシが重要な要素となります。レイテンシによって、サイト間の距離や使用できるレプリケーションの種類が決まるからです。
このようなクロスサイトレプリケーションの主な特徴は、書き込み操作の処理方法、つまり非同期レプリケーションと同期レプリケーションのどちらを使用するかという点です。同期レプリケーションでは、書き込み操作のたびに宛先サーバーからの応答を待つ必要がありますが、非同期レプリケーションでは待つ必要はありません。
同期レプリケーションは、アトミック書き込み操作によって「データ損失ゼロ」を保証します。書き込み操作は、ローカルストレージとリモートストレージの両方から確認されるまで完了とはみなされません。ほとんどのアプリケーションは、書き込みトランザクションが完了するまで次の処理に進むのを待つため、全体的なパフォーマンスは大幅に低下します。当然ながら、最小レイテンシは光速によって決まるため、パフォーマンスは距離に比例して低下します。10 km の距離では、最速の往復時間は 67 μs ですが、ローカルキャッシュへの書き込み全体は約 10~20 μs で完了します。
非同期レプリケーションでは、書き込み操作はローカルストレージが確認応答した時点で完了とみなされます。リモートストレージの更新にはわずかな遅延が生じます。パフォーマンスは大幅に向上しますが、ローカルストレージに障害が発生した場合、リモートストレージに最新のデータコピーが存在する保証はありません(最新のデータが失われる可能性があります)。
半同期レプリケーションでは、書き込み操作は、ローカルストレージによって確認され、リモートサーバーによって受信またはログに記録された時点で完了とみなされます。実際のリモート書き込みは非同期で実行されるため、パフォーマンスは向上しますが、リモートストレージはローカルストレージよりも遅延するため、ローカルストレージに障害が発生した場合の永続性(つまり、シームレスな透過性)は保証されません。
ポイントインタイムレプリケーションでは、プライマリストレージの代わりに、定期的にスナップショットが作成され、それが複製されます。これは、ボリューム全体ではなく、変更されたデータのみを複製することを目的としています。この方法では複製される情報量が少ないため、光ファイバー回線ではなく、 iSCSIやT1などの安価な帯域幅リンクを使用して複製を行うことができます。
多くの分散ファイルシステムは、耐障害性を確保し、単一障害点を回避するためにレプリケーションを利用している。
多くの商用同期レプリケーションシステムは、リモートレプリカが故障したり接続が切断されたりしてもフリーズせず、データ損失ゼロを保証する動作をせず、ローカルで動作を継続するため、望ましいゼロリカバリポイントの目標が失われます。
広域ネットワーク(WAN)の最適化技術を適用することで、遅延によって生じる制約に対処することができる。
ファイルベースのレプリケーションは、ストレージブロックレベルではなく、論理レベル(つまり、個々のデータファイル)でデータレプリケーションを実行します。これにはさまざまな方法があり、ほぼすべてがソフトウェアに依存しています。
カーネルドライバ(特にフィルタドライバ)を使用すると、ファイルシステム関数の呼び出しを傍受し、発生するアクティビティをキャプチャできます。これは、リアルタイムのアクティブウイルスチェッカーが使用するのと同じタイプのテクノロジーを使用します。このレベルでは、ファイルのオープン、書き込み、削除などの論理ファイル操作がキャプチャされます。カーネルドライバはこれらのコマンドを別のプロセスに送信し、通常はネットワーク経由で別のマシンに送信して、ソースマシンの操作を模倣します。ブロックレベルのストレージレプリケーションと同様に、ファイルレベルのレプリケーションでは同期モードと非同期モードの両方が可能です。同期モードでは、ソースマシンでの書き込み操作は保留され、宛先マシンがレプリケーションの成功を確認するまで実行できません。同期モードはファイルレプリケーション製品ではあまり一般的ではありませんが、いくつかのソリューションが存在します。
ファイルレベルのレプリケーションソリューションでは、ファイルの場所と種類に基づいて、レプリケーションに関する適切な判断を行うことができます。例えば、一時ファイルや、業務上の価値を持たないファイルシステムの一部を除外することが可能です。また、送信されるデータもより細かく分割できます。アプリケーションが100バイトを書き込んだ場合、ディスクブロック全体(通常4,096バイト)ではなく、100バイトのみが送信されます。これにより、送信元マシンから送信されるデータ量と、宛先マシンのストレージ負荷が大幅に削減されます。
このソフトウェアのみのソリューションの欠点としては、オペレーティングシステムレベルでの実装とメンテナンスが必要となること、およびマシンの処理能力への負荷が増加することが挙げられる。
データベースのトランザクションログと同様に、多くのファイルシステムはアクティビティをジャーナル化する機能を備えています。ジャーナルは、定期的に、またはストリーミングによってリアルタイムで別のマシンに送信できます。レプリカ側では、ジャーナルを使用してファイルシステムの変更を再生できます。
注目すべき実装例の一つとして、 2005年にリリースされたマイクロソフトのSystem Center Data Protection Manager(DPM)が挙げられる。これは定期的な更新を実行するが、リアルタイムのレプリケーション機能は提供していない。
これは、ソースファイルシステムと宛先ファイルシステムを比較し、宛先がソースと一致していることを確認するプロセスです。主な利点は、このようなソリューションが一般的に無料または安価であることです。欠点は、同期プロセスがシステム負荷の高い処理であるため、このプロセスは通常、頻繁には実行されないことです。
注目すべき実装の一つはrsyncである。
ページング方式のオペレーティングシステムでは、回転遅延を低減するために、ページングファイル内のページがトラック内で複製されることがある。
複製を利用するもう一つの例は、分散共有メモリシステムに見られます。このシステムでは、システムの多くのノードが同じメモリページを共有します。これは通常、各ノードが特定のページの個別のコピー(レプリカ)を持つことを意味します。
レプリケーションの多くの古典的なアプローチは、プライマリ/バックアップモデルに基づいています。このモデルでは、1つのデバイスまたはプロセスが、他の1つ以上のプロセスまたはデバイスを一方的に制御します。たとえば、プライマリが何らかの計算を実行し、更新ログをバックアップ(スタンバイ)プロセスにストリーミングします。バックアップ(スタンバイ)プロセスは、プライマリが故障した場合に処理を引き継ぎます。このアプローチは、データベースのレプリケーションでよく用いられますが、障害発生時にログの一部が失われた場合、バックアップがプライマリと同一の状態にならない可能性があり、トランザクションが失われるリスクがあります。
プライマリ・バックアップ方式の弱点は、実際に操作を実行するのが1つだけであることだ。耐障害性は向上するものの、同一のバックアップシステムではコストが2倍になる。そのため、1985年頃から、分散システム研究コミュニティはデータの複製における代替手法の模索を開始した。この研究の成果として、複数のレプリカが連携し、各プロセスがバックアップとして機能すると同時にワークロードの一部を処理する方式が登場した。
コンピュータ科学者のジム・グレイは、トランザクションモデルの下でマルチプライマリレプリケーション方式を分析し、そのアプローチに懐疑的な広く引用されている論文「レプリケーションの危険性と解決策」を発表しました。[ 9 ] [ 10 ]彼は、データベースをn個の互いに素なサブデータベースとして扱うことができるようにデータが自然な方法で分割されない限り、並行制御の競合によってパフォーマンスが著しく低下し、レプリカのグループはnの関数として遅くなるだろうと主張しました。グレイは、最も一般的なアプローチではO(n³)に比例する劣化が生じる可能性が高いと示唆しました。彼の解決策であるデータのパーティション化は、データに実際に自然なパーティションキーがある場合にのみ実行可能です。
1985年から1987年にかけて、仮想同期モデルが提案され、広く採用される標準として登場しました(Isis Toolkit、Horus、Transis、Ensemble、Totem、Spread 、C-Ensemble、Phoenix、Quicksilverシステムで使用され、 CORBAフォールトトレラントコンピューティング標準の基礎となっています)。仮想同期は、複数のプロセスが連携してリクエスト処理の一部を並列化するマルチプライマリ方式を可能にします。この方式は、メモリ内のデータの一部にしか適用できませんが、グループのサイズに応じて線形的な高速化を実現できます。
最新の製品の多くは、同様の方式をサポートしています。例えば、Spread Toolkit はこの仮想同期モデルをサポートしており、マルチプライマリレプリケーション方式の実装に使用できます。また、C-Ensemble や Quicksilver も同様の方法で使用できます。WANdiscoはアクティブレプリケーションに対応しており、ネットワーク上のすべてのノードが完全なコピーまたはレプリカとなるため、ネットワーク上のすべてのノードが同時にアクティブになります。この方式は、広域ネットワーク(WAN) での使用に最適化されています。
最新のマルチプライマリレプリケーションプロトコルは、共通の障害のない動作を最適化します。チェーンレプリケーション[ 11 ]は、そのようなプロトコルの一般的なファミリーです。チェーンレプリケーションの最先端のプロトコルバリアント[ 12 ]は、書き込み用にレプリカをチェーン状に配置することで、高いスループットと強力な一貫性を提供します。このアプローチでは、すべてのレプリカノードでローカル読み取りが可能ですが、複数のノードを順次通過する必要がある書き込みではレイテンシが高くなります。
より新しいマルチプライマリプロトコルであるHermes [ 13 ]は、キャッシュコヒーレントに着想を得た無効化と論理タイムスタンプを組み合わせることで、ローカル読み取りとすべてのレプリカからの高性能書き込みとの強力な一貫性を実現しています。障害のない動作中は、ブロードキャストベースの書き込みは競合せず、レプリカノードへのマルチキャストラウンドトリップが 1 回だけでコミットされます。この設計により、読み取りと書き込みの両方で高いスループットと低いレイテンシが実現されます。