24

大規模にスケーラブルな分散共有メモリ (DSM) アプリのプロトタイプを作成するタスクがあります。プロトタイプは概念実証としてのみ機能しますが、後で実際のソリューションで使用されるコンポーネントを選択することにより、最も効率的に時間を費やしたいと考えています.

このソリューションの目的は、外部ソースからデータ入力を取得し、それをチャーンして、結果を多くのフロントエンドで利用できるようにすることです。これらの「フロントエンド」は、キャッシュからデータを取得し、追加の処理なしで提供します。このデータに対するフロントエンド ヒットの量は、文字通り 1 秒あたり数百万になる可能性があります。

データ自体は非常に不安定です。それは非常に急速に変化する可能性があります(実際に変化します)。ただし、最新のデータが処理されてキャッシュされるまで、フロントエンドには「古い」データが表示されます。処理と書き込みは単一の (冗​​長) ノードによって行われ、他のノードはデータの読み取りのみを行います。つまり、リードスルー動作はありません。

memcachedのようなソリューションを検討していましたが、この特定のソリューションは、以下にリストされているすべての要件を満たしていません。

  1. アプリの残りの部分は Java で記述されており、私たちは経験豊富な Java 開発者であるため、ソリューションには少なくともJava クライアント APIが必要です。
  2. ソリューションは完全に柔軟でなければなりません。クラスター内の他のノードを再起動せずに新しいノードを追加できる必要があります。
  3. ソリューションはフェイルオーバーを処理できる必要があります。はい、これは多少のオーバーヘッドを意味することを認識していますが、提供される全体的なデータ サイズは大きくない (最大 1G) ため、これは問題にはなりません。「フェイルオーバー」とは、ノードがダウンしたときにmemcachedクライアントのようにサーバーIPアドレスをハードコーディング/変更せずにシームレスに実行することを意味します。
  4. 理想的には、データの重複の程度を指定できるようにする必要があります (たとえば、同じデータのコピーを DSM クラスターにいくつ保存するか)。
  5. すべてのデータを永続的に保存する必要はありませんが、一部のデータの後処理 (DB へのシリアル化など) が必要になる場合があります。
  6. 価格。もちろん、私たちは無料/オープン ソースを好みますが、解決策に価値がある場合は、妥当な金額を喜んで支払います。いずれにせよ、有償の 24 時間 1 日サポート契約は必須です。
  7. すべてをデータセンターでホストする必要があるため、Amazon SimpleDB などの SaaS サービスは対象外です。他に選択肢がない場合にのみ、これを検討します。
  8. 理想的には、ソリューションは厳密に一貫しています(CAP のように)。ただし、最終的な一貫性はオプションと見なすことができます。

アイデアをお寄せいただきありがとうございます。

4

8 に答える 8

27

Hazelcastをご覧ください。これは、純粋な Java、オープン ソース (Apache ライセンス) の拡張性の高いインメモリ データ グリッド製品です。7X24 サポートを提供します。そして、それはあなたの問題をすべて解決します。以下でそれぞれを説明しようとしました:

  1. ネイティブ Java クライアントを備えています。
  2. 100% ダイナミックです。ノードを動的に追加および削除します。何も変更する必要はありません。
  3. ここでもすべてが動的です。
  4. バックアップ ノードの数を設定できます。
  5. Hazelcast サポートの永続性。
  6. Hazelcast が提供するものはすべて無料 (オープン ソース) であり、エンタープライズ レベルのサポートを提供します。
  7. Hazelcast は単一の jar ファイルです。とても使いやすいです。jar をクラスパスに追加するだけです。メインページのスクリーンキャストをご覧ください。
  8. Hazelcast は厳密に一貫性があります。古いデータを読み取ることはできません。
于 2010-06-17T13:33:05.713 に答える
5

Redisson - Redis ベースの Java 用インメモリ データ グリッドを使用することをお勧めします。Redisサーバーの上に( BitSetBloomFilterSetSortedSetMapConcurrentMapListQueueDequeBlockingQueueBlockingDequeReadWriteLockSemaphore、)を実装します! マスター/スレーブ、センチネル、およびクラスター サーバー モードをサポートしています。自動クラスタ/センチネル サーバー トポロジ検出もサポートされています。このライブラリは無料でオープンソースです。LockAtomicLongCountDownLatchPublish / SubscribeRemoteServiceExecutorServiceLiveObjectServiceSchedulerService

AWS Elasticache サポートのおかげで、クラウドで完全に動作します

于 2015-08-05T15:08:54.537 に答える
3

あなたの好みにもよりますが、CAP定理からAPに向かっている場合はHazelcastを提案することで他の人に必ず従いますが、CPが必要な場合はRedisを選択します

于 2011-09-11T17:22:59.790 に答える
2

私は同様のプロジェクトを行っていますが、代わりに.NETプラットフォームを対象としています。すでに述べたソリューションとは別に、 ScaleOutStateServerAlachisoftNCacheを確認する必要があると思います。私の判断によれば、これらの選択肢はどちらも安価ではありませんが、商用ソリューションのオープンソースよりも安全な方法です。

  1. 私は.NETAPIで遊んだだけですが、どちらもJavaクライアントAPIを提供します。
  2. StateServerは、新しいキャッシュノードの自己検出機能を備えており、NCacheには、新しいキャッシュノードを追加できる管理コンソールがあります。
  3. どちらもフェイルオーバーをシームレスに処理できる必要があります。
  4. StateServerは、データの1つまたは2つのパッシブコピーを持つことができます。NCacheは、より多くのキャッシングトポロジから選択できる機能を備えています。
  5. 両方で使用可能なデータベースへのライトスルー/ライトビハインドを意味する場合。
  6. 使用する予定のキャッシュサーバーの数はわかりませんが、完全な価格仕様は次の とおりです。ScaleOut StateServer Alachisoft NCache
  7. どちらもサーバーにローカルにインストールおよび構成されており、どちらもGUI管理機能を備えています。
  8. 厳密に一貫性が何を含むのか正確にはわからないので、調査するためにそれを残しておきます。

全体として、StateServerは、キャッシュクラスター内の細部の構成をスキップしたい場合に最適なオプションですが、NCacheは、選択可能な非常に多くの機能とキャッシュトポロジを備えています。

クライアントに対するデータの動作によっては(データが同じクライアントから何度も読み取られる場合)、クライアントのローカルキャッシュとクラスターの分散キャッシュ(NCacheとStateServerの両方で使用可能)を混在させることをお勧めします。 、 ちょっとした考え。

于 2010-06-28T21:23:39.423 に答える
2

Terracotta の JVM クラスタリングを見てみましょう。これは OpenSource です ;) API はありませんが、JVM レベルで効率的に動作します。レプリケートされたオブジェクトに値を格納すると、他のすべてのノードに送信されます。ロックでさえ、それらすべてが透過的に機能し、新しいコードを追加する必要はありません。

于 2010-06-15T13:00:58.670 に答える
2

Coherence などの Java 固有のソリューションをチェックアウトすることをお勧めします: http://www.oracle.com/global/ru/products/middleware/coherence/index.html

しかし、私はそのようなソリューションは複雑すぎると考えており、memcached などのソリューションを使用することを好みます。あなたの目的に対する memcached の大きな欠点は、レコードロックがないように思われ、フェイルオーバーのためにデータを複製する方法が組み込まれていないことです。そのため、キーと値のデータ ストアを調べます。それらの多くは、あなたのニーズを完全に満たすでしょう。

タスクに役立つキー値データ ストアのリストを次に示し ますあなたが快適に満たすこと。

于 2010-06-15T13:01:23.100 に答える
2

指定されたユース ケースは、Netflix のHollowに適合するようです。これは、単一のプロデューサーと複数のコンシューマーを持つ読み取り専用のレプリケートされたキャッシュです。

于 2017-09-05T00:51:19.563 に答える
0

rabbitmqのような標準的なメッセージングソリューションの使用について考えたことはありますか?RabbitMQは、AMQPプロトコルのオープンソース実装です。

アプリケーションは、多かれ少なかれパブリッシュ/サブスクライブシステムのように見えます。パブリッシャーノードは、処理を実行し、メッセージ(処理されたデータ)をサーバーのキューに入れるノードです。サブスクライバーは、さまざまな方法でサーバーからメッセージを取得できます。AMQPは、メッセージのプロデューサーとコンシューマーを切り離し、2つの側面を組み合わせる方法に非常に柔軟性があります。

于 2010-06-15T14:37:39.607 に答える