13

私はクライアントサーバースタイルのデータベースベースのシステムを開発しており、システムにストレス/負荷テストを行う方法を考案する必要があります。顧客は必然的に次のようなことを知りたがります。

•サーバーはいくつのクライアントをサポートできますか?
•サーバーはいくつの同時検索をサポートできますか?
•データベースに保存できるデータの量は?
•その他

これらすべての質問の鍵は、応答時間です。新しい負荷が導入​​されると応答時間とパフォーマンスがどのように低下​​するかを測定できる必要があります。これにより、たとえば、クライアントにスローできるある種のきれいなグラフを作成して、特定のパフォーマンスでどのようなパフォーマンスが期待できるかをクライアントに示すことができます。ハードウェア構成。

今、私たちはただ指を空中に出し、経験からシステムについてすでに知っていることに基づいて知識に基づいた推測をします。製品がより厳しい条件に置かれるにつれて、これは私たちの今後のニーズには不十分であることが証明されています。

私はそのような答えを意味のある方法で得る方法を考案する仕事を与えられました。これは誰もが明確に答えることができる質問ではないことを私は理解していますが、私は人々が自分のシステムでそのような仕事をどのように行っているかについての提案を探しています。

注意すべき点の1つは、Python言語(SWIGの提供)を介してクライアントAPIに完全にアクセスできることです。これは、この種の作業ではC++よりもはるかに簡単に操作できます。

さあ、これを床に投げます。皆さんが思いつくアイデアを知りたいと思っています。

4

5 に答える 5

9

テスト1:madのようにクライアントを接続および切断し、セッションの初期化と終了をどれだけうまく処理できるか、スパイクの下でサーバーがどれだけ生き残るかを確認します。また、この測定を行いながら、接続に失敗したクライアントの数を測定します。それは非常に重要です

テスト2 :クライアントを接続し、ランダムなアクション(FuzzTest)を実行して、たとえば1週間ログオンしたままにします。各アクションの往復の時間を計ります。また、アクションの順序を記録してください。これにより、「クライアント」はユースケースの抜け穴を見つけることができます(非常に重要であり、合理的にテストするのは非常に困難です)。

テスト3および4:システムの主なユースケースを決定し、これらのタスクを実行するスクリプトを作成します。次に、同じタスクを実行している複数のクライアント(テスト3)と、異なるタスクを実行している複数のクライアント(テスト4)を実行します。

シリーズ: ここで必要なもう1つの側面は、クライアントの数です。素敵なシリーズは次のようになります:5,10,50,100,500,1000,5000,10000、...

このようにして、さまざまな作業負荷での一連のテストごとにデータを取得できます。

また、クライアントAPIをPythonにSWIGすることもおめでとうございます。それは物事を準備するための素晴らしい方法です。

注:IBMには、Javaでのファジング・テストのサンプルがあります。これは、お客様のケースでは実現されていませんが、システムに適したファジング・テストを設計するのに役立ちます。

于 2008-11-07T11:44:40.333 に答える
7

Pythonでのコーディングテストに慣れている場合は、funkloadが非常に優れていることがわかりました。サーバーがhttpベースであるとは言わないので、テスト機能を独自のクライアント/サーバースタイルに適合させる必要があるかもしれません。

Pythonでテストを行うと、funkloadはそれを多くのスレッドで実行し、応答時間を監視し、テストの最後に要約することができます。

于 2008-11-07T11:55:19.017 に答える
5

パフォーマンスについては、レイテンシー (アプリケーションの応答性) とスループット (間隔ごとの操作数) の 2 つを見ています。レイテンシについては、許容できるベンチマークが必要です。スループットについては、許容可能な最小スループットが必要です。

これらはあなたの出発点です。インターバルごとに実行できる xyz の数をクライアントに伝えるには、ハードウェアとソフトウェアの構成を知る必要があります。生産ハードウェアを知ることは、正確な数値を得るために重要です。ハードウェア構成がわからない場合は、図をテスト ハードウェアから最終的な製品ハードウェアにマッピングする方法を考案する必要があります。

ハードウェアの知識がなければ、絶対的なパフォーマンスではなく、時間の経過に伴うパフォーマンスの傾向しか観察できません。

ソフトウェア構成を知ることも同様に重要です。クラスタ化されたサーバー構成はありますか?負荷分散されていますか?サーバー上で他に何かが実行されていますか? ソフトウェアをスケーリングできますか、それとも需要を満たすためにハードウェアをスケーリングする必要がありますか?

サポートできるクライアントの数を知るには、標準的な一連の操作を理解する必要があります。簡単なテストとして、クライアントを削除してスタブ クライアントを作成し、できるだけ多くのクライアントをスピンアップします。それぞれをサーバーに接続します。最終的にサーバー接続リソースの制限に達します。接続プーリングまたはより優れたハードウェアがなければ、これより高くすることはできません。多くの場合、ここより前にアーキテクチャの問題に遭遇しますが、いずれの場合も上限があります。

この情報を使用して、クライアントが実行できるスクリプトを設計します。予想されるユーザーがアクションを実行するのにかかる時間に関して、スクリプトがアクションを実行するのにかかる時間をマッピングする必要があります。上記のように数を増やし始めて、クライアントの増加がパフォーマンスの大幅な低下を引き起こすポイントに到達します。

ストレス テストにはさまざまな方法がありますが、重要なのは予想される負荷を理解することです。クライアントに期待することを尋ねます。間隔ごとに予想される需要は? そこから、上部負荷を計算できます。

多くのクライアントを何時間または何日も連続して動作させて、浸漬テストを実行できます。できるだけ多くのクライアントをできるだけ早く接続して、サーバーが高い要求 (DOS 攻撃) をどれだけうまく処理できるかを確認できます。

同時検索は、クライアントに代わって動作する標準的な動作検索を介して実行する必要があります。または、多くのスレッドで待機するセマフォを確立するスクリプトを記述してから、それらを一度にすべて解放することができます。これは楽しく、データベースを罰します。検索を実行するときは、存在する可能性のあるキャッシュ レイヤーを考慮する必要があります。キャッシュを使用する場合と使用しない場合の両方をテストする必要があります (全員が一意の検索要求を行うシナリオで)。

データベース ストレージは物理スペースに基づいています。フィールドの長さと予想されるデータの母集団から行のサイズを決定できます。これを統計的に推定するか、データ生成スクリプト (負荷テストのシナリオに役立ち、組織の資産となるはずです) を作成してから、生成されたデータをビジネス オブジェクトにマップします。クライアントは保存できる「ビジネス オブジェクト」の数を気にしますが、あなたは保存できる生データの量を気にします。

その他の考慮事項: 予想される可用性は? サーバーをオンラインにするのにかかる時間はどうですか。一度ダウンしてオンラインに戻るのに 2 日かかる場合、99.9% の可用性は良くありません。反対に、再起動に 5 秒かかり、転倒した場合は、可用性が低くても問題ありません。

于 2008-11-07T12:25:41.200 に答える
0

関連するメモ:Twitterは最近、負荷テストフレームワークをオープンソース化しました。行く価値があるかもしれません:)

于 2012-07-10T05:04:21.383 に答える
0

予算があれば、LoadRunner が最適です。

于 2008-11-07T12:16:08.130 に答える