はじめに
現代の多くのアプリケーションでは、バックエンドは分散データベースを使用して構成されています。データは、単一のデータベースサーバーに依存するのではなく、データベースサーバーの配置、またはクラスタを使用して保存および処理されます。分散モデルにより、データベースサーバーの 1 つに障害が発生した場合でも、データにアクセスできることが保証されます。ただし、分散アプローチでは、分散システム内のすべてのアクターが、エンドユーザーが返されることを期待している情報で最新の状態になっていることを確認するという問題が発生します。これにより、このガイドのトピックであるデータベースレプリケーションが紹介されます。
このガイドでは、データベースレプリケーションとは何かについて説明し、分散システムにデータベースレプリケーションプロセスを導入する主な利点について説明します。
データベースレプリケーションとは?
データベースレプリケーションは、ネットワーク経由で接続された複数のマシンでデータのコピーを維持するプロセスです。このプロセスは、次の図のように視覚化できます。ここでは、リードデータベースがフォロワーに情報を送信してレプリケートしています。
この画像は特定の種類のデータベースレプリケーションアーキテクチャを示していますが、レプリケーションはさまざまな方法で実行することもできます。主な目標は常に同じであり、その目標は、最新のデータの複数の同一コピーを異なる場所に保持することです。
データベースレプリケーションの利点
はじめにで簡単に述べたように、分散データベースを持ち、したがってデータベースレプリケーションを実装したいと思う理由はいくつかあります。最も一般的な利点には、次のものがあります。
- データの可用性を向上させる
- データアクセス速度を向上させる
- サーバーのパフォーマンスを向上させる
- 災害復旧の準備を達成する
- 分析を改善する
データの可用性を向上させる
レプリケーションは、単一障害点への依存を回避し、データベースアクセスを失うことを防ぐため、データの可用性を向上させます。技術的な不具合、停電、または単一障害点に影響を与える可能性のあるさまざまな事象が発生した場合、アプリケーションはその適切な機能に必要なデータにアクセスできなくなります。
データレプリケーションは、データを複数のノードに保存することで、システムの回復力と信頼性を高めます。1 つのノードがダウンした場合でも、まったく同じデータを持つ別のノードが立ち上がり、オペレーションをスムーズに実行し続けることができます。
データアクセス速度を向上させる
大規模組織と小規模組織の両方にとって、グローバルにユーザーが存在する可能性があります。地理的に分散されたデータベースレプリケーションは、特定のデータを必要とする組織内のすべてのユーザーが、タイムリーに、そして過度の遅延なしにデータを入手できるようにするのに役立ちます。
データがアクセスされている場所に近くのローカルサーバーにデータをレプリケートすると、ユーザーはより高速なデータアクセスとクエリを利用できます。組織が米国に単一ノードを持っている場合、ヨーロッパでデータをプルしようとしているユーザーは、アクセスしようとすると遅延が発生する可能性があります。米国にクラスターがあり、ヨーロッパにもレプリケートされたクラスターがある組織は、このユーザーが必要なときに必要なデータを使用して効率的に作業できるようにします。
サーバーのパフォーマンスを向上させる
データベースレプリケーションは、データベースのプライマリサーバーの負荷も軽減します。データが単一サーバーでのみアクセス可能である場合、そのサーバーはデータベースへのすべてのリクエストを処理することになります。レプリケーションを使用すると、その負荷を分散システム内の他のノードに分散できます。すべてのノードにデータの同一のレプリカがあるため、一部のクエリはセカンダリノードによって処理され、プライマリは特定の読み取りまたは書き込みのみを処理するために残されます。
プライマリを書き込み操作の処理のために保存することは有益であることが証明できます。プライマリがすべての読み取りと書き込みを処理していた場合、サーバーのリソースに不要な負担がかかる可能性があるためです。プライマリからの読み取りは、データベースに着信するオペレーションが多くない状況では理にかなっている場合があります。ただし、スケーリングと成長の時代には、すべての負荷を単一ノードに集中させるのではなく、分散システム全体にタスクを委任することがベストプラクティスです。
災害復旧の準備を達成する
大惨事の場合、レプリケーションは失われたり破損したりしたものの復旧も保証します。レプリカは変更を継続的に適用するため、バックアップ自体ではありませんが、データベースバックアップのターゲットになる可能性があります。
たとえば、データをバックアップする場合は、セカンダリの 1 つでレプリケーションを一時的にオフにして、データ整合性のある状態にし、書き込み操作が着信しなくなったときにデータをバックアップしてから、レプリケーションを再開して新しい更新をキャッチアップできます。レプリカは、オペレーションを中断することなく、災害復旧のターゲットとなる整合性のあるデータのスナップショットを提供します。
レプリケーションが災害復旧の準備を促進するもう 1 つの方法は、レプリカを遅延フォロワーとして明示的に構成することです。このレプリカは、定義された時間の遅延でオペレーションを適用します。この遅延により、データベース監視チームは問題を認識し、破損したプライマリからの変更をレプリカに適用することを回避できます。その後、レプリケーションをオフにして、オペレーションを継続するために準備完了のほとんど最新のサーバーを用意できます。
これらの方法は、データベースレプリケーションなしでは存在しない強化されたデータ保護のレベルを追加します。
分析を改善する
サーバーパフォーマンスの向上から言及された利点と同様に、レプリケーションにより、分析専用のノードを割り当てることができます。単一のサイト/ノードの外部で利用可能なデータの正確なレプリカを持つことで、データに対して分析を実行するためだけに使用されるセカンダリを持つオプションができました。
これにより、書き込み操作やその他の重い読み取りを処理するノードは、データベースユーザーからの分析クエリを処理することによっても負担をかけられなくなります。たとえば、過去四半期のユーザー成長レポートをまとめるためにデータをプルしている分析チームは、専用のノードを使用できるようになり、コアノードに不要な負荷をかけることはありません。これにより、分析チームが経験するパフォーマンスが向上し、プライマリから不要な負荷が軽減されます。すべて、完全に同じで最新のデータを使用します。
まとめ
データベースレプリケーションは、分散データシステムを成功させるために実装する重要なプロセスです。この記事では、データベースレプリケーションとは何か、および新規または既存のアプリケーションに追加する利点について簡単に紹介しました。
データベースレプリケーションは、すべてのサイズに適合するプロセスではないため、構成時にチームにとって最も重要な利点を理解することが重要です。追加のガイドで、学習した利点を取り上げ、最も一般的なデータベースレプリケーションアーキテクチャ、方法、およびタイプについて説明します。
Prisma Clientでデータベース移行を実行するには、Prisma Migrate ツールを使用します。Prisma Migrate は、スキーマファイルを分析し、移行ファイルを生成し、ターゲットデータベースに適用します。