大規模にスケーラブルな分散共有メモリ(DSM)アプリのプロトタイプを作成するタスクがあります。プロトタイプは概念実証としてのみ機能しますが、後で実際のソリューションで使用されるコンポーネントを選択することで、最も効果的に時間を費やしたいと思います。
このソリューションの目的は、外部ソースからデータ入力を取得してチャーンし、その結果を多くのフロントエンドで利用できるようにすることです。これらの「フロントエンド」は、キャッシュからデータを取得し、追加の処理なしで提供します。このデータのフロントエンドヒットの量は、文字通り1秒あたり数百万に達する可能性があります。
データ自体は非常に不安定です。それは非常に急速に変化する可能性があります(そして実際に変化します)。ただし、フロントエンドには、最新のデータが処理されてキャッシュされるまで、「古い」データが表示されます。処理と書き込みは単一の(冗長)ノードによって実行されますが、他のノードはデータの読み取りのみを行います。言い換えれば、読み過ごしの動作はありません。
memcached のようなソリューションを検討していましたが、この特定のソリューションはall以下にリストされている要件を満たしていません。
アイデアを事前に感謝します。
ヘーゼルキャスト をご覧ください。これは純粋なJava、オープンソース(Apacheライセンス)の高度にスケーラブルなインメモリデータグリッド製品です。 7X24のサポートを提供します。そして、それは私が以下でそれらのそれぞれを説明しようとしたあなたのすべての問題を解決します:
Redisson --RedisベースのインメモリデータグリッドforJavaを使用することをお勧めします。器具(BitSet
、BloomFilter
、Set
、SortedSet
、Map
、ConcurrentMap
、List
、Queue
、Deque
、BlockingQueue
、BlockingDeque
、ReadWriteLock
、Semaphore
、Lock
、AtomicLong
、CountDownLatch
、Publish / Subscribe
、RemoteService
、ExecutorService
、LiveObjectService
、SchedulerService
) Redis サーバーの上に!マスター/スレーブ、センチネル、クラスターサーバーモードをサポートします。自動クラスター/センチネルサーバートポロジ検出もサポートされています。このライブラリは無料でオープンソースです。
AWS Elasticacheサポートのおかげで、クラウドで完全に機能します
好みに応じて、CAP定理からAPに向かっている場合は、Hazelcastを提案して他の人をフォローしますが、CPが必要な場合は、 Redis を選択します。
CoherenceのようなJava固有のソリューションをチェックアウトすることをお勧めします: http://www.Oracle.com/global/ru/products/middleware/coherence/index.html
ただし、そのようなソリューションは複雑すぎると考えており、memcachedなどのソリューションを使用することを好みます。あなたの目的のためのmemcachedの大きな欠点は、レコードロックがないことであり、フェイルオーバーのためにデータを複製する方法が組み込まれていません。そのため、Key-Valueデータストアを調べます。それらの多くはあなたのニーズを完全に満たすでしょう。
タスクに役立つ可能性のあるKey-Valueデータストアのリストは次のとおりです。 http://www.metabrew.com/article/anti-rdbms-a-list-of-distributed-key-value-店舗 あなたが快適に満たすものを1つ選んでください。
私は同様のプロジェクトを行っていますが、代わりに.NETプラットフォームを対象としています。すでに述べた解決策とは別に、 ScaleOut StateServer および Alachisoft NCache を確認する必要があると思います。私の判断によれば、これらの選択肢はどちらも安価ではないのではないかと思いますが、商用ソリューションのオープンソースよりも安全です。
全体として、StateServerは、キャッシュクラスター内の細部の構成をスキップしたい場合に最適なオプションですが、NCacheは、非常に多くの機能とキャッシュトポロジから選択できます。
クライアントに対するデータの動作によっては(データが同じクライアントから何度も読み取られる場合)、クライアントのローカルキャッシュとクラスターの分散キャッシュ(NCacheとStateServerの両方で使用可能)を混在させることをお勧めします。 、 ちょっとした考え。
指定されたユースケースは、Netflixの Hollow に当てはまるようです。これは、単一のプロデューサーと複数のコンシューマーを持つ読み取り専用のレプリケートされたキャッシュです。
TerracottaのJVMクラスタリングを見てください。OpenSourceです;)JVMレベルで効率的に動作している間は、APIがありません。複製されたオブジェクトに値を格納すると、他のすべてのノードに送信されます。ロックやそれらすべてのものでさえ、新しいコードを追加することなく透過的に機能します。