1

私は、LDAP システムでのレプリケーションの遅延を補うプロセスを構築する任務を負っています。現在、1 つの書き込みサーバーと 4 つの読み取りサーバーがあります。エントリを書き込みサーバーに書き込んだ後、エントリが読み取りサーバーに複製されるまでに、システムで最大 4 秒の遅延が発生する可能性があります。したがって、レコードを更新するサービス「A」を呼び出し、その直後にそのレコードを読み取るサービス「B」にアクセスすると、データが古くなります。

この問題を解決するために、アプリケーションがデータベースと直接インターフェイスするのではなく、キャッシュ サービスを介してインターフェイスするように、キャッシュ Web サービスを構築することを計画していました。サービスは、すべての作成、更新、および削除をキャッシュ (おそらくList<ModelObject>) に格納します。CRUD - R エントリは、最低 4 秒間キャッシュに残る必要があります。次に、サービス「B」が読み取りを試みると、キャッシュ サービスは、データベースで読み取り操作を実行する前にキャッシュをチェックします。

だから、私の質問は2つの部分です。1) これは実行可能な解決策ですか? そうでない場合、どのような問題がありますか? 2) WCF サービス内でキャッシュに対してメンテナンスを行うにはどうすればよいですか。つまり、キャッシュから 4 秒経過したエントリをクリアするバックグラウンド ワーカー スレッドを開始する方法はありますか?

4

2 に答える 2

1

#1に関しては、それは実現可能だと思いますが、独自のキャッシングレイヤーを生成することには、独自の困難と落とし穴があります。(要求の負荷を処理できる4つの分散LDAPサーバーとは対照的に)1つのキャッシングサーバーにすべての負荷をかける以外に、頭から離れて考えることはできません。

#2に関しては、Enterprise Library Caching Application Blockを確認することをお勧めします。これには、時間や期間などに基づく清掃など、必要なすべての機能が備わっていると思います。

于 2010-06-22T00:44:24.883 に答える
1

この問題を解決するために、アプリケーションがデータベースと直接インターフェイスするのではなく、キャッシングサービスを介してインターフェイスするように、キャッシングWebサービスを構築することを計画していました。

私にとって正しい解決策のように聞こえます。

.NETには、それを簡単にするためのいくつかのキャッシュライブラリが含まれています。これが私のお気に入りです:

http://www.infoq.com/news/2010/05/Runtime.Caching http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

言い換えると、4秒前のエントリをキャッシュからクリアするバックグラウンドワーカースレッドを開始する方法はありますか?

あなたはする必要はありません。アイテムをキャッシュに追加するときは、expirationTimeを(Now + 4秒)に設定するだけです。

しかし、実際には有効期限は必要ありません。これが値を変更する唯一の方法である場合は、期限切れになることはありません。

于 2010-06-22T00:44:57.567 に答える