ruby を利用した大規模ウェブサービスの開発・運用
DESCRIPTION
クックパッドでの、Ruby を利用した大規模ウェブサービスの開発・運用方法の説明TRANSCRIPT
Ruby を利用した大規模ウェブサービスの
開発・運用Large-scale web service
and operations with Ruby
cookpadid:secondlife / @hotchpotch
2011年7月19日火曜日
提供
2011年7月19日火曜日
私とRuby会議
I andRubyKaigi
2011年7月19日火曜日
日本Rubyカンファレンス2006
2011年7月19日火曜日
日本Rubyカンファレンス2006
Perl の会社で使われるRuby の利用法とは!?
2011年7月19日火曜日
RubyKaigi 2007
2011年7月19日火曜日
RubyKaigi 2007
モテるRuby!
2011年7月19日火曜日
RubyKaigi 2011
Ruby を利用した大規模ウェブサービスの
開発・運用Large-scale web service
and operations with Ruby
2011年7月19日火曜日
RubyKaigi 2011
Ruby を利用した大規模ウェブサービスの
開発・運用Large-scale web service
and operations with Ruby
2011年7月19日火曜日
RubyKaigi 2011
Ruby を利用した大規模ウェブサービスの
開発・運用Large-scale web service
and operations with Ruby
イマココ!now
2011年7月19日火曜日
RubyKaigi 2011
Ruby を利用した大規模ウェブサービスの
開発・運用Large-scale web service
and operations with Ruby
イマココ!now
2011年7月19日火曜日
•id:secondlife•@hotchpotch•舘野祐一 / Yuichi Tateno•Shibuya.js 発起人•Asakusa.rb 所属•Ruby, Vim, Git
2011年7月19日火曜日
2011年7月19日火曜日
ミッションMission
2011年7月19日火曜日
2011年7月19日火曜日
毎日の料理を楽しみにすることで
2011年7月19日火曜日
毎日の料理を楽しみにすることで心からの笑顔を増やす
2011年7月19日火曜日
毎日の料理を楽しみにすることで心からの笑顔を増やす
Bringing smiles to everyone by making every day cooking more
enjoyable.
2011年7月19日火曜日
サービス紹介What is
COOKPAD?
2011年7月19日火曜日
COOKPAD
2011年7月19日火曜日
COOKPAD12,300,000 UU (pc only)
1+ million Recipes
Used by 1 in 2 women in their 30s
2011年7月19日火曜日
MOBAREPIモバれぴ
2011年7月19日火曜日
MOBAREPIモバれぴ
フィーチャーフォンfor mobile
2011年7月19日火曜日
Smartphone App
iPhone Android2011年7月19日火曜日
Smartphone App
iPhone Android
(iPhone App only)
2.5+ Million Downloads
2011年7月19日火曜日
TABEMIRUたべみる
2011年7月19日火曜日
Technology
2011年7月19日火曜日
Ruby 1.8.7
Rails 2.32011年7月19日火曜日
EC2
Architecture
lvs
proxy
lvs
app
task
EC2/EMR
Akamailvs
db
log
cache
S3
Image(EC2)
searcher
AWS
2011年7月19日火曜日
定石な構成Architecture based on best practices
http://www.flickr.com/photos/chadmiller/7270219/2011年7月19日火曜日
EC2
App / DB
lvs
proxy
lvs
task
EC2/EMR
Akamailvs
log
cache
S3
Image(EC2)
searcher
AWS
app
db2011年7月19日火曜日
EC2
App / DB
lvs
proxy
lvs
task
EC2/EMR
Akamailvs
log
cache
S3
Image(EC2)
searcher
AWS
app
db
•Ruby 1.8.7•Rails 2.3•haml / sass / jQuery•Passenger 2.2•MySQL 5.0•memcached
2011年7月19日火曜日
EC2lvs
proxy
lvs
task
EC2/EMR
Akamailvs
log
S3
Image(EC2)
searcher
AWS
app
db
cache
Cache
2011年7月19日火曜日
Cache
2.1.52011年7月19日火曜日
Cache
2.1.5About
30ms2011年7月19日火曜日
EC2
Image
lvs
proxy
lvs
task
EC2/EMR
Akamailvs
log
S3
searcher
AWS
app
db
cacheImage(EC2)
2011年7月19日火曜日
http://www.flickr.com/photos/h4ck/3031427985/2011年7月19日火曜日
Image Server
Tofuhttp://www.flickr.com/photos/h4ck/3031427985/
2011年7月19日火曜日
http://www.flickr.com/photos/h4ck/3031427985/
Tofu•Upload Server on EC2•Rails 3 -> S3•Delivery Server on EC2•Apache 2.2•mod_tofu (image magick)•+ CDN (akamai)
2011年7月19日火曜日
http://www.flickr.com/photos/h4ck/3031427985/
Tofu
http://d3921.image.cookpad.com/recipes/1237075/100x141c/
0b9c3ad1cba65869058e17cf78988bcb.jpg
2011年7月19日火曜日
http://www.flickr.com/photos/h4ck/3031427985/
Tofu
http://d3921.image.cookpad.com/recipes/1237075/100x141c/
0b9c3ad1cba65869058e17cf78988bcb.jpg
2011年7月19日火曜日
http://www.flickr.com/photos/h4ck/3031427985/
‘100x100c40_198_137_104_300’
‘100’
‘100x100’
‘100x100c’
2011年7月19日火曜日
EC2
Searcher
lvs
proxy
lvs
task
EC2/EMR
Akamailvs
log
S3
AWS
app
db
cacheImage(EC2)
searcher
2011年7月19日火曜日
Search
検索2011年7月19日火曜日
2011年7月19日火曜日
MySQL+Tritonn
Solr2011年7月19日火曜日
柔軟な検索Easily customizable
search
2011年7月19日火曜日
•Facet (like group by)•集合を扱う•Boost Search •重みづけ検索•Dynamicfields •動的なフィールド追加
2011年7月19日火曜日
Log Analytics
lvs
proxy
lvs
Akamailvs
AWS
app
db
cacheImage(EC2)
searcher
task
log EC2
S3
EC2/EMR
2011年7月19日火曜日
•TABEMIRU (たべみる)•EC2 + hadoop•Other•Elastic MapReduce (AWS)•Mapper/Reducer•Ruby
Log Analytics
2011年7月19日火曜日
速度speed
2011年7月19日火曜日
速度speed
slow?
2011年7月19日火曜日
速度speedNo!
2011年7月19日火曜日
速度speed
> 200ms2011年7月19日火曜日
定石をきちんとArchitecture based on best practices
http://www.flickr.com/photos/chadmiller/7270219/2011年7月19日火曜日
“GOOD はやらない”“Best のみ集中”
“Good enough” is not good enough.Always focus on what is best
2011年7月19日火曜日
シンプルさを保つKeep It Simple
Stupid
2011年7月19日火曜日
シンプルさを保つ
•本当に必要な機能のみに絞る• Only add absolutely necessary features
•無駄に複雑なことをやらない• Avoid complexity
2011年7月19日火曜日
シンプルさを保つ
•キャッシュにのりやすく• Design for caching
•シンプルなクエリ• Avoid complex SQL queries
2011年7月19日火曜日
あとでやるAsync Loading
2011年7月19日火曜日
非同期処理
2011年7月19日火曜日
非同期処理
2011年7月19日火曜日
非同期処理
2011年7月19日火曜日
非同期処理
2011年7月19日火曜日
速度speednot slow
2011年7月19日火曜日
【PR】
2011年7月19日火曜日
Development
2011年7月19日火曜日
2011年7月19日火曜日
30+Engineers
2011年7月19日火曜日
Rails アプリの多人数開発
Working with Rails within a large team
2011年7月19日火曜日
DevelopmentCycle
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックFeedback
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックFeedback
2011年7月19日火曜日
•rspec 1.x•unit•functional•Integration
Tests
2011年7月19日火曜日
beforeUnit
Functional
Integration
2011年7月19日火曜日
nearUnitFunctional
Integration2011年7月19日火曜日
nearUnitFunctional
Integration2011年7月19日火曜日
nearUnitFunctional
IntegrationJavaScript
2011年7月19日火曜日
nearUnitFunctional
Integration
JavaScript♥
capybara-webkit
2011年7月19日火曜日
nearUnitFunctional
Integration
JavaScript♥
capybara-webkit
2011年7月19日火曜日
nearUnitFunctional
Integration
JavaScript♥
capybara-webkit
2011年7月19日火曜日
30+Engineers
2011年7月19日火曜日
manyspecs
2011年7月19日火曜日
2011年7月19日火曜日
So slow!!
@ryo_katsuma2011年7月19日火曜日
テストをリモート上で実行するRun specs remotely
2011年7月19日火曜日
•Custom in-house library•Designated test servers•Synchronize local source code via rsync•Test results are fetched via ssh
remote spec
$ rake cookpad:spec:remote2011年7月19日火曜日
x4 servers32 parallel processes
2011年7月19日火曜日
Speed test
0
750
1500
2250
3000
1.8.7 REE para.. remote
速度(秒) メモリ(MB)
2011年7月19日火曜日
19.2x50sec
2011年7月19日火曜日
For more infoOedo RubyKaigi 01
http://d.hatena.ne.jp/secondlife/20110410/1302442313
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックFeedback
2011年7月19日火曜日
•Only allow successful CI builds to be deployed
•Send deploy notifications•Always check error logs after deployment
Deploy Rules
2011年7月19日火曜日
Continuous Integration
継続的インテグレーション
2011年7月19日火曜日
2011年7月19日火曜日
2011年7月19日火曜日
CI が導入され変わった開発パターン•CI を通ったコードのみリリース•みんなテストを書く・実行するように•「CIで動かないテスト」≒「将来的に価値がないテスト」の認識•継続することの重要性•新しい技術を導入する=CIで動くテストが書けるを意識 (JavaScript のテストなども...)
How did using a CI change our development flow?
Only release successful CI builds
Test coverage as a requirement
Tests should be written so they can run on a CI
2011年7月19日火曜日
For more infoRubyStudy@Sapporo#18
http://d.hatena.ne.jp/secondlife/20110704/1309759409
2011年7月19日火曜日
•デプロイ時にメッセージを記入•新機能の追加・大きな変更•Skype による通知•エンジニア以外にも変更点のメール
Notifications$ cap production deploy
Add a "deploy message" to every release
(ex: "Added feature x", "Fixed bug z" etc)
Skype notification
Mail sent to developer and support mailing lists
2011年7月19日火曜日
Error monitoring
2011年7月19日火曜日
monitoring
2011年7月19日火曜日
2011年7月19日火曜日
•Exception Log•Rails / JavaScript•例外を0件にするのは難しい•バースト検知するのは簡単
It is nearly impossible to reduce number of exceptions to 0
Looking for spikes in number of exceptions is key
2011年7月19日火曜日
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックfeedback
2011年7月19日火曜日
Extensions
2011年7月19日火曜日
•Rails 拡張•条件指定で有効化•一部ユーザのみ限定公開可能•プロトタイプ開発向き•“Spec を書かなくても良い” ルール•例外発生時 “自動で無効化”
ExtensionsExpands upon Rails functionality
Selective release of new features
(ex: “Show feature X only to users A, B, C)
Used for prototyping
Specs not required
If an exception occurs in an extension, it is turned off automatically
2011年7月19日火曜日
2011年7月19日火曜日
2011年7月19日火曜日
new features
stats for staff2011年7月19日火曜日
2011年7月19日火曜日
もし、機能をリリースしない決断をしたら
How do we handle prototypes we decide not to release?
2011年7月19日火曜日
$ rm app/extensions/foobar_ext
2011年7月19日火曜日
For more info
テキスト
http://techlife.cookpad.com/2011/07/15/extension-framework/
2011年7月19日火曜日
DevelopmentCycle
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックfeedback
2011年7月19日火曜日
開発Dev
デプロイDeploy
フィードバックfeedback
2011年7月19日火曜日
提供
2011年7月19日火曜日
ご清聴ありがとうございました
Thank You
2011年7月19日火曜日
クックパッドでは一緒に働くエンジニアを募集しています
あなたの技術で、たくさんの笑顔をふやしませんか?
2011年7月19日火曜日