ruby を利用した大規模ウェブサービスの開発・運用

Post on 27-May-2015

24.047 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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/

‘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日火曜日

top related