この種のアプリケーションでは、AmazonのDynamoデザインが本当に気に入っています。リンク先のドキュメントはかなり大きいですが、読む価値があります。実際、このアプローチをすでに実装しているアプリケーションがあります。
多分他の人ですが、私は知りません。CassandraはFacebook内で開始され、VoldemortはLinkedInで使用されているものです。物事を分散させ、データ分散に冗長性を追加することで、従来のマスタースレーブレプリケーションアプローチから離れることができます。
PostgreSQLを使い続けたいのであれば、そのようなアプローチを実装することは大したことではないはずです。事前に構成されたオプションに基づいてデータの取得/保存方法を決定する追加のレイヤー(プロキシ)を実装する必要があります。
プロキシ層は次の場所に実装できます。
- アプリケーション(多くの作業が必要ですIMHO);
- データベース;
- ミドルウェアとして。
Skypeで作成されたプロジェクトであるミドルウェアレイヤーでPL/Proxyを使用できます。PostgreSQLに深く統合されているので、オプション2と3の組み合わせだと思います。PL/ Proxyでは、データベースに対するあらゆる種類のクエリに関数を使用する必要があります。パフォーマンスの問題が発生した場合は、PgBouncerを使用できます。
最後の注意:どのような方法でも、既知の量の開発が必要になります。
編集:
それはすべて、あなたが「失敗」と呼ぶものと、システムが中断された状態にあるとあなたが考えるものに依存します。
pgpoolの機能を見てみましょう。
接続プールPostgreSQLは、セッションごとに1つのプロセス(フォーク)を使用しています。明らかに、非常に忙しいサイトがある場合は、OSの制限に達します。これを克服するために、接続プーリーが使用されます。また、リソースを均等に使用できるため、通常、データベースの前にプーリーを配置することをお勧めします。
pgpoolが停止した場合、データベースにアクセスできない多数のクライアントに直面します。プーリーを避けてデータベースに直接ポイントすると、パフォーマンスの問題が発生します。
レプリケーションすべてのクエリはスレーブインスタンスに自動レプリケーションされます。これは、DMLおよびDDLクエリにとって意味があります。
pgpoolが停止した場合、pgpoolの外部で変更の追跡が行われないため、レプリケーションが停止し、スレーブはマスターに追いつくことができなくなります(私が知る限り)。
負荷分散読み取り専用クエリは複数のインスタンスに分散され、優れた応答時間を実現し、システムにより多くの帯域幅を割り当てることができます。
pgpoolが停止した場合、システムがそのような負荷を処理できる場合、クエリの実行は突然遅くなります。そしてこれは、失敗したpgpoolの代わりにマスターデータベースが追いつく場合です。
超過接続の制限pgpoolは、接続をすぐに処理できない場合に備えて、接続をキューに入れます。
pgpoolが停止した場合、そのような接続はすべて中止され、DB /アプリケーションプロトコルにブレーキがかかる可能性があります。つまり、アプリケーションは接続が中止されないように設計されています。
並列クエリ応答時間を短縮するために、単一のクエリが複数のノードで実行されます。
pgpoolが停止した場合、そのようなクエリは不可能になり、処理が長くなります。
このような状況に直面しても問題がなく、それらを失敗として扱わない場合は、pgpoolが役立ちます。また、5分間の停止で会社に数千ドルの費用がかかる場合は、より確実なソリューションを探す必要があります。
停止のコストが高いほど、フェイルオーバーシステムをより細かく調整する必要があります。通常、フェイルオーバーの自動化を実現するために使用されるツールは1つだけではありません。それぞれの失敗で、あなたは微調整する必要があります:
- すべてのクライアントの再構成が必要な場合を除き、DNS。
- バックアップとフェイルオーバー手順を再初期化します。
- 古いマスターが戻ってきた場合にその役割のために戦おうとしないことを確認してください(STONITH);
- 私の経験では、適切な戦略を決定するのはDBA、SysAdmin、アーキテクト、運用の各部門の人々です。
最後に、私の見解では、pgpoolは優れたツールであり、私はそれを使用しています。ただし、完全なフェイルオーバーソリューションとして設計されているわけではなく、特別な思考、対策、スクリプトの作成が必要です。したがって、私は分散データベースへのリンクを提供しました。それらははるかに高いレベルの可用性を提供します。
また、PostgreSQLは拡張性が高いため、少しの労力で配布できます。