同じマシンに2つのJVMがあり、理想的には5ミリ秒未満で約1 MBの(シリアル化可能な)データを渡したいと思っています。
負荷がかかっている状態で、ローカルホストにHTTPを使用すると、平均で約70ミリ秒かかります。
データを分散キュー経由で渡して、平均約50msのhazelcastを試しました。
より速い方法はありますか?
スプリングブーツを使用しています。
純粋なソケットを使用しないのはなぜですか?
同じマシンのソケットは、かなり速くデータを送信します。 100 MB以上を送信できると仮定すると、約10ミリ秒で1 MBを送信できるはずです。これよりも速い速度を得ることは少し注意が必要です。あなたが良いカードを持っているなら、あなたはそれを5ミリ秒未満にすることができました。
データをシリアル化できれば、非常に簡単に送信できます。ソケットを介したオブジェクトの送信については this を参照してください。
ファイルを使用すると、平均で約80〜160 MB/sまたは12ミリ秒-6.25ミリ秒で1 MBを送信できますが、もう一度読み取る必要があるため、時間がかかります。
Memory-mapped file を使用して、ファイルを1回だけ読み取り、それをメモリに格納して、仮想マシンがメモリから読み取ることができるようにすることができます。 MappedByteBuffer を使用してファイルをメモリに保持すると、効率的にアクセスできますが、最初にファイルを読み取る必要があります。これは、ソケットを介した送信やファイルへの書き込み/ファイルからの読み取りよりも少し複雑です。