Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ガトリングを撃ちまくりたいお年頃

 ガトリングを撃ちまくりたいお年頃

Tomohiko Himura

December 17, 2016
Tweet

More Decks by Tomohiko Himura

Other Decks in Programming

Transcript

  1. ΨτϦϯάΛ
    ܸͪ·͘Γ͍͓ͨ೥ࠒ
    2016-12-17 ߹ಉษڧձ in େ౎ձԬࢁ -2016 Winter-

    View Slide

  2. ͻΉΒ ͱ΋ͻ͜
    ޿ౡ͔Βདྷͨ
    ΞϓϦέʔγϣϯνϣοτπΫϨϧ
    github eiel
    twitter eielh

    View Slide

  3. 近所にある整体

    View Slide

  4. View Slide

  5. ࠓ೔ͷ͓࿩

    View Slide

  6. 注意事項


    あんまり実用的ではない例が
    ちらほらありますがご了承ください。

    View Slide

  7. 最近ガトリングを
    撃ち続けています

    View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. ガトリングじゃ何もでなかった

    View Slide

  12. というわけで作ってみました

    View Slide

  13. View Slide

  14. アジェンダ
    • 負荷テストツール Gatling
    • 「ただ、撃ち貫くのみ」
    • いろいろ撃ち貫いてきた
    • まとめ

    View Slide

  15. ෛՙςετπʔϧ
    Gatling

    View Slide

  16. View Slide

  17. 大人数で同時にブラウザを
    操作しているかのようにできるツール

    View Slide

  18. Gatling
    • Scala, Akka, Nettyで作られた
    • オープンソースの負荷テストツール
    • ハイパフォーマンス
    • HTMLの静的レポートが生成できる
    • ブラウザ操作でテストシナリオがつくれる
    • Scalaのコードが生成される

    View Slide

  19. どんな人におすすめか

    View Slide

  20. ウェブアプリケーションが
    作れるようになってきた

    View Slide

  21. お客さんに価値を届けられる

    View Slide

  22. そのアプリケーション
    アクセスがたくさんきても
    本当に大丈夫ですか?

    View Slide

  23. 負荷がかかったときの
    状態を確認するツール

    View Slide

  24. RubyとかPHPとか書いてるけど

    View Slide

  25. たまには
    Scala書きたいよね

    View Slide

  26. ScalaTestとも統合されてて
    機能テストツール的にも使えそう

    View Slide

  27. ࢖͍ํͷࡶͳઆ໌

    View Slide

  28. シナリオを用意する

    View Slide

  29. Scalaで

    直接書くこともできますが

    View Slide

  30. レコーダを起動して

    View Slide

  31. プロキシを設定して

    View Slide

  32. ブラウザで操作する

    View Slide

  33. 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のコードが生成される

    View Slide

  34. Scala書けなくても使える

    View Slide

  35. レポートの生成

    View Slide

  36. View Slide

  37. ͨͩɺܸͪ؏͘ͷΈ
    IUUQEJDOJDPWJEFPKQB&"%
    &"&"&#&#&##
    &"&#&

    View Slide

  38. ガトリング…

    View Slide

  39. いっぱい並べて
    撃ってみたいじゃないですか

    View Slide

  40. ガトリング並べて
    リアルタイムモニタリング
    してみました

    View Slide


  41. View Slide

  42. View Slide

  43. ΨτϦϯάɾΫϥελʔ

    View Slide

  44. SERFで
    がとりんぐ☆くらすたーを構築

    View Slide

  45. ΨτϦϯάɾΫϥελʔͰ
    OPEFTKTΞϓϦέʔγϣϯΛܸͪൈ͘

    View Slide

  46. ࣌ܥྻ%#ʹ৘ใΛूΊ
    ϦΞϧλΠϜʹՄࢹԽ

    View Slide

  47. $ serf event fire

    View Slide

  48. View Slide

  49. 正直な話
    Gatling 一台で充分な負荷を
    かけることができます。
    撃たれる側を強化すべきでした。

    View Slide

  50. ͍Ζ͍Ζܸͪ؏͍͖ͯͨ

    View Slide

  51. たぶん wrk でやるのがいい
    と思いますが、
    いろいろガトってみました。

    View Slide

  52. ガトる内容
    • 2分ぐらい
    • ガト 1台
    • ジョジョにユーザが増えて2万まで
    • 1ユーザ1秒に一度アクセス
    • 基本チューニングはしない

    View Slide

  53. nodejs

    View Slide

  54. nodejs

    View Slide

  55. 圧倒的安定性
    エラー率 0%
    スループット 2981rps
    レスンポンスタイム 平均 2.216s
    nodejs

    View Slide

  56. nodejs

    View Slide

  57. nodejs

    View Slide

  58. Golang

    View Slide

  59. Golang

    View Slide

  60. 途中でファイルディスクプタ不足に
    エラー率 45%
    スループット 1776rps
    レスンポンスタイム 平均 0.011s
    Golang

    View Slide

  61. Golang

    View Slide

  62. Golang

    View Slide

  63. python(wsgi)

    View Slide

  64. python(wsgi)

    View Slide

  65. python(wsgi)
    比較的安定した感じ
    エラー率 45%
    スループット 650rps
    レスンポンスタイム 平均 0.8s

    View Slide

  66. python(wsgi)

    View Slide

  67. python(wsgi)

    View Slide

  68. Ruby(puma + rack)

    View Slide

  69. Ruby(puma + rack)

    View Slide

  70. 秒間80しか捌けてない
    エラー率 91%
    スループット 889rps
    レスンポンスタイム 平均 0.968s
    Ruby(puma + rack)

    View Slide

  71. Ruby(puma + rack)

    View Slide

  72. View Slide

  73. php(apache)

    View Slide

  74. php(apache)

    View Slide

  75. apache壁が効いてる
    エラー率 53%
    スループット 1174rps
    レスンポンスタイム 平均 0.043s
    php(apache)

    View Slide

  76. php(apache)

    View Slide

  77. php(apache)

    View Slide

  78. Haskell(wai + warp)

    View Slide

  79. Haskell(wai + warp)

    View Slide

  80. Goと同じ傾向
    エラー率 45%
    スループット 1781rps
    レスンポンスタイム 平均 0.011s
    Haskell(wai + warp)

    View Slide

  81. Haskell(wai + warp)

    View Slide

  82. Haskell(wai + warp)

    View Slide

  83. erlang(cowboy)

    View Slide

  84. erlang(cowboy)

    View Slide

  85. erlang(cowboy)
    Goと似た傾向だけど少し違う
    エラー率 40%
    スループット 1752rps
    レスンポンスタイム 平均 0.114s

    View Slide

  86. erlang(cowboy)

    View Slide

  87. erlang(cowboy)

    View Slide

  88. Scala(akka-http)

    View Slide

  89. Scala(akka-http)

    View Slide

  90. Scala(akka-http)
    nodejsを超える性能
    エラー率 0%
    スループット 3342rps
    レスンポンスタイム 平均 1.871s

    View Slide

  91. Scala(akka-http)

    View Slide

  92. Scala(akka-http)

    View Slide

  93. FSS
    SQT
    4DBMB
    OPEFT
    IBTLFMM
    FSMBOH
    FSS
    SQT
    (P
    1)1
    1ZUIPO
    3VCZ

    View Slide

  94. ·ͱΊ

    View Slide

  95. 負荷テストツール
    Gatlingを紹介しました

    View Slide

  96. 複数のGatlingで
    強い負荷をかけるデモをしました

    View Slide

  97. いろんなものを
    撃ち抜いてみました

    View Slide

  98. 負荷をかけると
    いろんな問題にぶつかります

    View Slide

  99. アジャイルは価値を届けろというが

    View Slide

  100. ユーザは
    いつも動いていて
    反応が素早いシステムを求めてきやがる

    View Slide

  101. 価値あるサービスを
    リアクティブに構築するには

    View Slide

  102. まだまだ勉強不足

    View Slide

  103. こんな時代だからこそ

    View Slide

  104. 負荷テスト駆動開発
    STDD

    View Slide

  105. そして

    View Slide

  106. アクターシステム
    ノンブロッキングIO

    View Slide

  107. などの理解を深めないと
    いけないなと思いました

    View Slide

  108. まとめ
    • Gatling
    • サービスにたくさん人が来るの練習をできる
    • 楽しい。
    • nodejs チューニングしてないのにすげえ
    • (ロジックあったらしらんけど)
    • アクターわからん。楽しい。
    • Stress Test Deriven Development

    View Slide