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
6
2k
Rustではじめる負荷試験
https://findy.connpass.com/event/327076/
skanehira
August 26, 2024
Tweet
Share
More Decks by skanehira
See All by skanehira
about_gorilla.vim.pdf
skanehira
0
86
if let temporary scopeについて
skanehira
0
190
build-debugger-in-rust.pdf
skanehira
1
230
Findy感謝祭2024 LT
skanehira
0
130
Wellcome Vim World
skanehira
3
650
VimConf 2023 Tiny
skanehira
1
740
Deno Fest 2023
skanehira
0
250
RustでWasm Runtimeを書いた in WebAssembly night #11
skanehira
0
840
RustでWasm Runtimeを書いた in UV_Study
skanehira
1
470
Other Decks in Programming
See All in Programming
ふつうの技術スタックでアート作品を作ってみる
akira888
1
860
LT 2025-06-30: プロダクトエンジニアの役割
yamamotok
0
760
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
170
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
120
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
1
13k
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
120
生成AI時代のコンポーネントライブラリの作り方
touyou
1
220
20250704_教育事業におけるアジャイルなデータ基盤構築
hanon52_
5
790
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
570
10 Costly Database Performance Mistakes (And How To Fix Them)
andyatkinson
0
340
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
150
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Site-Speed That Sticks
csswizardry
10
690
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Bash Introduction
62gerente
613
210k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Writing Fast Ruby
sferik
628
62k
The Language of Interfaces
destraynor
158
25k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Faster Mobile Websites
deanohume
307
31k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
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
ありがとうございました