Elastic beanstalk と Docker と Play

5,399 views

Published on

Published in: Technology

Elastic beanstalk と Docker と Play

  1. 1. Elastic beanstalk と Docker と Play 河内 崇 @kawachi pLucky, Inc. AWS Startup Tech Meetup 2014/6/5
  2. 2. データ分析関連書籍
 翻訳やってます。 Scala, Play, iOS,
 Ruby, Rails," Java, C, Python," Javascript, Haxe etc.
  3. 3. サービス課題をサクッとチェック 事前登録受付中 http://logbook.strikingly.com/
  4. 4. 9月6~7日 日本最大のScala Conference http://scalamatsuri.org
  5. 5. Elastic beanstalk とは Amazon web service が提供する PaaS 的なもの データベース(RDS)、仮想ホスト(EC2)、ロードバ ランサ(ELB)をセットで立ち上げ 負荷に応じてホスト増加(Auto scaling) Tomcat, Rails, PHP, Python, Node.js などをサポート
  6. 6. なぜ私は Elastic beanstalk を
 使いたいか? 運用で楽をしたい いざとなったら ssh で入って調査できる Blue-Green deployment 的なものが簡単 もう1セット立ち上げてガバっと切り替え CNAME 切り替え
  7. 7. Elastic beanstalk + Tomcat + Scalatra 弊社製品の一部で安定稼働
  8. 8. 普通の web アプリを
 作りたくなった
 Play framework
  9. 9. Play framework Full stack Web framework Scala Rails ぽいけど rails より安全(型的に) Netty based 非同期IO 高性能
  10. 10. Play を elastic beanstalk で 動かすには .war にして
 Tomcat に乗せるしかない。 活かせない非同期IO (Netty)
  11. 11. そこにDocker対応のニュース! 2014/4/23
  12. 12. Docker Lightweight Linux container 環境(ライブラリなど)ごと持ち運べる Ubuntu ホストで CentOS 環境動かしたり DotCloud社(現Docker社)がオープンソース化 最新版は 0.11 (version 1 の RC 扱いらしい)
  13. 13. なにが嬉しいか? 開発、テスト、本番で同じ環境が使える Tomcat に限定されない。Netty が動かせる! Container内で httpd が動けばいい play2-war-plugin からの脱依存
  14. 14. 性能アップの予感 でもコンテナ層が増えてるぞ…
  15. 15. どっちが速いの? JVM Tomcat アプリ JVM Netty アプリ Docker Tomcat より
 Netty の方が速い 一階層多い
  16. 16. 無料の負荷計測サービス https://catmdes.com/features/performance-test/
  17. 17. HTMLファイルを置くか
 <meta> により所有者確認 国内5つのホストから
 要求がくる JMeter による
 シナリオテストも可能
  18. 18. ちょっと測ってみるか Play 2.2.3 で query string を echo back する
 アプリを作成 Tomcat + .war V.S. Docker + Netty Elastic beanstalk @ap-northeast-1
 Single instance m3.medium
  19. 19. まずは Tomcat + war 385 req/sec, エラー率 0%, response time: 0.42 sec
  20. 20. 念の為にもう一回 584 req/sec, エラー率 0%, response time: 0.27 sec
  21. 21. あれ、だいぶ速くなった? JIT? とはいえ
 一回の測定3分間 たまに外れ値が
 出る模様 0 150 300 450 600 1 2 3 4
  22. 22. 2度目の測定結果を採用 584 req/sec Tomcat + .war の結果
  23. 23. 続いて Docker + Netty
 行ってみよう!
  24. 24. エラーを出してもエラーにならない めげない
  25. 25. fuse install しようとしてエラー apt-get install -y --no-install-recommends openjdk-7-jdk で
 回避可能 Docker が古い.. 0.9.0. Docker の最新版では出ないエラー めげずに
  26. 26. 動いた! Dockerfile FROM ubuntu:trusty RUN sudo apt-get install -y --no-install-recommends openjdk-7-jdk ADD . /usr/local/play22-echo EXPOSE 80 CMD /usr/local/play22-echo/bin/play22-echo -Dhttp.port=80 sbt dist zip を展開して Dockerfile を入れて 再度圧縮し、elastic beanstalk へ upload 解凍した top directory に Dockerfile が無いとエラーなので注意
  27. 27. さてここで問題です Docker + Netty にしたら性能はどうなったで しょうか? A: すごい速くなった B: だいたい一緒くらいだった C: 逆に遅くなった
  28. 28. コイツ、、 1130 req/sec, エラー率 0%, response time: 0.12 sec
  29. 29. は、はやい! 0 300 600 900 1200 1 2 3 4 Tomcat Docker
  30. 30. 584 req/sec Tomcat + .war 1130 req/sec Docker+Netty 約2倍速 2度目の測定結果を採用
  31. 31. Summary Elastic beanstalk は人手の少ない start up の味方 Elastic beanstalk + Docker は
 とりあえず動かすならそんなにハマらない Deploy 手段などノウハウはまだ溜まってない Play やるなら Netty が速い JVM以外の環境でも【あなたの好きなもの】が使える CATS MDES は簡単無料で負荷テストできていい感じ
  32. 32. S3をprivate repo として
 使えるように! 2014/6/1

×