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
ガトリングを撃ちまくりたいお年頃
Search
Tomohiko Himura
December 17, 2016
Programming
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ガトリングを撃ちまくりたいお年頃
https://gbdaitokai.connpass.com/event/37730/
Tomohiko Himura
December 17, 2016
More Decks by Tomohiko Himura
See All by Tomohiko Himura
Marpでmermaidは簡単だときいたけど
eiel
1
2.6k
バイナリ読むのにElixirしてみた
eiel
0
120
アジャイルはさておきMake People Awesomeしたい
eiel
0
230
レビューは最優先にするようにしている
eiel
0
370
再考 Fourkeys メトリクス
eiel
2
730
Test mockをSnapshot testする
eiel
0
190
devenvに入門した
eiel
1
200
関数プログラミングの考え方
eiel
1
400
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
520
Other Decks in Programming
See All in Programming
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
200
VibeCodingからAgenticWorkflowへ
starfish719
0
810
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
2
970
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
FastAPI の並行処理モデルを完全に理解する
hoto17296
8
2.9k
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
250
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.6k
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
250
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
110
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
140
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
200
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.7k
Prompt Engineering for Job Search
mfonobong
0
420
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
550
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
A Tale of Four Properties
chriscoyier
163
24k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
740
Leo the Paperboy
mayatellez
8
2.2k
Agile that works and the tools we love
rasmusluckow
331
22k
Navigating Weather and Climate Data
rabernat
0
490
Transcript
ΨτϦϯάΛ ܸͪ·͘Γ͍͓ͨࠒ 2016-12-17 ߹ಉษڧձ in େձԬࢁ -2016 Winter-
ͻΉΒ ͱͻ͜ ౡ͔Βདྷͨ ΞϓϦέʔγϣϯνϣοτπΫϨϧ github eiel twitter eielh
近所にある整体
None
ࠓͷ͓
注意事項 あんまり実用的ではない例が ちらほらありますがご了承ください。
最近ガトリングを 撃ち続けています
None
None
None
ガトリングじゃ何もでなかった
というわけで作ってみました
None
アジェンダ • 負荷テストツール Gatling • 「ただ、撃ち貫くのみ」 • いろいろ撃ち貫いてきた • まとめ
ෛՙςετπʔϧ Gatling
None
大人数で同時にブラウザを 操作しているかのようにできるツール
Gatling • Scala, Akka, Nettyで作られた • オープンソースの負荷テストツール • ハイパフォーマンス •
HTMLの静的レポートが生成できる • ブラウザ操作でテストシナリオがつくれる • Scalaのコードが生成される
どんな人におすすめか
ウェブアプリケーションが 作れるようになってきた
お客さんに価値を届けられる
そのアプリケーション アクセスがたくさんきても 本当に大丈夫ですか?
負荷がかかったときの 状態を確認するツール
RubyとかPHPとか書いてるけど
たまには Scala書きたいよね
ScalaTestとも統合されてて 機能テストツール的にも使えそう
͍ํͷࡶͳઆ໌
シナリオを用意する
Scalaで 直接書くこともできますが
レコーダを起動して
プロキシを設定して
ブラウザで操作する
package computerdatabase.advanced import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ import java.util.concurrent.ThreadLocalRandom
class AdvancedSimulationStep05 extends Simulation { object Search { val feeder = csv("search.csv").random val search = exec(http("Home") .get("/")) .pause(1) .feed(feeder) .exec(http("Search") .get("/computers?f=${searchCriterion}") .check(css("a:contains('${searchComputerName}')", "href").sav .pause(1) .exec(http("Select") .get("${computerURL}") Scalaのコードが生成される
Scala書けなくても使える
レポートの生成
None
ͨͩɺܸͪ؏͘ͷΈ IUUQEJDOJDPWJEFPKQB&"% &"&"&#&#&## &"&#&
ガトリング…
いっぱい並べて 撃ってみたいじゃないですか
ガトリング並べて リアルタイムモニタリング してみました
<DEMO>
None
ΨτϦϯάɾΫϥελʔ
SERFで がとりんぐ☆くらすたーを構築
ΨτϦϯάɾΫϥελʔͰ OPEFTKTΞϓϦέʔγϣϯΛܸͪൈ͘
࣌ܥྻ%#ʹใΛूΊ ϦΞϧλΠϜʹՄࢹԽ
$ serf event fire
None
正直な話 Gatling 一台で充分な負荷を かけることができます。 撃たれる側を強化すべきでした。
͍Ζ͍Ζܸͪ؏͍͖ͯͨ
たぶん wrk でやるのがいい と思いますが、 いろいろガトってみました。
ガトる内容 • 2分ぐらい • ガト 1台 • ジョジョにユーザが増えて2万まで • 1ユーザ1秒に一度アクセス
• 基本チューニングはしない
nodejs
nodejs
圧倒的安定性 エラー率 0% スループット 2981rps レスンポンスタイム 平均 2.216s nodejs
nodejs
nodejs
Golang
Golang
途中でファイルディスクプタ不足に エラー率 45% スループット 1776rps レスンポンスタイム 平均 0.011s Golang
Golang
Golang
python(wsgi)
python(wsgi)
python(wsgi) 比較的安定した感じ エラー率 45% スループット 650rps レスンポンスタイム 平均 0.8s
python(wsgi)
python(wsgi)
Ruby(puma + rack)
Ruby(puma + rack)
秒間80しか捌けてない エラー率 91% スループット 889rps レスンポンスタイム 平均 0.968s Ruby(puma +
rack)
Ruby(puma + rack)
None
php(apache)
php(apache)
apache壁が効いてる エラー率 53% スループット 1174rps レスンポンスタイム 平均 0.043s php(apache)
php(apache)
php(apache)
Haskell(wai + warp)
Haskell(wai + warp)
Goと同じ傾向 エラー率 45% スループット 1781rps レスンポンスタイム 平均 0.011s Haskell(wai +
warp)
Haskell(wai + warp)
Haskell(wai + warp)
erlang(cowboy)
erlang(cowboy)
erlang(cowboy) Goと似た傾向だけど少し違う エラー率 40% スループット 1752rps レスンポンスタイム 平均 0.114s
erlang(cowboy)
erlang(cowboy)
Scala(akka-http)
Scala(akka-http)
Scala(akka-http) nodejsを超える性能 エラー率 0% スループット 3342rps レスンポンスタイム 平均 1.871s
Scala(akka-http)
Scala(akka-http)
FSS SQT 4DBMB OPEFT IBTLFMM FSMBOH
FSS SQT (P 1)1 1ZUIPO 3VCZ
·ͱΊ
負荷テストツール Gatlingを紹介しました
複数のGatlingで 強い負荷をかけるデモをしました
いろんなものを 撃ち抜いてみました
負荷をかけると いろんな問題にぶつかります
アジャイルは価値を届けろというが
ユーザは いつも動いていて 反応が素早いシステムを求めてきやがる
価値あるサービスを リアクティブに構築するには
まだまだ勉強不足
こんな時代だからこそ
負荷テスト駆動開発 STDD
そして
アクターシステム ノンブロッキングIO
などの理解を深めないと いけないなと思いました
まとめ • Gatling • サービスにたくさん人が来るの練習をできる • 楽しい。 • nodejs チューニングしてないのにすげえ
• (ロジックあったらしらんけど) • アクターわからん。楽しい。 • Stress Test Deriven Development