キャッシュの問題に対する適切な解決策を探しています。次のように、Web サーバーのクラスター間で比較的少量のデータ (おそらく数十 GB) を分散させたいと考えています。
- データはすべてのノードに複製されます
- データは永続的です
- ローカルでデータにアクセスできる
キャッシング ソリューションを選択する動機は、現在、SQL Server データベースに単一障害点があることです。残念ながら、このデータベースのフェールオーバー クラスターをセットアップできません。すでに Memcached をかなりの範囲で使用していますが、Memcached ノードがダウンした場合に突然大量のキャッシュ ミスが発生し、1 つのエンドポイントに対して大量のリクエストが発生するという問題を回避したいと考えています。
代わりに、結果として生じる負荷が分散されるように、各 Web サーバー ノードにローカル永続キャッシュを配置することをお勧めします。検索が行われると、次を通過します。
- Memcached でデータを確認します。それがなければ...
- ローカル永続ストレージ内のデータを確認します。それがなければ...
- データベースからデータを取得します。
データが変更されると、両方のキャッシュ レイヤーでキャッシュ キーが無効になります。
私たちは多くの潜在的な解決策を検討してきましたが、どれも私たちが必要としているものと正確に一致していないようです:
CouchDB
これはかなり近いです。キャッシュしたいデータ モデルは非常にドキュメント指向です。ただし、その複製モデルは、まさに私たちが探しているものではありません。レプリケーションは、ノード間の永続的な関係ではなく、実行する必要があるアクションのように思えます。連続レプリケーションをセットアップできますが、これは再起動間で保持されません。
カサンドラ
このソリューションは、主に大規模なストレージ要件を持つユーザー向けのようです. 大量のユーザーがいますが、データは少量です。Cassandra はn個のフェイルオーバー ノードをサポートできるように見えますが、ノード間の 100% のレプリケーションは意図したものではないようです。代わりに、配布のみを対象としているようです。
さん
魅力的なアイデアの 1 つは、SAN または同様のタイプのアプライアンスに多数のファイルを格納できるというものです。私は以前にこれらを使用したことはありませんが、これはまだ単一障害点になるようです。SAN がダウンした場合、すべてのキャッシュ ミスについて突然データベースにアクセスすることになります。
DFS レプリケーション
簡単なGoogle検索でこれが明らかになりました。私たちが望むことをしているようです。レプリケーション クラスタ内のすべてのノード間でファイルを同期します。しかし、マーケティングのテキストを見ると、ドキュメントが別のオフィスの場所に確実にコピーされるようにするためのシステムのように見えます。また、ファイル数の最大値などの制限があり、うまく機能しません。
私たちと同様の要件があり、ニーズを満たす優れたソリューションを見つけた人はいますか?