特定のアプリケーションのスケーラビリティについて、いくつかの小さな技術的なプレゼンテーションを行うように依頼されました。アプリケーションは、Java、Spring MVC、Hibernateを使用して開発されています。アプリケーションのソースコードにアクセスできます。
(ソースを使用して)ソフトウェアのスケーラビリティをどのように測定できますか?また、ソフトウェアのスケーラビリティを測定する場合、どのメトリックを考慮する必要がありますか?
この件について Wikipediaの記事 を読むことから始めます。
つまり、スケーラビリティは、リソースの追加に伴うシステムパフォーマンスの向上、または負荷の増加に伴うリソース使用率の向上です。たとえば、応答時間が0.3秒を超えるまで、サイトは何人の同時ユーザーを処理できますか?使用可能なRAM /ディスク/ CPUなどを2倍にした後の同じ質問。おそらく、アプリケーション内部の知識を使用して、チェックする価値のあるパラメーターを決定できます。
サーバーマシンと1つ以上のクライアントマシンでテストベンチをセットアップします。いくつかのツールを使用して、サーバーで使用可能なリソースの量を制限する(例:ulimit
)か、サーバー上で干渉アプリケーションを実行します。サーバーがクライアント要求を処理する方法を測定します。干渉する負荷/使用可能なリソースを徐々に増やしたり減らしたりする上記の手順を繰り返します。最後に、ドットが含まれるn次元空間が得られます。一度に1つのパラメータのみを変更し、他のすべてのパラメータをいくつかの典型的な値(またはいくつかの値)に修正する方が簡単な場合があります。この場合、1つの軸にサーバーパフォーマンス(ユーザー/リクエストの数など)を、もう1つの軸にリソース使用率/可用性を示す一連の2Dグラフとして結果を表すことができます。
アプリケーションがアプリケーションのいくつかの部分に複数のサーバーを使用し、それらの量と比率を変えることができるより複雑なシナリオがありますが、それはあなたのケースではないと思います。最大で、これが問題になる場合は、スレッド/プロセスの数を変更することをお勧めします。
アプリケーション全体を測定する場合、通常、ソースコードへのアクセスは必要ありません。ただし、コードの特定の部分(たとえば、DBまたはUIのみ)を測定することに興味があるかもしれません。次に、ソースコードを使用して、測定用にこのモジュールのみを公開し、テストを実行できます。これはmicrobenchmarkと呼ばれます。
例を探しているなら、学術論文にたくさんあります。 google学者を検索して、 パフォーマンス評価 +希望の用語を探します。
スケーラビリティは、実際のアプリケーションでは実際に定量化可能なプロパティではありません。
実際には、スケーラビリティとは、さまざまな次元で増加しているワークロードをサポートできることです。
まず、アプリケーションは、既存のハードウェアリソースを使用して増加するワークロードをサポートします。しかし、限界に達するさまざまなポイントがあります。例えばメモリの量、コアの数、データ構造の競合、データベースのスループットなど。これらの制限の1つに達するたびに、増加するワークロードをサポートするために異なるアプローチを取る必要があります。スケーラビリティとは、克服できない限界に達する前に、または大幅な再設計を行う必要がある前に、ワークロードを増加し続けることができる期間です。