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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
skanehira
August 26, 2024
Programming
2.4k
6
Share
Rustではじめる負荷試験
https://findy.connpass.com/event/327076/
skanehira
August 26, 2024
More Decks by skanehira
See All by skanehira
Reactにおける 良いコンポーネントテストとはなにか
skanehira
1
440
vimconf2025.pdf
skanehira
0
43
findy-ai-terminal.pdf
skanehira
2
500
Rustから学ぶ 非同期処理の仕組み
skanehira
1
410
about_gorilla.vim.pdf
skanehira
0
140
if let temporary scopeについて
skanehira
0
200
build-debugger-in-rust.pdf
skanehira
1
280
Findy感謝祭2024 LT
skanehira
0
160
Wellcome Vim World
skanehira
3
680
Other Decks in Programming
See All in Programming
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.4k
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
250
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.4k
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
530
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.6k
次世代リンターで探る、tsgo 時代における型認識カスタムルールの現実解
ytakahashii
3
1.4k
ふつうのFeature Flag実践入門
irof
7
3.5k
CSC307 Lecture 17
javiergs
PRO
0
310
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
130
Swiftのレキシカルスコープ管理
kntkymt
0
210
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
2
570
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
RailsConf 2023
tenderlove
30
1.5k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
840
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Cult of Friendly URLs
andyhume
79
6.9k
BBQ
matthewcrist
89
10k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
130
Side Projects
sachag
455
43k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
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
ありがとうございました