SlideShare una empresa de Scribd logo
1 de 27
inside 2012新卒説明会
        技術部 田中太陽 2011/02/28
全ては1本の電話から

• from 担当のW氏



• ログインしてみると、確かに重い。
• アタックらしきアクセスの形跡あり
   → 大人なのでdenyしてスルー
• とりあえず、I/O waitが結構かかってる
アプリケーションの構成を確認

 • ひとまずapacheのアクセスログを見てみる
 • ものすごい勢いでAPIがコールされてる
 • しかも、APIの処理を読んでみると、
   MySQLにログを書いてる
説明会コンテンツの要件
• 金曜に、リクナビで登録した人が同時にアクセス
 – 2000人だと!
 – この電話を受けたのは月曜
• ページアクセスに合わせ、
  どの言語を何人見ているかリアルタイムに示し
  たい
• スピーカーが変わったら即時切り替えたい

(´-`).。oO(全部従来のAPIだけでやろうとし
たら、多分負荷で落ちるな。。。)
状況の配信はリアルタイムで
• APIコールによる
  Apache+PHPのプロセス生成コストを減らす
• リアルタイム配信は、からあげクンサイトにて
  Tatsumaki(Perl)での構築経験アリ
• リアルタイムシステム構築の実績がとにかく
  もっと欲しい
水曜はリハ


• 月曜に電話を受けたのに、水曜までに
  完全な状態にするのは無理
• ひとまず動くシステムを作りつつ、
  何をしたいのかを把握してもらう
• Tatsumaki(Perl)でシステムを構築開始
• 水曜昼に何とか間に合う
リハ終了

•   この時点ではAPIを合わせただけ
•   負荷対策等は全くやってない
•   数人がやってみて、割と好評だったらしい
•   「これ、1000人接続して落ちないの?」
    – by CEO
    – 一番リーチしたい人
徹夜一日目

• スケーリングも考慮したシステム構築
  → マスタ・スレーブ方式
• 【急募】リバースプロキシサーバ
 – 1時間以上繋いでいてもタイムアウトにならない
  • nginxのタイムアウトは75秒が最大。使えない><
 – ロードバランサ付き
 – URLに応じたルーティングも
  • つまりL7対応が必要

• HAProxyを発見!期待通りの動作
HAProxyの設定(1)
HAProxyの設定(2)




  • 各種設定はブロックごとに適用可能
  • 例えば、staticブロックだけtimeoutを
    もっと短くすることもできる
マスタ・スレーブの方針

• マスタプロセス
 – こちらがメイン
 – マスタだけで動ける体制にしておく
• スレーブプロセス
 – 特定のURLのみに対応するように
 – スレーブの起動と同時にマスタへアクセス
   そのソケットハンドラをどこかに紐付けて管理
   → 管理クラスを作成してそこに格納しておいた
ストリーミングシステムの概要
冗長化できた!

• 負荷試験をしてみる
  → JMeterで1000コネクション作成
• 閲覧者がアクションを起こしたときの
  APIをバシバシ叩かせる
• 超重い。。。

  /(^o^)\ナンテコッタイ
0.3req/secだと。。。

• 1リクエストに3秒かかるのは絶対落ちる
• スレーブへのpush_writeが
  シーケンシャルに書いてあるので、
  全部終わるまでレスポンスを返さないのかも
  → AE::timerで逃げてみる
• APIレスポンスはすぐ返るようになった
• が、全体的には
  思ったようなパフォーマンスは出ない
マスタの負荷を減らす

• マスタのプロセス増やせばいいんじゃない
• 対応はすぐにできた
 – 複数のマスタに接続できるようにしただけ
 – HAProxyでも、APIアクセスについては
   ラウンドロビンするように設定
• が、それでも全体的には
  思ったようなパフォーマンスは出ない
マスタとスレーブが同居してる
• マスタのパフォーマンスが
  スレーブに引っ張られているのではないか
• いずれにせよ、両方コケるのはヤバい
• マスタサーバとスレーブサーバを
  物理的に分割する
• が、それでも全体的には
  思ったようなパフォーマンスは出ない
マスタとスレーブの関係




  • マスタ同士、スレーブ同士は独立の関係
  • スレーブから全てのマスタを参照する
  • 更新APIはいずれかのマスタで受け、
    全スレーブに通知後、閲覧者にプッシュされる
ふと、天の声が聞こえた

• Luke, use the “node.js”
  (ルークよ、node.jsを使うのだ)
• 嘘です
• でも、マスタプロセスなら実装は複雑ではな
  いので、node.jsで書き直せると思った。
• 1時間後、
  node.js(マスタ)+Tatsumaki(スレーブ)完成
• 動いた☺
パフォーマンス大幅アップ

• 当社比300%UP




• これって、スレーブもnode.jsにすれば、
  もっと早くなるんじゃね?
  → 徹夜二日目へ(翌日が本番!)
スレーブの実装




     だいたいあってる
マスタの実装(一部)




     スレーブの実装に加え、
   こんな感じで更新APIをつくっていく
本番当日朝、ついに完成する
• ちゃんと動いた
• 出社後、スレーブプロセスを入れ替え、
  負荷試験をする
• 2000コネクション。以前の2倍の負荷に
• それでも前より早い
 – APIに連続1000回アクセスするテストスクリプトを作成
 – 10req/sec近くは余裕だった
• これならいける。。。かも!
• 念のため、マスタ用サーバをもう1台手配
• 結果、3台体制に
そして本番
• 400,500,600と上がる接続数
• 常にtopで負荷を確認
 – マスタは余裕、スレーブはLA0.3くらい
• 21:44 説明会終了!
• 最終的な接続数は合計1400前後
振り返って
• (自分にとって)新技術投入しまくりの3日間
 –   node.js初の実戦投入
 –   マスタスレーブ独自構築
 –   HAProxy
 –   etc…
• node.jsで構築できた事で、
  全体で技術共有しやすくなった
 – 特に僕の所属しているクライアントワークチームは
   PHPやAS3、JSがメインのため
今後に向けた課題
• node.jsについての理解が足りてない
 – proxyではなく、node.js側から接続が切れてしまう疑惑
   • 現象レベルでの確認のみなので、調査中
 – プロセスフォークでの省メモリ化
• 運用レベルでの連携の足りなさ
 – プライオリティの設定
 – 例外発生時の動作の確認
• 設計上の問題
 – 異常時の接続数確認等々
 – 無停止でのリソース追加方法
                                 etc…
Tatsumaki? or node.js?
• Tatsumaki
  – システム全体がよくテストされている
  – 豊富なCPANリソースを使える
  – 既存のPerlシステムとの連携
• node.js
  – 省リソースかつハイパフォーマンス
  – JS書ける人ならだれでもサーバサイドの
    非同期プログラミングができる
  – モテる(it’s just HOPE!)
FIN.



 ご清聴
 ありがとうございました!

Más contenido relacionado

La actualidad más candente

Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Masayuki Maekawa
 
第二回tento.tech定例会
第二回tento.tech定例会第二回tento.tech定例会
第二回tento.tech定例会Sosuke Suzuki
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)cancolle
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
Web Worker +α - HTML5/JavaScript and Service Worker API
Web Worker +α - HTML5/JavaScript and Service Worker APIWeb Worker +α - HTML5/JavaScript and Service Worker API
Web Worker +α - HTML5/JavaScript and Service Worker APIKen William
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Teppei Sato
 
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)Eugene Yokota
 
OSC福岡2012 LT 20121208
OSC福岡2012 LT 20121208OSC福岡2012 LT 20121208
OSC福岡2012 LT 20121208学 松崎
 

La actualidad más candente (11)

Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2Text editor anywhereでtextareaもsublime text 2
Text editor anywhereでtextareaもsublime text 2
 
RxSwift
RxSwiftRxSwift
RxSwift
 
第二回tento.tech定例会
第二回tento.tech定例会第二回tento.tech定例会
第二回tento.tech定例会
 
イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)イルカになりたい(TokyoR #63 LT)
イルカになりたい(TokyoR #63 LT)
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
Web Worker +α - HTML5/JavaScript and Service Worker API
Web Worker +α - HTML5/JavaScript and Service Worker APIWeb Worker +α - HTML5/JavaScript and Service Worker API
Web Worker +α - HTML5/JavaScript and Service Worker API
 
Play ja 3_update
Play ja 3_updatePlay ja 3_update
Play ja 3_update
 
OCamlとUnicode
OCamlとUnicodeOCamlとUnicode
OCamlとUnicode
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
 
OSC福岡2012 LT 20121208
OSC福岡2012 LT 20121208OSC福岡2012 LT 20121208
OSC福岡2012 LT 20121208
 

Similar a inside 2012新卒説明会

DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter大要 伊藤
 
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話Takeuchi Yuichi
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Tokuhiro Matsuno
 
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verサーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verSeiichiro Ishida
 
Ops worksに今後期待するところ
Ops worksに今後期待するところOps worksに今後期待するところ
Ops worksに今後期待するところFumihiko Shiroyama
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたいMasato Noguchi
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラsusumu tanaka
 
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてくださいレガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてくださいIsamu Suzuki
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクションTakahiro Okumura
 
20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版tatsuo sakurai
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open APIKohei Saito
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1Keisuke Imai
 

Similar a inside 2012新卒説明会 (20)

DevOps for Small Starter
DevOps for Small StarterDevOps for Small Starter
DevOps for Small Starter
 
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
Shinjuku.rb #29 ActiveJobでSQS使ったのとその永続化についての話
 
Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用Lineにおけるspring frameworkの活用
Lineにおけるspring frameworkの活用
 
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare verサーバ擬人化ユーザ会キックオフ資料 Slideshare ver
サーバ擬人化ユーザ会キックオフ資料 Slideshare ver
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
Ops worksに今後期待するところ
Ops worksに今後期待するところOps worksに今後期待するところ
Ops worksに今後期待するところ
 
Sprocketsを捨てたい
Sprocketsを捨てたいSprocketsを捨てたい
Sprocketsを捨てたい
 
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラインフラエンジニアがk8sでアプリを作って見えた今後のインフラ
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ
 
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてくださいレガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
レガシーなアプリにWeb apiを実装してなみだ目になったのでちょっといろいろ教えてください
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminar
 
Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
2015年GMOペパボ新卒エンジニア研修 Webオペレーション研修イントロダクション
 
20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版20140131 万葉帰社日発表 チーム積み重ね 公開版
20140131 万葉帰社日発表 チーム積み重ね 公開版
 
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open APIRESTful API (JAX-RS) 書くだけで仕様書も自動で作られていく話 with MicroProfile Open API
RESTful API (JAX-RS) 書くだけで仕様書も 自動で作られていく話 with MicroProfile Open API
 
Riot.jsを用いたweb開発 takusuta tech conf #1
Riot.jsを用いたweb開発   takusuta tech conf #1Riot.jsを用いたweb開発   takusuta tech conf #1
Riot.jsを用いたweb開発 takusuta tech conf #1
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
Dockerとdev ops
Dockerとdev opsDockerとdev ops
Dockerとdev ops
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 

inside 2012新卒説明会