問題タブ [ignite]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ignite - トランザクションの実行中にシャットダウン ノードを起動する
私は Apache Ignite を試して、例で遊んでいます。トランザクションに関するスクリーンキャストから例を挙げました。3 つのサーバー ノードを開始し、トランザクションを開始して 50k 要素をキャッシュに入れる開始コード。実行中に、3 つのノードのうち 2 つを強制終了します。Ignite がエラーでコミットに失敗することを期待していましたが、実際にはエラーはなく、部分的に保存されたデータが得られました。マニュアルに記載されているように、完全な ACID トランザクションではありません。私は何か重要なことを理解していないのでしょうか?
caching - Apache Ignite の分散キャッシュに JCache API を使用できますか?
JCache API (JSR107、javax.cache) を使用して、Apache Ignite で分散キャッシュを構成したいと考えています。これは可能ですか?
私が見つけた例では、JCache API を使用してローカル キャッシュを作成するか、Apache Ignite API を使用して分散キャッシュ (またはデータグリッド) を作成しています。
sql - クライアントモードの Apache Ignite で SQL スキャン クエリを実行する際の問題
次のコードを使用して、Apache Ignite で SQL のテストを開始しようとしています。
しかし、スキャンクエリの後にカーソルを移動しようとすると、最後に例外がスローされます。
私は Apache Ignite を試し始めたばかりなので、明らかに間違ったことをしています。これを修正する方法を教えていただければ幸いです。
また、このコードをサーバーとしてではなくクライアントモードで実行しています。3 ノード クラスターが個別に実行されています。
java - Ignite がキャッシュの破棄後にメモリを解放しない
Spring Boot Web アプリケーション内で Ignite エンジンを Bean として使用しています。キャッシュ構成は次のとおりです。
0.5GB ヒープでエンジンを起動した後のデフォルトのメモリ使用量は次のとおりです。
この時点で、オフヒープの最大メモリを 1 GB に設定したため、最大メモリ使用量は 2.6 GB になると予想しています。しかし、数百万個のオブジェクトをキャッシュにロードすると、次のようになります。
さらに悪いことに、キャッシュを破棄しましたが、メモリ使用量はまだ残っています!
この時点で、さらに多くのエントリをキャッシュにロードしようとすると、メモリ使用量が増加し続け、以前に破棄したキャッシュが ignite によって解放されていないことがわかります。
編集
出力とともに Maven テスト プロジェクトをhttp://sourceforge.net/projects/ignitetest35087485/files/にアップロードしました。ご覧のとおり、ロードと破棄を 5 サイクル繰り返した後、メモリが枯渇しました。スペースをスワップするためのエビクションは行われず、ignite は offHeapMaxMemory 設定を考慮しませんでした。
ここで何が問題なのですか?どんな助けでも大歓迎です。
java - Apache Ignite WebSession 属性の更新
現在、Apache Ignite をアプリケーションに統合して、クラスター内でセッションを共有しています。Ignite ドキュメントを参照してください。この時点で、2 つのローカル Tomcat インスタンス間でセッションを正常に共有できますが、Ignite でサポートされていない (と思われる) ユース ケースが 1 つあります。
このアプリケーションには、'Profile' と呼ばれるセッション オブジェクトがあります。このプロファイルはユーザー固有であり、ユーザーがアプリケーションを閲覧している間に、あらゆる種類の属性がこのオブジェクトに追加されます。
次の方法で「Profile」オブジェクトを更新します (疑似コード)。
Apache Ignite がない場合、セッションには「setLastVisitedPage」(「test」) の正しい値が含まれます。しかし、Ignite を使用する場合、Ignite の「WebSession」オブジェクトの動作は少し異なるようです。セッション オブジェクトで「setLastVisitedPage」値を設定すると、WebSession には最初に正しい値 (「test」) が正しく含まれますが、次のページでは、Ignite キャッシュから解決される WebSession オブジェクトには、変更された「setLastVisitedPage」属性が含まれていません。
Ignite コードを調べたところ、これが期待どおりに機能しない理由がわかりました。Ignite の「WebSession」クラスを見ると、次のメソッドが表示されます。
つまり、Ignite は、セッション オブジェクトを更新するたびに session.setAttribute メソッドを呼び出すことを想定しているため、Ignite は内部の「updates」コレクションに変更を追加します。これは、Ignite グリッド内のオブジェクトを更新するために使用されます。アプリケーションの解決策は、アプリケーションのコードを変更して、更新のたびに setAttribute を呼び出すことですが、コードの依存関係も使用します。これは変更できず、セッション オブジェクトの変更後に setAttribute を呼び出さない場合があります。
セッション オブジェクトの変更後に Ignite が setAttribute を呼び出す必要がある理由はありますか? それとも、これは Ignite の欠陥ですか?
ignite - アクティブな Apache Ignite グリッドで (セッション オブジェクトが変更された) 新しいアプリケーション バージョンをデプロイする際の ClassNotFoundException
現在、Apache Ignite をアプリケーションに統合して、クラスター内でセッションを共有しています。
この時点で、2 つのローカル Tomcat インスタンス間でセッションを正常に共有できますが、まだ機能していないユース ケースが 1 つあります。
まったく同じコードで 2 つのローカル インスタンスを実行すると、すべてうまく機能します。しかし、Ignite ロジックが本番クラスターに統合されると、次のユース ケースが発生します。
- Node 1およびNode 2、バージョン 1のアプリケーションを実行
- この時点で、アプリケーションのバージョン 2をデプロイします。
- Tomcat はノード 1で停止され、バージョン 2がデプロイされ、デプロイの最後にノード 1の Tomcatが再び開始されます。
- ノード 1にはバージョン2のコードがあり、ノード 2にはまだバージョン 1があります。
- Tomcat はノード 2で停止され、バージョン 2が展開され、展開の最後にノード 2の Tomcatが再び開始されます。
- ノード 1にはバージョン2のコードがあり、ノード 2にはバージョン 2があります。
- デプロイが完了しました
このユース ケースを同じグリッド内の 2 つの tomcat インスタンスでローカルに再現すると、Ignite Web セッション クラスタリングが失敗します。私がテストしたのは、ユーザー セッションに存在するクラス (プロファイル) の 1 つの「文字列プロパティ」を削除することでした。この変更されたクラスでノード 1を開始すると、次の例外が発生します。
これは、展開の一般的/通常の使用例です。私の質問は、このユースケースをどのように処理するのですか? Ignite でこの種の問題を解決/回避する方法はありますか?