RailsとCで広告システムを作って起業した話

24
© 2011 Scaleout Inc. All right reserved. © 2011 Scaleout Inc. All right reserved. Rails C で広告システ ムを作って起業した話 ~大江戸 Ruby 会議 01

Transcript of RailsとCで広告システムを作って起業した話

Page 1: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

Railsと Cで広告システムを作って起業した話 

~大江戸 Ruby会議 01~

Page 2: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

今日話すること1. Railsと Cで大量配信システムをつくりました。

3. アーキテクチャさえしっかりしてればほとんどの部分は rubyでいけるよ

5. 秘密はあんまりなくやってることは割と普通です

7. メンバー募集中です ([email protected]まで! )

Page 3: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

その前に

Asakusa.rb だいたい第 100回目

誠におめでとうございます。

Page 4: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

弊社について株式会社スケールアウト代表取締役 山崎大輔 (@yamaz)Blog: 最速配信研究会http://d.hatena.ne.jp/yamaz/

• 2006年に門前仲町で起業• 広告配信システム「 ScaleAds」の提供及びWeb大量配信に関するコンサルティング

• 主に億を超えるようなアクセスに対するシステム開発を得意としてます

Page 5: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

ScaleAdsとは

2. カジュアル (=安価 )に数十億アクセス /dayを捌くことを目指して開発された純国産広告配信管理システム

4. PCサーバ 1台あたり 5000万アクセス /day以上な性能

6. 月間数千億アクセスも可

Page 6: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

アーキテクチャ概要

配信サーバ

DeliveryEngine

Logs

広告案件データ (PostgreSQL)

配信管理システム

集計管理システム

C+ruby+swig

Rails

Page 7: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

配信部分

• Apache+独自 DB+Cモジュール

• 複数プロセスが SharedMemoryを介してデータをやりとり

• SharedMemoryの管理はruby +swigで

Page 8: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

配信システム概要図

配信サーバ

DeliveryEngine

Logs

広告案件データ (PostgreSQL)

配信管理システム Rails

Apacheモジュール

Page 9: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

Apache+独自 DB+Cモジュール

配信サーバ

DeliveryEngine

Logs

広告案件データ (PostgreSQL)

配信管理システム Rails

Apacheモジュール

RDB+LLな構成だと 1桁以上速度が落ちるので、ここだけは Cで書かれています。

Page 10: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

配信部分

• 複数プロセスが SharedMemoryを介してデータをやりとり

     広告案件データ (SharedMemory)

ユーザからのアクセス 管理 DB

Page 11: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

SharedMemoryの管理はruby+swigで

管理 DBからDBアップデート用 DSLで記述された rubyスクリプトを作成し、各 ADSVRで実行することにより、Sharedメモリを書き換える

 広告データ(SharedMemory)

管理 DB

Rubyスクリプトを生成+実行

C-API+Swig

Page 12: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

集計部分

• 配信サーバ側で一次処理、集計サーバでマージ集計 (プチmap/reduce)

• 一次集計は apacheのログ形式を工夫することで速度を稼ぐ

• 分散処理な為、基本集計に関しては全部rubyでも間に合ってる

Page 13: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

集計システム概要

配信サーバ

DeliveryEngine

Logs

広告案件データ (PostgreSQL)

集計管理システム Rails

各サーバで一次集計 (Ruby)

Page 14: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

一次集計

配信サーバ

DeliveryEngine

Logs

各サーバで一次集計 (Ruby)

配信サーバ側で一次処理を行い、データを圧縮(数100MB→数 KBに )

また apacheの combineログはパースが遅いので、ログ形式を工夫することで速度を稼ぐ

Page 15: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

マージ集計

広告案件データ   (PostgreSQL)

集計管理システム

各 ADSVRで一次集計されたデータを rubyでマージ集計し、DBに流し込み。

各 ADSVRの一次集計後のデータは数 10Kなため、Rubyでも余裕。

Logs Logs Logs Logs Logs

Page 16: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

管理 DB、 UI部分

• DBスキーマは数個のトランザクションテーブルと大量のマスタデータの構成

• 大量のマスタ管理画面はほぼ全部ActiveScaffoldで構築

Page 17: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

ActiveScaffold++

http://activescaffold.com/

マスタ管理部はほぼ全部これ。関連テーブルの UIもコントローラ部を足すことで勝手に UIを作ってくれる優れもの (ただし Rails3には非対応 )

Page 18: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

ActiveScaffold++

class UserController < ApplicationController active_scaffold :user do |config|  endend

これだけの記述で↓こんなのを作ってくれる

Page 19: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

なぜ ruby及び Railsを選んだか?

会社立ち上げ当時、開発機のOSは FreeBSDで、言語はさておき、よいORMを探していた。

• Catalyst だ!→ CPAN地獄にはまり挫折• PHP だ! → ORMがほぼなかった (当時 )

• Java だ! → PHPと同様• Rails? → インストール一発! AR最高!

ということで Railsになりましたぶっちゃけたまたまですが、人にも異様に恵まれてとてもよい選択だったと思います。

Page 20: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

ご参考: 弊社と rubyistの関係弊社がスタートアップにもかかわらず、いかに人に恵まれているかをご紹介します

今まで手伝ってくれた Rubyistの方々 @shachi @maiha @genki @yugui

今手伝ってくれてる&今後手伝ってくれる Rubyistの方々

@yuumi3 @a_matsuda @ukstudio

Page 21: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

とある人曰く

「なにそのメンバー?国家転覆でも狙ってるの?」

Page 22: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

まとめ1. Railsと Cで大量配信システムを作りました

3. アーキテクチャさえしっかりしてればほとんどの部分は rubyでいけるよ

5. 秘密はあんまりなくやってることは割と普通です

Page 23: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

メンバー募集中!1. 大規模配信、大規模解析に興味ある方2. Ruby、デザパタが大好きな方3. 東京の西側よりも東側の下町文化が好きな方4. 興味ある方は[email protected]まで!

下町で働くのも悪くないですよ

Page 24: RailsとCで広告システムを作って起業した話

  © 2011 Scaleout Inc. All right reserved.© 2011 Scaleout Inc. All right reserved.

ご静聴有り難うございました

Railsと Cで広告システムを作って起業した話 

~大江戸 Ruby会議 01~