GH GambleHub

負荷テストとストレス

負荷テストとストレス

1)なぜそれを必要とします

目的:
  • 容量を確認します(システムがSLOに耐えるRPS/競合セッションの数)。
  • ボトルネック(CPU/IO/DB/ネットワーク/ロック/プール)を検索します。
  • CI/CDでパフォーマンス予算とゲートを設定します。
  • リリースのリスクを低減します(p95/p99回帰、ピークエラー増加)。
  • 計画容量/コスト(スケールアウトと予約)。

2) perfテストの種類

負荷:ピークに近い現実的なトラフィック。SLO検証。
ストレス:限界値の上限値を超えた成長→分解動作。
スパイク:高速負荷ジャンプ→弾性/オートスケール。
浸漬/耐久性:時間/日→リーク、断片化、レイテンシードリフト。
容量/スケーラビリティ:スケールアウトでスループット/レイテンシがどのように変化するか;アムダル/グスタフソン法。
Smoke perf:各リリースに短い「smoke」が実行されます(パフォーマンスの尊厳)。


3)トラフィック生成モデル

VU/concurrency: 'N'ユーザーを修正しました。各ユーザーはクライアント上で→queueをリクエストします。過負荷を隠す危険性。
到着速度:実際の生活のように、λ強度(req/s)のアプリケーションの流れ。パブリックAPIの方が正しいです。

Little's Law: 'L=λ × W'。
プール/サービスの場合、最小並列性≈ 'λ × W'(在庫の20-50%を追加)です。
'λ'がスループットである場合、'W'は平均サービス時間である。


4)プロファイルとシナリオをロードする

ユーザージャーニーミックス:スクリプトの共有(ログイン、ブラウズ、入金、チェックアウト……)。
Think-time:ユーザーの一時停止(ディストリビューション:指数関数/lognormal)。
データプロファイル:応答のサイズ、ペイロード、パラメータの可変性。
相関:リアルフローと同様に、リンクステップ(クッキー/トークン/ID)。
コールド/ウォーム/ホットキャッシュ:個々の実行。
読み取りと書き込み:読み取り/レコードのバランス、リトレイのidempotency。
複数の地域:RTT、 POP/ASNによる配分。


5)テスト環境

アイソレーション:スタンドはトポロジー/設定で製品の近くにあります(ただし、製品を「ビート」しないでください)。
データ:PIIマスキング、ボリューム、売上指数。
負荷発生器:CPU/ネットワークに対して休まないで下さい;分散ランナー、時間同期。
観測可能性:メトリック/トレイル/ログ、周囲の合成、CPU/ヒーププロファイルのエクスポート。


6)メトリクスとSLI

スループット: RPS/トランザクション/秒

レイテンシー:p50/p95/p99、 TTFB、サーバー時間vsネットワーク。
エラー:5xx/4xx/ドメインエラーの共有。
飽和:CPU、負荷avg、 GC、 ディスクIOps/レイテンシ、ネットワーク、プール待ち。
ビジネスSLI: ≤ 5s沈殿物の成功、≤ 2s順序の確認。

SLOからしきい値を取得します(例:"99。95% ≤ 300ミリ秒)、実行中のモニター燃焼率。


7)ボトルネックの発見(技術)

1.一貫して目標負荷の60-80%によってシステムを暖めて下さい。
2.ステップの増加(ランプ)→p95/p99とエラー率が増加する問題を修正しました。

3.p99スパイクにマッチ:
  • プール内のキュー(DB/HTTP)、
  • WAIT/ロック (DB)の増加、
  • GC-pauses/heap、
  • ネットワークリトランスミット/パケット損失、
  • ディスク遅延/キャッシュのミス。
  • 4.ローカライズ:クエリパス、プロファイラ(CPU/alloc/lock-profile)によるバイナリ検索。
  • 5.「ボトル」→チューニング→実行を繰り返すのを修正しました。

8)ストレス下での行動

優美な劣化:限界、回路遮断器、バックプレスキュー、処理に受け入れられます。
リトレイ:最大1、 idempotentのみ;ジッタ;リトレイ予算≤ RPSの10%です。
Fail-open/Fail-closed:重要でない依存関係の場合、fail-open(キャッシュ/スタブ)を許可します。
カスケード障害:プール/クォータ(隔壁)の分離、高速タイムアウト、関数(フィーチャーフラグ)の「スムーズ」無効化。


9)ツール(タスクの選択)

k6 (JavaScript、オープン/オープンモデル、高速、CIで便利)。
JMeter(エコシステム、GUI/CLI、プラグインが豊富だが重い)。
ガトリング(Scala DSL、高性能)。
Locust (Python、スクリプトの柔軟性)。
ベジータ/hey/wrk(マイクロベンチとクイックチェック)。

規則:PRの煙ペンのための1つの「主要な」用具+軽いCLI。


10)例(スニペット)

10.1k6(到着率のオープンモデル)

js import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' },  // до 500 rps
{ target: 800, duration: '5m' },  // стресс
{ target: 0,  duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0.005'],
},
};

export default function () {
const res = http.get(`${__ENV.BASE_URL}/api/catalog?limit=20`);
sleep(Math.random() 2); // think-time
}

10.2 JMeter(プロフィールのアイデア)

Thread Group+Stepping Thread(オープンライク)

HTTPリクエストのデフォルト、Cookie Manager、 CSV Data Set。
バックエンドリスナー→InfluxDB/Grafana;時間/コードによるアサーション。

10.3 Locust (Python)

python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0.2, 2.0)
@task(5)
def browse(self): self.client.get("/api/catalog?limit=20")
@task(1)
def buy(self): self.client.post("/api/checkout", json={"sku":"A1","qty":1})

11)データ、相関、準備

シードデータ:ディレクトリ、ユーザー、残高、トークン-売上と同様に。
PIIマスキング/匿名化;実際の分布の上に合成を生成します。
相関:レスポンス(RegExp/JSONPath)からID/トークンを抽出し、その後のステップで使用します。


12)実行中の観察可能性

ルートに沿ったREDダッシュボード(レート、エラー、期間)。
例題-メトリクスからトレース(trace_id)への遷移。
エラーログ:sampling+aggregation、 duplicates/idempotence。
システム:CPU/GC/ヒープ、ディスク/ネットワーク、プールの待機。
DB:トップクエリ、ロック、インデックススキャン、bloat。


13)オートメーションおよび性能のゲート

CI:マージ時のショートラン(例:k6 2-3分)しきい値で。
毎晩/毎週:別の媒体で長い浸漬/ストレス;レポートとトレンド。
カナリアリリース:プロモーションの「ゲート」としてのSLO (error-rate、 p95)の分析。
リグレッション:ベースラインと現在のビルド;劣化時のアラート>X%。


14)容量の計画および費用

カーブのスループット→レイテンシ:膝のポイントを定義します。
スケールアウト:スケーリング効率(RPSデルタ/ノードデルタ)を測定します。
費用:「1時間あたりのRPS」、ピークイベントの予約+DR-reserve。


15)アンチパターン

「空の」環境で制御やテストせずにprodにビート、prodのようではありません。
オーバーロードを隠す固定VUを備えたクローズドモデル。
think-time/data→非現実的なキャッシュ・ヒットの欠如、またはその逆-ソースへのストーム。
カスタムフローの代わりに1つの「/ping「スクリプト。
観測可能性の欠如:"我々は、RPSと平均遅延のみを参照してください。
制御されていないリトレイ→自己DDoS。
仮説/変更を修正せずにテストと最適化をミックスします。


16)チェックリスト(0-30日)

0-7日

SLI/SLOとターゲットトラフィックプロファイル(mix、 think-time、 data)を定義します。
ツール(k6/JMeter/Locust)を選択し、REDダッシュボードを上げます。
スタンドとシードデータを準備し、サードパーティの制限/キャプチャを無効にします。

8-20日

ビルドシナリオ:オープンモデル(到着率)、コールド/ウォーム/ホットキャッシュ。
負荷→応力→スパイクを実行します。膝のポイントおよびボトルネックを修理して下さい。
CI(マイクロラン)でパフォーマンスゲートを実装します。

21-30日

浸るテスト4-24h: GCの漏出/ドリフト、安定。
ドキュメントリミット、容量プラン、「RPS→p95/oshibki」イラスト。
runbookを準備する「制限/スケールを増やす方法」と「劣化する方法」。


17)成熟度の指標

トラフィックの≥ 80%をカバーする現実的なプロファイル(ミックス、think-time、データ)があります。
REDダッシュボード+トレースはすべてのテストに接続されています。
パフォーマンスゲートは、p95/errorsを取り消すときにリリースをブロックします。
容量と膝のポイントは、主要なサービスによって文書化されています。
毎月の浸漬/ストレスランと進捗レポート。
「スパイク」への抵抗はオートスケールおよびカスケード失敗の不在によって確認されます。


18)結論

負荷テストは、1回限りの測定ではなく、通常のエンジニアリング実践です。"モデルリアルユーザー(オープンモデル)、クライアントの経験(SLI/SLO)を反映したものを測定し、CI/CDの観測性とゲートを維持し、ストレス/スパイク/ソークランを実行し、膝のポイントを修正します。その後、ピークイベントとブラックスワンは管理可能なシナリオに変わり、パフォーマンスはプラットフォームの予測可能で測定可能なパラメータに変わります。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。