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