Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustではじめる負荷試験
Search
skanehira
August 26, 2024
Programming
5
1.2k
Rustではじめる負荷試験
https://findy.connpass.com/event/327076/
skanehira
August 26, 2024
Tweet
Share
More Decks by skanehira
See All by skanehira
Wellcome Vim World
skanehira
3
620
VimConf 2023 Tiny
skanehira
1
610
Deno Fest 2023
skanehira
0
180
RustでWasm Runtimeを書いた in WebAssembly night #11
skanehira
0
710
RustでWasm Runtimeを書いた in UV_Study
skanehira
1
440
New Docker Compose
skanehira
5
1.3k
Vim/NeovimでGitHubを使う
skanehira
0
150
作業効率アップ!オススメTUIツール5選
skanehira
2
690
docker.vim
skanehira
0
100
Other Decks in Programming
See All in Programming
New Order in Cascade Sorting Order
mugi_uno
3
2.6k
Swift Concurrencyとレースコンディション
objectiveaudio
1
400
What is Parser
yui_knk
9
4k
Swiftコードバトル必勝法
toshi0383
0
150
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
370
仮想ファイルシステムを導入して開発環境のストレージ課題を解消する
segadevtech
2
490
GoのIteratorに詳しくなってしまう
inatonix
1
200
Amebaチョイス立ち上げの裏側 ~依存システムとの闘い~
daichi_igarashi
0
220
状態管理ライブラリZustandの導入から運用まで
k1tikurisu
3
430
null or undefined
susisu
22
6.1k
マルチモジュールにおけるテスト最適化
fxwx23
0
190
Debugging: All you need to know (for simultaneous interpreting)
jmatsu
2
370
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
30
2.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
Atom: Resistance is Futile
akmur
261
25k
What the flash - Photography Introduction
edds
67
11k
Teambox: Starting and Learning
jrom
131
8.7k
Become a Pro
speakerdeck
PRO
22
4.9k
Producing Creativity
orderedlist
PRO
340
39k
How to Ace a Technical Interview
jacobian
275
23k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
157
15k
Embracing the Ebb and Flow
colly
83
4.4k
Designing with Data
zakiwarfel
98
5k
The World Runs on Bad Software
bkeepers
PRO
64
11k
Transcript
Rustで始める負荷試験 ゴリラ
自己紹介 株式会社テックリードという会社をやってい ます。 主にフロントエンド・バックエンドエンジニ アとして仕事しています。 好きなものはVim, Go, Rust, TypeScript, Deno,
Wasm などです。 最近のマイブームはRustとWasmとDB自作です。 X : https://x.com/gorilla0513 zenn : https://zenn.dev/skanehira GitHub: https://github.com/skanehira
GopherがRust入門したので違いをまとめてみた https://zenn.dev/skanehira/articles/2024-08-12-go-rust-pros-cons
RustでWasm Runtimeを実装する本を書いた https://zenn.dev/skanehira/books/writing-wasm-runtime-in-rust
RustでDB自作やっている 最低限 create table, insert, select は動いた
自己紹介はこれくらいで…
本日の発表は
Rust製 負荷テストフレームワーク Gooseの紹介 https://github.com/tag1consulting/goose
Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性
Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性 • Locustと比べて約11倍ほどのトラフィックを生成できる 単一サーバーから数千ユーザを簡単にエミュレートできる =>
スピードとスケーラビリティ
Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性 • Locustと比べて約11倍ほどのトラフィックを生成できる 単一サーバーから数千ユーザを簡単にエミュレートできる =>
スピードとスケーラビリティ • Rust Foundationのメンバーであるtag1が開発している => 安心感
簡単な実装例を紹介
Gooseの実装例 • 負荷対象サーバー
Gooseの実装例 • 負荷実行クライアント • scenario!() シナリオの追加 シナリオは複数のtransaction で構成される • transaction!()
トランザクションの追加 複数のリクエストとレスポンスの 検証で構成される 例: ログインと画像アップロード でトランザクションを分ける
Gooseの実装例 • 負荷の実施 • ––host 対象サーバー • ––users 接続ユーザー数 •
––iterations シナリオ実行回数 ––usersの数だけ実行
Gooseの実装例 • 結果のメトリクス • PER SCENARIO METRICS シナリオごとのメトリクス • PER
TRANSACTION METRICS トランザクションごとのメトリクス • PER REQUEST METRICS HTTPリクエストごとのメトリクス リクエストごとのパーセンタイル
Gooseの実装例 • メトリクスの読み方の一例 PER TRANSACTION METRICS 項目 説明 Name シナリオ名
reqs シナリオで成功したリクエストの総数 fails シナリオで失敗したリクエストの総数 req/s リクエスト総数の対する成功した割合 fails/s リクエスト総数の対する失敗した割合 Avg(ms) リクエストの平均実行時間(ms) Min リクエスト実行時間の最小値 Max リクエスト実行時間の最大値 Median リクエスト実行時間の中央値 Status codes リクエストのレスポンスステータスコード
Gooseのここが良い 🎉 3選
HTML metrics
HTML metrics • HTMLでメトリクスやグラフが見れる
HTML metrics • HTMLでメトリクスやグラフが見れる
Logging
Logging • Gooseはリクエスト・エラーといったログを出力できる
Test plan
Test plan • 負荷の掛け方を指定できる 例:60秒間で10人のユーザーを起動しその後シャットダウンする前に5分間実行する $ cargo run --release --
-H http://local.dev/ \ --test-plan "10,1m;10,5m;0,0s"
Test plan • 負荷の掛け方を指定できる 例:5分間に500ユーザーを開始し、2,500 ユーザーまでトラフィックを急増させる cargo run --release --
-H http://local.dev/ ––test-plan \ "500,5m;500,5m;2500,45s;500,45s;500,5m;2500,45s;500,45s;500,5m;0,0s"
まとめ
•可搬性(シングルバイナリ) •カスタマイズ性(フレームワークなので自由度が高い) •ハイスピード(Locustの約11倍のトラフィック数) •ハイスケーラビリティ(単一サーバーから簡単に数千ユー ザ生成可能) •豊富なメトリクス(シナリオ・リクエストなど) •わかりやすいレポート(テキスト・HTMLレポート) •柔軟な設定(スパイクする負荷を設定できるなど)
Gooseについてもっと知りたい場 合は↓を参照してください https://book.goose.rs
最後に すこしだけ宣伝
None
VimConf は、世界初かつ世界で唯一のコミュニティに よって定期運営されているVimの国際カンファレンス 日付 : 2024年11月23日(土) 時間 : 09時30分~17時30分 懇親会:
17時30分~19時30分 場所 : アキバプラザ・アキバホール, at 東京 秋葉原 チケット販売開始予定: 2024年9月中旬 (約160名を予定)
スポンサー絶賛募集中!! https://docs.google.com/forms/d/e/1FAIpQLSe_MtcYYJ-gV- sHejH7XdXsFcD7lOuqVeQoaAhd6fpI_eUQbw/viewform
ありがとうございました