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.4k
バイナリ読むのにElixirしてみた
eiel
0
110
アジャイルはさておきMake People Awesomeしたい
eiel
0
220
レビューは最優先にするようにしている
eiel
0
360
再考 Fourkeys メトリクス
eiel
2
720
Test mockをSnapshot testする
eiel
0
180
devenvに入門した
eiel
1
180
関数プログラミングの考え方
eiel
1
380
逆コンウェイ作戦はフィードバックループを作るために 逆向きの流れをつくること (5分版)
eiel
0
500
Other Decks in Programming
See All in Programming
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
170
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
330
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
290
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.6k
dRuby over BLE
makicamel
2
410
Webフレームワークの ベンチマークについて
yusukebe
0
190
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
250
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
730
関数型プログラミングのメリットって何だろう?
wanko_it
0
130
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.3k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
1
190
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Design in an AI World
tapps
1
260
Making the Leap to Tech Lead
cromwellryan
135
10k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
480
What's in a price? How to price your products and services
michaelherold
247
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
440
Are puppies a ranking factor?
jonoalderson
1
3.7k
Scaling GitHub
holman
464
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
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