0

複数のサーバーが関与するアプリケーションを構築しています。(それぞれがデータベースと Web サーバーを持つ 4 つのサーバー。1 つのマスター データベースと 3 つのスレーブ + 1 つのロード バランサー)

キャッシュを有効にする方法はいくつかあります。今のところ、それはかなり単純で、まったく効率的ではありません。すべてのキャッシュは、すべてのサーバー間の NFS パーティション共有で行われます。NFS はアーキテクチャのボトルネックです。

  1. キャッシュを実装するいくつかのアイデアがあります。サーバー レベル (ローカル ファイル システム) で実行できますが、問題は、すべてのサーバーでコンテンツが更新されたときにキャッシュ ファイルを無効にすることです。これは、キャッシュの有効期間を短くすることで実行できます (キャッシュが無効になるため効率的ではありません)。ほとんどの場合、より早く更新する必要があります)
  2. また、各サーバーが相互に通信するメッセージング システム (XMPP など) によっても実行できます。キャッシュの無効化を担当するサーバーは、他のすべてのサーバーに要求を送信して、キャッシュが無効化されたことを通知します。レイテンシーはおそらく大きくなります (キャッシュが無効化されたことを全員が知るのにより多くの時間がかかります) が、私のアプリケーションはアトミックなキャッシュの無効化を必要としません。
  3. 3 番目のアプローチは、クラウド システムを使用してキャッシュを保存することです (CouchDB など) が、このシステムのパフォーマンスについてはわかりません。SQL データベースを使用するよりも高速ですか?

Zend Framework を使用する予定でしたが、実際には関係がないと思います (XMPP、CouchDB を処理するために他のフレームワークにおそらくいくつかのパッケージが存在することを除いて)。

要件: 永続キャッシュ (サーバーが再起動した場合、キャッシュの再作成中にサーバーがダウンするのを避けるために、キャッシュが失われてはなりません)

4

3 に答える 3

5

http://www.danga.com/memcached/

Memcached は、メッセージベースの読み取り、コミット、および無効化など、設定した要件のほとんどをカバーします。高可用性と高速ですが、アトミックな信頼性はほとんどありません (パフォーマンスが犠牲になります)。

(また、memcached は YouTube、Wikipedia、Facebook などに力を与えているため、多くの分散キャッシング オプションを真剣に評価するための時間、資金、才能を備えた組織が memcached で解決することはかなり確立されていると思います!)

編集(コメントに応じて) キャッシュのアイデアは、バッキングストアと比較して比較的一時的なものにすることです。キャッシュ データを長期間保持する必要がある場合は、(a) データ層を非正規化してパフォーマンスを向上させるか、(b) 大量のデータをストレート キーに格納する中間層データベース サーバーを追加することを検討することをお勧めします。値ペア テーブル、またはそれに近いもの。

于 2009-01-28T02:47:34.820 に答える
2

キャッシュ ストアとしての memcached を守るために、サーバーの再起動の影響を抑えて高いパフォーマンスが必要な場合は、memcached サーバーを 4 つだけ使用しないでください。それとも8?それぞれの「再起動」は、それに応じてデータベース サーバーへの影響が少なくなります。

于 2009-07-24T11:50:10.600 に答える
1

比較的良い解決策を見つけたと思います。

Zend_Cache を使用して、各キャッシュ ファイルをローカルに保存します。キャッシュ ファイルもローカルで管理する nanoserver に基づく小さなデーモンを作成しました。1 つのサーバーがローカルでキャッシュ ファイルを作成/変更/削除すると、同じアクションを実行するデーモンを介してすべてのサーバーに同じアクションが送信されます。

つまり、ローカル キャッシュ ファイルとリモート アクションが同時に存在するということです。おそらく完璧ではありませんが、今のところ動作するはずです。CouchDB は遅すぎ、NFS は信頼性が十分ではありませんでした。

于 2009-02-05T10:40:05.090 に答える