製品の開発中に、デフォルトの Vaadin アーキテクチャを使用するとメモリ フットプリントが大きくなるという問題に直面しました。
Vaadin アーキテクチャは、イベントによって駆動されるコンポーネントに基づいています。コンポーネントを使用すると、密結合アプリケーションを簡単に作成できます。その理由は、コンポーネントが階層構造になっているためです。ピラミッドのようなものです。より大きなアプリケーションが構築されます。より大きなピラミッドは、各ユーザーのセッションに保存されます。
メモリの割り当てを大幅に削減するために、古い学校の状態管理を使用してバックグラウンドで包括的なイベント モデルを使用するアプリケーション用のページ ベースのアプローチを作成しました。XML 形式の Statechart 表記法に基づいています。
その結果、セッションは、Statechart 構成によって記述された、ユーザー ワークフロー中にアクセスしたページのみを保持します。ユーザーがワークフローを終了すると、すべてのページが解放され、ガベージ コレクターによって収集されます。
違いを確認するために、いくつかのテストを行って、アプリケーションを操作するユーザーに割り当てられたメモリを比較しました。
開発されたアプリケーション:
- 密結合アプローチでは、ユーザーごとに 5 ~ 15 MB のヒープを消費します
- 疎結合アプローチの場合 - 最大 2 MB
サーバーあたり最大 1000 ~ 1500 の同時ユーザーに 4 GB の RAM を使用して大規模なシステムをスケーリングできるため、結果に非常に満足しています。
ほとんど忘れていました。Lexaden Web Flowライブラリを使用しました。Apacheライセンス付きです。