Solaris上にJavaとC++が混在したアプリケーションがあります。コードのJavaの側面はWeb UIを実行し、話しているデバイスの状態を確立し、C++コードはデバイスから戻ってくるデータのリアルタイムの処理を行います。共有メモリは、デバイス状態およびコンテキスト情報をJavaコードからC++コードに渡すために使用されます。 JavaコードはPostgreSQLデータベースを使用して状態を保持します。Solaris上のJava/C++用高可用性とスケーラブルなプラットフォーム
私たちはいくつかの非常に厳しいパフォーマンスのボトルネックに遭遇しています。今では、メモリとCPU数を増やすことができます。私たちは共用メモリ設計のために1つの物理的なボックスについています。
ここでは本当に大きな打撃がC++コードによって取られています。 Webインターフェイスは、デバイスを構成するためにかなり軽く使用されます。私たちが本当に苦労しているのは、デバイスが構成された後に提供するデータ量を処理することです。
デバイスから返ってくるデータはすべて、デバイスコンテキストを指す識別子が含まれており、そのデータを参照する必要があります。現在、Java/UIコードによって維持され、C++コードで参照される一連の共有メモリオブジェクトがあり、それがボトルネックです。このアーキテクチャのおかげで、C++のデータ処理を別のマシンに移すことはできません。私たちは、さまざまなデバイスのサブセットを異なるマシンで処理できるようにスケールアウトできる必要がありますが、そのコンテキストルックアップを行う能力を失います。これが私が解決しようとしている問題です。つまり、他のボックスにリアルタイムのデータ処理を提供しながら、デバイスコンテキストを依然として参照することができます。
私たちは、デバイス自体で使用されているプロトコルを制御できないため、状況が変わる可能性はありません。
我々はクラスタに複数のマシンを追加することにより、スケールアウトできるようにするには、このから離れて移動する必要が知っている、と私たちはこれをやる正確にどのようにワークアウトの初期段階にいますよ。
現在、私はJavaコードをスケールアウトする方法としてTerracottaを検討していますが、C++をスケールアウトしてマッチさせる方法はありません。
パフォーマンスのスケーリングだけでなく、高可用性も考慮する必要があります。アプリケーションはほぼ100%ではなくコスト効率の良いものである必要がありますが、マシンの停止から生き残るためには合理的な作業が必要です。
私が与えられた仕事を引き受けなければならない場合、あなたは何をしますか?
EDIT:@johnのチャンネルで提供されているデータに基づいて、私はGigaSpacesとGemstoneの両方を見ています。 Oracle CoherenceとIBM ObjectGridはJavaのみのようです。
ここには優れたリンクがいくつかあります。ありがとう。私はいくつかの読書を持っている。 – Andrew