問題タブ [distributed-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - ASP.NET を実行している Web ファームの分散キャッシュに何を使用していますか?
この状況で他の人が何を使用しているのか、私は興味があります。memcached ポートや ScaleOutSoftware など、いくつかの選択肢があることを知っています。memcached ポートは積極的に取り組んでいないようです (間違っていたら訂正してください)。ScaleOutSoftware は私には高すぎます (それだけの価値があることは間違いありません)。これは、memcached や ScaleOutSoftware を使用している人々について聞きたくないということではありません。この時点で私が「知っている」ことを述べているだけです。
私の質問は基本的にこれです:分散キャッシュを積極的に使用している方は、何を使用していますか?
私はすぐに 2 つのサーバーに移動します...どちらも同じ場所に配置されます。データベース サーバーの負荷を軽減するために、かなり頻繁に (ただし慎重に) キャッシュを使用しています。
編集: Scaleout Software のソリューションをダウンロードしました。私はそれをコーディングしましたが、本当にうまくいくようです。私の財布がそのために現金を手放すかどうかを決めなければなりません。:) ScaleoutSoftware で良い経験も悪い経験もした人はいますか?
もう一度編集:これを尋ねてから少し時間が経ちましたか?それ以上の考えはありますか?最終的に ScaleOutSoftware からソリューションを購入して満足していますが、他の人が何をしているのか気になります。
.net - MS Velocity は生産の準備ができていますか?
実稼働環境で速度を試した人はいるのだろうか。現在はCTP2版で、使用を考えています。誰も試したことがありますか?はいの場合、それはポジティブな経験でしたか?
distributed-cache - 分散キャッシュ内の「実際の」オブジェクト参照?
私は個人的に .net 分散キャッシング ソリューションに取り組んでいますが、この質問はすべてのプラットフォームで興味深いと思います。
オブジェクト間の参照の整合性を維持しながら、オブジェクトをキャッシュに格納できる分散キャッシング ソリューション (または一般的な戦略) はありますか?
例として - オブジェクトFoo foo
を参照するオブジェクトBar bar
と、それを参照するオブジェクトFoo foo2
があるとしますBar bar
。foo
キャッシュにロードすると、 のコピーがbar
一緒に保存されます。foo2
キャッシュにもロードすると、 の別のコピーがbar
一緒に保存されます。キャッシュを変更foo.bar
しても、変更は影響しませんfoo2.bar
:(
参照を維持しながら をロードしてキャッシュに入れるfoo
ことfoo2
ができる既存の分散キャッシュ ソリューションはありますか?bar
foo.bar
foo2.bar
distributed-cache - ネイティブ言語でオブジェクトを処理できる共有状態分散システムには、どのようなものがありますか?
私の知る限り、テラコッタとリニアモーターカーがあります。他にもありますか?
java - OracleCoherenceのデータストアとしてシリアル化されたファイルを使用した分散キャッシュ
奇妙ですが、分散キャッシュの代わりとしてOracleCoherenceを調査しています。私の主な問題は、現在のようにアプリに分散キャッシュがないことです。それが私の最大の関心事です。そして、それが私が実装したいものです。したがって、マシンを取り上げて新しい(3番目の)読み取りプロセスを開始すると、キャッシュに接続してキャッシュをリッスンでき、キャッシュのフルセットが3倍になります(現在は複製されています)。さて、それは一般人の立場からも無駄です。キャッシュのサイズは2GBであり、分散されることなく、制限されます。
それは私をCoheremceに連れて行きます。
しかし今では、永続ストアとしてのデータベースもありません。永続ストアとしてアーカイブプロセスがあります。(90日分のデータ)さて、これに約2 GB * 90のsoemを掛けます(これは、保持したい最低限のデータです)。
ソリューションとしてのコヒーレンスの予備/中間分析。
そして(おそらく)素晴らしい考えが私の頭をよぎった。これを分散キャッシュの永続ストレージとして使用してみませんか。OracleCoherenceはそれをサポートしていますか。アーカイブインフラストラクチャも削除します(デーモンのアーカイブプロセスは嫌いです)。いくつかの厳しい理由で、私はそれらのフラットファイルを置き換えるためにDBに行きたくありません。
コヒーレンスは私の救世主になることができますか?他の安定した代替品もあります。(コヒーレンスは大物によって私に課せられます、参考までに)
java - スキップ リストに似た分散キャッシュ ソリューションはありますか?
ピークを許可する同時優先キューをシミュレートし、任意のインデックスから優れたパフォーマンスで削除するオープン ソース (または独自の) フレームワークがあるかどうか疑問に思っていました。
現在ConcurrentSkipList
、JDK で利用できるものを使用していますが、基本的にはこれを複数の JVM で共有する必要があります。
最も難しい部分は、キューをポーリングするときに次のようなことをしていることです。
一部の分散キャッシュではクエリを実行できますが、この操作はパフォーマンスが集中するため、キャッシュを大量にクエリすることが適切かどうかはわかりませんでした。
誰かそのようなことを聞いたことがありますか?
c# - Windows用の高可用性オプションを備えたクエリ可能な分散キャッシュはありますか?
ある種の分散キャッシュをシステムに統合しようとしています。2つの主要な要件があります。
- 高可用性。つまり、ミラーリングマシンへの自動データレプリケーション。これにより、1台がダウンした場合でも、データが存在します。
- キャッシュデータの検索可能性/定量性。つまり、遠隔検索を実行する必要があります。
- オプション:保存されたデータの完全なスナップショットを返します。
- オプション:キャッシュされたデータを定期的に保持する機能。
これまでのところ、少なくとも正規表現を使用して検索できるため、候補としてSharedCacheしかありません。しかし、それは本質的に遅いです。SharedCacheは高可用性をサポートしていません。Windows App Fabricはそれを提供しますが、私が理解している限り、検索はありません(私が間違っている場合、それは素晴らしいことです)。
私のオプションは何ですか?質問するのは多すぎますか?私はあきらめて、ある種のカスタムソリューションについて考える必要がありますか?
c# - Memcached: クライアント キャッシュの更新通知
たとえば、Memcached の .NET クライアントを見てみましょう。
ご存知のように、データをキャッシュ サーバーに入れたい場合は、Cache.Add(string key, object data)
のような API を呼び出します。memeched クライアントはデータをシリアル化data
し、キャッシュ サーバーに送信します。がdata
複雑なオブジェクト (大きなオブジェクト グラフを持つ) である場合、シリアル化プロセスは非常に遅くなる可能性があります。そこで、分散キャッシュとインメモリ キャッシュの 2 レベル キャッシュを使用してみます。
アプリケーション コードは、常にインメモリ キャッシュにキャッシュされたデータを要求します。インメモリ キャッシュにキャッシュ データがない場合は、キャッシュ サーバーにキャッシュ データを要求します。インメモリ キャッシュはシリアル化操作を必要とせず、アプリケーションに非常に近いため、インメモリ キャッシュを使用するとパフォーマンスが向上します。
ただし、同期の問題があります。1 つの Web サーバーがデータを変更すると、データベース、そのインメモリ キャッシュ、および分散キャッシュが更新されます。ただし、他の Web サーバーはこの「更新」イベントについて通知されないため、インメモリ キャッシュは更新されません。
問題は、1 つの Web サーバーがデータを更新したときに (インメモリ キャッシュを更新できるように)、他の Web サーバーに通知するにはどうすればよいかということです。ありがとう!
ところで:キャッシュされたデータを「プッシュ同期」方式で同期したい。つまり、キャッシュされたデータは、変更された場合にのみ更新されます。私のアプリケーションでは、多くの読み取りがあり、一部の書き込みしかないためです。
hibernate - 分散Ehcacheを使用して同じdbスキーマで複数のHibernateSessionFactoriesを実行する方法
n個のクライアント(現時点では55個)のシステムがあり、各クライアントはまったく同じスキーマを持つ独自のデータベースを取得します。分散ehcacheに支えられたhibernate3.6.1を実行しています。これは、実行時に「怠惰に」jvm(HashMapに格納されている)ごとにクライアントごとに1つのSessionFactoryを作成するSessionFactoryServiceを介してデータベースごとにSessionFactoryで実装されているため、SessionFactoriesのアプリケーション管理セットを実行しています。基本的な休止状態の構成ファイルが1つあり、残りの設定は作成時にプログラムで実行されます。私たちのリポジトリ(またはより一般的に呼ばれるDAO)には、SessionFactoryServiceを介してSessionFactoryへのアクセスが許可されます。配布されているSingltonEhcacheRegionFactoryに裏打ちされたHibernateの第2レベルのキャッシュを最大限に活用しています。jvmごとにn個のSessionFactoriesを実行しているため、キャッシュ間の同期を維持しようとしている間、SessionFactories間のjvm間通信が多すぎるため、非SingltonEhacheRegionFactory(つまり、SessionFactoryごとにCacheManagerを持つ)は必要ありません。したがって、必要なのはサーバー間の通信のみであり、サーバー内の通信ではありません。これは、SingltonEhcacheRegionFactoryを介して実現されています。
さて、ここから楽しみが始まります。上記の設定では、データベーススキーマとして一意のキーを保証する方法がないため、キャッシュの衝突が発生します。したがって、それらをサポートするエンティティオブジェクトはSessionFactories全体で同じです。それらを一意にするために、上記のプログラム構成手順を使用して、フィールドhibernate.cache.region_pre-fixをSessionFactoryごとに一意の値に設定しました。これは、第2レベルのキャッシュに関するHibernateの見解を満たしていますが、基盤となるシングルトンehcacheに問題があります。ehache.xml構成ファイルで指定された構成のキャッシュ名にキャッシュプレフィックスがないため、正しい構成を見つけることができません(また、プレフィックスごとにキャッシュ構成ごとに重複するエントリが必要になるため、 n個あります)。これにより、以下のエラーが発生します。
10:37:38,389警告AbstractEhcacheRegionFactory:201-Hibernate構成にTransactionManagerLookupが見つかりません。XAキャッシュは2フェーズコミットに参加します!10:37:39,675警告AbstractEhcacheRegionFactory:143-[some_prefix.adc]という名前のキャッシュの特定のehcache構成が見つかりませんでした。デフォルトを使用します。10:37:40,328警告AbstractEhcacheRegionFactory:143-[some_prefix.org.hibernate.cache.UpdateTimestampsCache]という名前のキャッシュの特定のehcache構成が見つかりませんでした。デフォルトを使用します。10:37:40,331警告AbstractEhcacheRegionFactory:143-[some_prefix.org.hibernate.cache.StandardQueryCache]という名前のキャッシュの特定のehcache構成が見つかりませんでした。デフォルトを使用します。
したがって、問題は、jvm環境ごとに分散された単一のehcacheを使用して複数のSessionFactoryをどのように実現できるかということです。リージョンプレフィックス対応になるようにehcacheを構成する方法はありますか?私たちが実装したソリューションは、せいぜいハッキーです。SingltonEhcacheRegionFactoryを拡張する独自のhibernate.cache.region.factory_classを実装しました(そして、hibernateキャッシュ領域プレフィックス構成を削除しました)。私たちの実装は、基盤となるEhcacheへのメソッド呼び出しをインターセプトし、キャッシュ操作に使用されるすべてのキーにプレフィックスを追加するだけで、キャッシュの衝突を防ぎます。より「すぐに使える」ソリューションが必要であり、明らかな理由から、それは機能しますが、実装したものは理想的ではありません。私はその問題についておそらく見つけることができるすべてを読みましたが、tは、分散された第2レベルのキャッシュを使用して、同じスキーマで(そして最も重要なことに)複数のSessionFactoriesに対処するソリューションを見つけました。任意のアイデア、解決策、またはアドバイスをいただければ幸いです。誰かが要件に対処するための良い方法を持っているなら、私はまったく異なる設計を受け入れることさえできます。前もって感謝します!