2017-02-23 20 views
0

Apache Ignite DataGridを使用すると予想されるパフォーマンスが得られません。私はいくつかの構成変更を試みましたが、現時点でパフォーマンスのボトルネックを調べる方法を知らず、専門家の助けを求めています。Apache Igniteキャッシュのputとgetが遅い

私はByteArrayを呼び出すラッパークラスを使用してバイト配列をキャッシュするのにApache Igniteを使用しています。私のテストコードは、複数のputを呼び出すことによってキャッシュのパフォーマンスをベンチマークしようとし、次に別のプロセスから複数の取得を試みます。私は同じノードと異なるノードでgetプロセスを実行しようとしました。また、Java HashMapをキャッシュとして使用してベースラインのパフォーマンス仕様を作成しました。これは、パフォーマンスが大幅に向上しました(putの10000倍)。

今、同じノードで、次のようになります。 ハッシュマップキャッシュ、同じノード:put 2600 MB/s; 300 MB/sを取得する 同じノードキャッシュをイグニッションする:0.4 MB/sを入れる。 2.0 MB/sを取得する Ignite cache、2ノード:0.3 MB/s、

これらは複製モードで実行しましたが、パーティションモードでも同様の結果が得られます。私はテストの複数の反復を実行し、タイミングを平均します。私のノードは25GBのメモリを持ち、私のテストは1GBを消費します。私は最大10GBを使用するようにVMを構成しました。

この問題の洞察を事前にお寄せいただきありがとうございます。

答えて

1

まず、Igniteの性能をHashMapと比較することは、あまり意味がありません。 Igniteは分散してスケーラブルなシステムですが、HashMapはスレッドセーフではありません。

HashMapをベースラインとして使用したという事実は、あなたのテストがシングルスレッドであると考えさせてくれます。複数のスレッド/クライアントからIgniteを照会しようとすると、より良いスループットに気付くはずです。

また、Igniteを使用することは、ネットワーク経由でデータを送信することを意味します。速度が限られている可能性があります。

+0

私はあなたがスレッドとIgniteの分散性質について何を言っているのか理解していますが、純粋に私のノードで未処理のパフォーマンスを知るために(そしてベンチマークコードのバグを見つけるために) 'HashMap'の例を作成しました。 Igniteのタイミングは、2つのクライアント(同じノードと2つのノードのケース)であり、それは低いパフォーマンスを得る場所です。私はIgniteを間違って使用しているのだろうかと思います。私の必要性は、N個のノードに一連のputを行い、その後にこれらのノードを取得することです。 Igniteは適切なツールで、MB/s単位のパフォーマンスはどれくらい期待できますか? – Sumit

+0

それがポイントです。ネットワーク通信を意味する分散クラスタとローカル非スレッドセーフマップを比較しています。これは絶対に無効な比較です。どのような作業を行っていても、アフィニティコロケーション(https://apacheignite.readme.io/docs/affinity-collocation)を使用するなど、ネットワークを介して転送されるデータ量を最小限に抑える必要があります。正確なスループット数に関しては、ノードを追加することでIgniteをスケールアウトすることができるため、事実上制限はありません。 –

関連する問題