RailsDevCon 2010 で話してきた
こんにちは! onk です。
一昨日の 11/20 に RailsDevCon2010 にスピーカーとして参加してきました。場所はオラクル青山センターさん。
聞いていただいた皆さま,ありがとうございました。 いやー,30 分も話すの初めてだったので緊張したw 実行委員の皆さまもお疲れさまでした!
プレゼン資料はこちら⇒とあるアプリの開発運用(トラブルシュート)
内容ですが,
ソーシャルならではの負荷分散、インフラ、ログ解析とかが聞けると夢が広がっていいかも。他セッションと絶対かぶらないし。大規模サービス作ろうとしている人にはありがたいと思います。
と @2celeb さんからリクエストがあったので,『聞くだけで運用した気になるソーシャルアプリ』を主題にしました。駆け足でしたが,伝えたいことは盛り込めたかなぁと思います。少しでも参考になれば幸いです。
関連記事
- RailsDevCon2010
- Togetter - 「RailsDevCon2010のハッシュタグ(#railsdevcon)のまとめ」
- RailsDevCon2010に行ってきた - 平凡なエンジニアの独り言
- Rails Developer Conference2010 聴講記 - TrinityT’s LABO
- RailsDevCon2010に参加してきました - exdesign
- Rails Dev Con に行ってきた :: marugoshi.org
- UKSTUDIO - RailsDevCon2010で話してきました
- RailsDevCon 2010にてCucumberの始め方の話をしました - moroの日記
以下,twitter での反応と補足
Page 1-6
- sasata299タイトル画面ww #RailsDevCon
- ikm一瞬見えたロゴがw #railsdevcon
- sgtakeru@onk さんのセッション開始 #RailsDevCon
- d6rkaiz#RailsDevCon とあるソーシャルアプリの開発運用 @onk さん
- DiscoveryCoach3つ目のセッション、とあるアプリの運用開発。 (#railsdevcon live at http://ustre.am/qnNA)
- ClockWorkStudioとあるソーシャルゲームの開発運用(トラブルシュート) #RailsDevCon
- ikm意外と会場にソーシャルゲームを作った人が少ない #railsdevcon
- oukayukaO・N・K! O・N・K!! #railsdevcon
話し始める前にソーシャルゲームを開発したことがある人に挙手してもらったんですがほとんど居ませんでした。遊んでる人で半分ぐらいだったかな。
ロゴはおなじみ http://to-a.ru/ ですね。名付け親は @youthk。
page7-12
- sgtakeruソーシャルアプリは、API利用、人口爆発、短納期 #RailsDevCon
- DiscoveryCoachまずはソーシャルアプリのAPI利用の話 (#railsdevcon live at http://ustre.am/qnNA)
- DiscoveryCoach開発はAPIを使った場合のデバックの仕方が肝。 (#railsdevcon live at http://ustre.am/qnNA)
- ar1ハンゲームでけー #RailsDevCon つか、800万人いるのかドリコムのソーシャルゲー.
あ,p11 も p12 もアクティブユーザ数じゃなくて会員数です。念のため。適当にプレスリリースから拾ってきたので半年分ぐらい誤差があると思う。
page 13-18
- cesare#RailsDevCon 「大安なのでリリース」w
- ikm大安大事 #railsdevcon
- agilekawabata大安でリリース #RailsDevCon
- ar1大安なのでリリース(w #RailsDevCon
- oukayukaソーシャルアプリは2ヶ月でリリースがデフォ #railsdevcon
- sgtakeru大安でリリース&バージョンアップ #RailsDevCon
- tyabe#RailsDevCon リリース日は大安
- adzuki34「大安でリリース」 #RailsDevCon
- hs9587#RailsDevCon 「とあるソーシャルアプリの開発運用」 大安なのでリリース
- DiscoveryCoach2ヶ月でリリースは想定内。短納期をいかにこなすか。何を犠牲にして何を得るのか。。。が大事。 (#railsdevcon live at http://ustre.am/qnNA)
- agilekawabata大安リリース駆動開発だな #RailsDevCon
- ClockWorkStudio聴いたこともないgemがズラッと並んでた #RailsDevCon
- ikmunicorn+nginx+rails3+ruby1.9.2など、今風の環境 #railsdevcon
- oreradioドリコムさんもRedis使ってるのね。 #RailsDevCon
- TrinityTミドルウェア、ことごとく最新だ。unicorn2, nginx0.7, Rails3, MySQL5.1, Ruby1.9.2, Redis.... やるなドリコム! #RailsDevCon
- HexaRedis 使っているのか。 #RailsDevCon
- d6rkaiz#RailsDevCon ドリコムさんでの環境一例 nginx+unicorn+mysql+memcached+redis+rails
「2ヶ月でリリースがデフォ」はさすがに言い過ぎっす……。
ミドルウェアは大体最新に合わせるようにしてますねー。「RailsConf 2010 に合わせてリリースされるだろう」と Rails3 beta で開発した挙句 rc4 の状態で本番投入したりとか,Passenger3 で地雷踏んだりとかしています(
page 19-24
- ar1ドリコムのミドルウェア環境のversionはかなりあたらしいので揃えてるな。L5520 x2で32GBメモリの上に仮想化。8つくらいのVM #RailsDevCon
- ar1#RailsDevCon リクエスト&レスポンスを確認しろ! HTTPのステータスコードをみろ!
- cesare#RailsDevCon 「困ったら TCP まで降りる」基本ですなw
- ikm困ったらリクエストとレスポンスを見る。TCPレイヤーで見るのが確実 #railsdevcon
- DiscoveryCoachバグで3困ったらTCPレイヤまで降りてパケットを確認しよう。 (#railsdevcon live at http://ustre.am/qnNA)
- sgtakeruデバックは、困ったら、request/resonseまでみる。TCPレイヤーまで降りてパケットを見る。 #RailsDevCon
- arihhパケット監視マジ重要 #RailsDevCon
- takaiTCPじゃなくてHTTPだよね
はい,HTTP でしたごめんなさい!
アプリの中から見ているだけだと oauth や jpmobile の挙動によく泣かされたので,API とやり取りするときは必ず WAF が処理する前の request を眺めるようにしています。
サーバ構成はあくまで基本構成で,本番は web がズラーっと横に並んだり cache や db の slave が並んだりします。
page 25-30
- ar1#RailsDevCon Net::HTTPにloggerをしこむ net-http-spy. というかこれがrubyねた最初?
- ClockWorkStudionet::httpにloggerをしこむnet-http-spy #RailsDevCon
- TokyoIncidentsnet-http-spy #RailsDevCon
- DiscoveryCoachかなり具体的ですごい。会場の文字入力のかちゃかちゃという音が今日最大かも。。ww (#railsdevcon live at http://ustre.am/qnNA)
- ikmnet-http-spyでNet::HTTPにロガーを仕込む。超便利そう #railsdevcon
- TrinityTnet-http-spy tcpflow #RailsDevCon
- hs9587#RailsDevCon 「とあるソーシャルアプリの開発運用」 問題発見は request と response を見る、眺めてれば分かる事も多い。 net-http-spy Net::HTTP にログを仕込む
- ar1#RailsDevCon tcpflowつかってんのか。。yumとかaptをみたり。gree行きのも見ると。。
- d6rkaiz#RailsDevCon tcpflow // tcpdumpの保存しないバージョン
- masaki925net-http-spy でTCPパケットロギングしてデバッグ #RailsDevCon
- TokyoIncidentstcpflow #RailsDevCon
martinbtt's net-http-spy at master - GitHub ですね。外にアクセスしてるのが一目瞭然で便利なので,僕は .irbrc に
require "net-http-spy"
を書いています。
tcpflow は yum や apt で入れてください。ファイルに落としたいときってそんなに無いので flow で十分なんですよねー。
page 31-36
- _shimadaタイトルに反して超実践的で参考になる (#railsdevcon live at http://bit.ly/a480k3
- nog凄く具体的な話してるなー。 (#railsdevcon live at http://ustre.am/qnNA)
- DiscoveryCoach巨大SNSのアプリだとスモールスタートできない。。。 (#railsdevcon live at http://ustre.am/qnNA)
- nogRails1インスタンス200MB?多くね? (#railsdevcon live at http://ustre.am/qnNA)
- ar1#RailsDevCon スモールスタートさせてくれない。1ヶ月で30万突破を視野にしておく。10万DAUで 1000万imp/day -> 230imp/s 。Railsは200MB workerだと かけ算で40G.
- ar1#RailsDevCon m1.xlargeの限界は2300QPSくらい
- ClockWorkStudio230imp/secだった場合の必要なマシンリソースの説明が具体的すぎてすげえ #RailsDevCon
- tkawaスモールスタート機能(?)あるといいかも。招待制にするとかすればいいのかな? (#railsdevcon live at http://ustre.am/qnNA)
- DiscoveryCoachマシンのスペックまでも。。。もう明日からはじめるソーシャルアプリ的な話ですね。 (#railsdevcon live at http://ustre.am/qnNA)
CPU 使用率はアプリによって違うだろうから,分かりやすくメモリ使用量で表現しています。150MB 超えることもあるので念のため 200 弱と言っておきました!
page 37-42
- ikmデータ量の増加が著しいのでmaster/slave必須 #railsdevcon
- sasata299ソーシャルゲームの規模感は凄いなぁー #RailsDevCon
- ysakaki@onk の発表実践的で凄いな。こういう話がもっと聞きたい! #RailsDevCon
- TokyoIncidentsこのスライドは絶対復習したい #RailsDevCon
- ar1#RailsDevCon マイミク村. ともだちコレクションみたいなもの。質問を全て保存するのでしんどい。DBをなんとかする。
- shinodoggソーシャルゲームのキャパシティプランニングの話。コレは参考になるなぁ。こういうのを大安の日ドリブンみたいなノリで継続してリリースし続けるのはカッコイイ。 #railsdevcon
- DiscoveryCoachDBのmaster/slave分散を考える。 (#railsdevcon live at http://ustre.am/qnNA)
- johnsmith0707スケールアウトか。puppetとかもあるように、最近はほんとにスケーラビリティの高さが求められるよね。 #RailsDevCon
- ikmmaster/slaveはMasochism #railsdevcon
- ar1#RailsDevCon master/slave分散。参照系だったらslaveを見にいく、updateはmasterに、とかはアプリで書く。ライブラリつかってない
- _shimadaActiveRecordでmaster/slave分散は難しくない (#railsdevcon live at http://bit.ly/a480k3
- Revolution On Rails: [PLUGIN RELEASE] ActsAsReadonlyable
- schoefmax's multi_db at master - GitHub
- technoweenie's masochism at master - GitHub
- kovyrin's db-charmer at master - GitHub
- fiveruns's data_fabric at master - GitHub
- tchandy's octopus at master - GitHub
DB 切り替えてる部分はどれも 100 行無いぐらいなので読んでみるといいです。使い方じゃなくて中身に言及している記事が増えると世界が面白くなる。
page 43-48
- ar1#RailsDevCon JOINできないから、RDB関連は消す。habtmとか。
- junyaゲームはEventually Consistentだとまずいデータがほとんどだから面倒くさそうだ。 #RailsDevCon
- DiscoveryCoach更新系をmasterに、参照系をslaveにまわしてみたが、ゲームのアプリは更新系が多くて限界がくる。例:体力減る。 (#railsdevcon live at http://ustre.am/qnNA)
- TrinityTマスタDBをテーブルごとに分割→has_manyやbelogs_toが使えなくなる→関連はAP側で実装か〜。 凄い試行錯誤だったんだろうな。 #RailsDevCon
すみません見栄張りました。分割はカテゴリごとなので,そのカテゴリ内では JOIN 可能です。なので自分でクエリ投げ直す処理はそんなに発生しないですね。
page 49-54
- ar1#RailsDevCon rails3のshardingにはoctopus. 最近はいいハードなのでscaleupで対応
- ikmshardingはdb-charmer, data_fabric, octopus #railsdevcon
- hs9587#RailsDevCon 「とあるソーシャルアプリの開発運用」 Sharding 、DB のレプリケーションと分割、そういう gem もある
- ar1#RailsDevCon MongoDBにするのは悩み中。AR捨てるのが..
- sasata299master-slaveはmasochizm、shardingはoctopusを使ってやってるらしい #RailsDevCon
- _shimadaテストデータはfakerで作成 (#railsdevcon live at http://bit.ly/a480k3
- agilekawabataテストデータ生成に便利なgem faker #RailsDevCon
- oukayuka負荷テスト用のダミーデータを作ってくれるgem > faker #railsdevcon
- ClockWorkStudio50万ユーザが3ヶ月遊んだ想定のデータを作成した上でのアクセス負荷試験 #RailsDevCon
- DiscoveryCoach負荷テストは50万ユーザが3ヶ月遊んだ想定のデータを作成してm本番想定と同じアクセス負荷をかけて行う。 (#railsdevcon live at http://ustre.am/qnNA)
- RailsDevCon負荷テストのためにリリース前に50万ユーザが3ヶ月遊んだ想定のデータを突っ込む。 #RailsDevCon
- sasata299"MongoDBを使えば解決するんじゃないか”w #RailsDevCon
- ar1#RailsDevCon jmeter + fakerでデータ生成 で、負荷テスト.スループット,DiskIO、コネクション数に注目(webとdb)。
スケールアップで対応できちゃったので,octopus まだ使ってません。でも今使うならコレかなぁと考えています。
MongoDB は試してみたいんですが,Mongo 脳になって綺麗な設計が出来るようになるまでにまた 3 アプリぐらいかかるんだろうな。
負荷テストと監視については YAPC::Asia 2010 での myfinder さんの発表が良かったです。myfinder's blog: YAPC::Asia 2010 でソーシャルアプリのシステム監視運用について Talk してきました
page 55-60
- DiscoveryCoach基本、最速でユーザにレスポンスを返す。後は裏で非同期。 (#railsdevcon live at http://ustre.am/qnNA)
- ikmTOPへのアクセスをトリガーにして各種ページの準備を事前に実行する、とか #railsdevcon
page 61-66
- nogメモ:Resque (#railsdevcon live at http://ustre.am/qnNA)
- _shimada非同期処理は Resque。 管理画面あり (#railsdevcon live at http://bit.ly/a480k3
- sasata299Resqueで非同期処理をガンガン使ってるみたい。マイページ開いたときにはデータが出来上がってる想定みたいだけど間に合わなかったときはどうするんだろう #RailsDevCon
- ar1#RailsDevCon 5秒ルールのせいで、非同期を徹底活用。Resque gemをつかっている。管理画面がいい。バッチ処理も簡単。
- ClockWorkStudio非同期実行のgem、rescue。管理画面が便利らしい #RailsDevCon
- d6rkaiz#RailsDevCon 非同期で扱うためのgemにresque
- ar1#RailsDevCon まとめた処理にactiverecord-importを使っている。
- agilekawabata一括insert gem activerecord-import #RailsDevCon
- sasata299activerecord-import使うとバルクインサートが楽?へー #RailsDevCon
- ClockWorkStudioactiverecord-importでBULK INSERT!! #RailsDevCon
- _shimadaResque Scheduler。毎回script/runnerを叩かなくていい (#railsdevcon live at http://bit.ly/a480k3
- DiscoveryCoachゆーざーが100万人くらいになると「手抜きかな」と思いながら創った部分が必ず「ボトルネック (#railsdevcon live at http://ustre.am/qnNA)
- ikmシビアだ #railsdevcon
- oreradioユーザ数数万程度を想定しているコードは全てNG #RailsDevCon
- n0tshttps://github.com/zdennis/activerecord-import RT @sasata299: activerecord-import使うとバルクインサートが楽?へー #RailsDevCon
- TrinityT「ユーザ数、数万で想定しているコードは全てNG」→バッチで1ユーザあたり1秒かかってたら、一日86400ユーザ分しか処理できない! #RailsDevCon
- d6rkaiz#RailsDevCon ユーザ数数万程度のコードは全てNG
そういえば Rails3 から route が Rack に載ったので,sinatra アプリである Resque の管理画面も一緒に動かせるようになりましたね。
page 67-72
- ar1#RailsDevCon GAEの設計の意味がわかってくる(w
- ikm巨大SNSのユーザ数で自分の技術力が向上 #railsdevcon
- DiscoveryCoach巨大SNSから流れてくるユーザ数はエンジニアの甘えを許さない。 (#railsdevcon live at http://ustre.am/qnNA)
- junyaURL設計図って rake routes で間に合う気もする #RailsDevCon
- _shimada開発中はER図とURL設計書だけで進める (#railsdevcon live at http://bit.ly/a480k3
- ysakaki迷ったらRailsっぽく書く。素晴らしい。 #RailsDevCon
- ar1#RailsDevCon PDCAを早くするためドキュメントを削減。図の多用。Railsっぽいコードから外れないようなコード。
- hs9587#RailsDevCon 「とあるソーシャルアプリの開発運用」 迷う時間を最小限にする: Railsぽいかどうかを考える
- ikmRESTfulっていう前提はあるかなぁ RT @junya: URL設計図って rake routes で間に合う気もする #RailsDevCon
- nogソーシャルゲームもこういう観点で見ると面白そうだよなー (#railsdevcon live at http://ustre.am/qnNA)
- tkawa「正しくwebアプリを作る」それを「正しく」って言い切るのもなぁw (#railsdevcon live at http://ustre.am/qnNA)
- johnsmith0707ペアプロで迷う時間を最小限に #RailsDevCon
- DiscoveryCoach短納期に対応するひとつの方法。迷う時間を少なくする。=ペアプロ。そしてRailsっぽいかどうかを思考の指針できるように常に考える。 (#railsdevcon live at http://ustre.am/qnNA)
- shinodoggドキュメンテーションなくても、RailsっぽいアプリならER図見りゃわかるし、RestっぽいインタフェースならURL見れば分かる。迷ったらRailsっぽくなってるかどうか。くぅー。シビれる。。 #railsdevcon
負荷対策をすればするほど GAE に近づいていっている気がしたので,なるほどあの制限は正しいなと思えるようになりました。 一度しっかり RDBMS で戦うと NoSQL や GAE を使うための意識改革が出来るんじゃないかと思います。
URL 設計書は確かに rake routes と中身は同じなんですが,チーム全員で URL を考えるときに 200 行を超える routes.rb だけだと見通しが悪いので,はじめは Excel でやっています。 設計が終わって一通り generate し終えたら routes.rb だけ管理で十分ですねー。
page 73-78
- ar1#RailsDevCon Plan (常にかんがえる) Check (かってにデータがあつまってくる) 速度をあげる。
ちなみに,天井からぶら下がってるこのモニタのシステムは『グリゴリ』と言います。 旧約聖書偽典『エノク書』 (みんな大好きイーノックさん) に出る堕天使の一団。「見張る者」という意味です。
「ユーザーの動きに応じて、PDCAサイクルを異様なほどの超高速で回すのが、ソーシャルゲームの運営だ」 といった話も紹介しようと思ったんですが残り時間が少なかったのでカット。
page 79-83
- ar1#RailsDevCon ログの集約、収集にscribeを使ってる!
- ikmscribe+messagepack #railsdevcon
- ar1#RailsDevCon scribeにつっこむときにmessage-packで圧縮考えてる。
- hs9587#RailsDevCon 「とあるソーシャルアプリの開発運用」 scribe 分散した多数のサーバのログの集約が大変
- d6rkaiz#RailsDevCon 一日3gbのlogを見るために scribe -> messagepack にするか検討中?
- sasata299複数台に分かれたログの収集はscribe使ってる http://d.hatena.ne.jp/perezvon/20100110/1263120529 #RailsDevCon
- masaki925ログ転送ライブラリ scribe; scribeサーバに送っておけばscribe 間で転送・エラーハンドリングしてくれる #RailsDevCon
いじょー
長々と失礼しました。また来年も発表できるよう頑張ります!!