Slide 1

Slide 1 text

Rustで始める負荷試験 ゴリラ

Slide 2

Slide 2 text

自己紹介 株式会社テックリードという会社をやってい ます。 主にフロントエンド・バックエンドエンジニ アとして仕事しています。 好きなものはVim, Go, Rust, TypeScript, Deno, Wasm などです。 最近のマイブームはRustとWasmとDB自作です。 X : https://x.com/gorilla0513 zenn : https://zenn.dev/skanehira GitHub: https://github.com/skanehira

Slide 3

Slide 3 text

GopherがRust入門したので違いをまとめてみた https://zenn.dev/skanehira/articles/2024-08-12-go-rust-pros-cons

Slide 4

Slide 4 text

RustでWasm Runtimeを実装する本を書いた https://zenn.dev/skanehira/books/writing-wasm-runtime-in-rust

Slide 5

Slide 5 text

RustでDB自作やっている 最低限 create table, insert, select は動いた

Slide 6

Slide 6 text

自己紹介はこれくらいで…

Slide 7

Slide 7 text

本日の発表は

Slide 8

Slide 8 text

Rust製 負荷テストフレームワーク Gooseの紹介 https://github.com/tag1consulting/goose

Slide 9

Slide 9 text

Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性

Slide 10

Slide 10 text

Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性 • Locustと比べて約11倍ほどのトラフィックを生成できる 単一サーバーから数千ユーザを簡単にエミュレートできる => スピードとスケーラビリティ

Slide 11

Slide 11 text

Goose(グース)とは • LocustにインスパイアされたRust製の負荷テストフレームワーク フレームワークなので、ビルドしたシングルバイナリで動く => 可搬性、カスタマイズ性 • Locustと比べて約11倍ほどのトラフィックを生成できる 単一サーバーから数千ユーザを簡単にエミュレートできる => スピードとスケーラビリティ • Rust Foundationのメンバーであるtag1が開発している => 安心感

Slide 12

Slide 12 text

簡単な実装例を紹介

Slide 13

Slide 13 text

Gooseの実装例 • 負荷対象サーバー

Slide 14

Slide 14 text

Gooseの実装例 • 負荷実行クライアント • scenario!() シナリオの追加 シナリオは複数のtransaction で構成される • transaction!() トランザクションの追加 複数のリクエストとレスポンスの 検証で構成される 例: ログインと画像アップロード でトランザクションを分ける

Slide 15

Slide 15 text

Gooseの実装例 • 負荷の実施 • ––host 対象サーバー • ––users 接続ユーザー数 • ––iterations シナリオ実行回数 ––usersの数だけ実行

Slide 16

Slide 16 text

Gooseの実装例 • 結果のメトリクス • PER SCENARIO METRICS シナリオごとのメトリクス • PER TRANSACTION METRICS トランザクションごとのメトリクス • PER REQUEST METRICS HTTPリクエストごとのメトリクス リクエストごとのパーセンタイル

Slide 17

Slide 17 text

Gooseの実装例 • メトリクスの読み方の一例 PER TRANSACTION METRICS 項目 説明 Name シナリオ名 reqs シナリオで成功したリクエストの総数 fails シナリオで失敗したリクエストの総数 req/s リクエスト総数の対する成功した割合 fails/s リクエスト総数の対する失敗した割合 Avg(ms) リクエストの平均実行時間(ms) Min リクエスト実行時間の最小値 Max リクエスト実行時間の最大値 Median リクエスト実行時間の中央値 Status codes リクエストのレスポンスステータスコード

Slide 18

Slide 18 text

Gooseのここが良い 🎉 3選

Slide 19

Slide 19 text

HTML metrics

Slide 20

Slide 20 text

HTML metrics • HTMLでメトリクスやグラフが見れる

Slide 21

Slide 21 text

HTML metrics • HTMLでメトリクスやグラフが見れる

Slide 22

Slide 22 text

Logging

Slide 23

Slide 23 text

Logging • Gooseはリクエスト・エラーといったログを出力できる

Slide 24

Slide 24 text

Test plan

Slide 25

Slide 25 text

Test plan • 負荷の掛け方を指定できる 例:60秒間で10人のユーザーを起動しその後シャットダウンする前に5分間実行する $ cargo run --release -- -H http://local.dev/ \ --test-plan "10,1m;10,5m;0,0s"

Slide 26

Slide 26 text

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"

Slide 27

Slide 27 text

まとめ

Slide 28

Slide 28 text

•可搬性(シングルバイナリ) •カスタマイズ性(フレームワークなので自由度が高い) •ハイスピード(Locustの約11倍のトラフィック数) •ハイスケーラビリティ(単一サーバーから簡単に数千ユー ザ生成可能) •豊富なメトリクス(シナリオ・リクエストなど) •わかりやすいレポート(テキスト・HTMLレポート) •柔軟な設定(スパイクする負荷を設定できるなど)

Slide 29

Slide 29 text

Gooseについてもっと知りたい場 合は↓を参照してください https://book.goose.rs

Slide 30

Slide 30 text

最後に すこしだけ宣伝

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

VimConf は、世界初かつ世界で唯一のコミュニティに よって定期運営されているVimの国際カンファレンス 日付 : 2024年11月23日(土) 時間 : 09時30分~17時30分 懇親会: 17時30分~19時30分 場所 : アキバプラザ・アキバホール, at 東京 秋葉原 チケット販売開始予定: 2024年9月中旬 (約160名を予定)

Slide 33

Slide 33 text

スポンサー絶賛募集中!! https://docs.google.com/forms/d/e/1FAIpQLSe_MtcYYJ-gV- sHejH7XdXsFcD7lOuqVeQoaAhd6fpI_eUQbw/viewform

Slide 34

Slide 34 text

ありがとうございました