Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ガトリングを撃ちまくりたいお年頃
Tomohiko Himura
December 17, 2016
Programming
2
890
ガトリングを撃ちまくりたいお年頃
https://gbdaitokai.connpass.com/event/37730/
Tomohiko Himura
December 17, 2016
Tweet
Share
More Decks by Tomohiko Himura
See All by Tomohiko Himura
組織のパフォーマンスを高めるために 第1話 学習と文化
eiel
0
58
チームとチームのチーム
eiel
1
1.6k
大きめな病気になったときの医療費と収入源の話
eiel
1
410
最近やってること.pdf
eiel
0
81
Reactで静的サイトジェネレート
eiel
0
110
静的型なきJS界を救う英雄たちの話
eiel
0
920
入院中の勉強の仕方
eiel
0
1.3k
<ハ-ドル低めカスタムエレメントの始め方 />
eiel
1
1.1k
React + Material-UIで遊んだ感想と recomposeで遊んだ話
eiel
0
820
Other Decks in Programming
See All in Programming
Spring BootとKubernetesで実現する今どきのDevOps入門
xblood
0
340
AWSとCPUのムフフな関係
cmdemura
0
460
あなたと 「|」 したい・・・
track3jyo
PRO
2
1k
An Advanced Introduction to R
nicetak
0
1.8k
Form実装基本を学び直してみた
hyugatsukui
0
240
Git Rebase
bkuhlmann
10
1.2k
Rust、何もわからない...#6発表資料
ryu19
0
110
Jetpack Compose 完全に理解した
mkeeda
1
450
Cloudflare Workersと状態管理
chimame
3
480
NGK2023S - OCaml最高! スマホ開発にも使えちゃう?!
haochenxie
0
120
2023年にクル(かもしれない)通信ミドルウェア技術(仮)
s_hosoai
0
190
Prácticas de Seguridad en Kubernetes
pablokbs
0
120
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
109
16k
Facilitating Awesome Meetings
lara
33
4.6k
Product Roadmaps are Hard
iamctodd
38
7.7k
Building Your Own Lightsaber
phodgson
96
4.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
29
7.9k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
240
11k
The Art of Programming - Codeland 2020
erikaheidi
35
11k
The Straight Up "How To Draw Better" Workshop
denniskardys
226
130k
Into the Great Unknown - MozCon
thekraken
2
280
4 Signs Your Business is Dying
shpigford
171
20k
The World Runs on Bad Software
bkeepers
PRO
59
5.7k
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