RubyKaigi 2日目[ruby][rubykaigi]

Ruby会議2日目に行ってきました

分散並列処理フレームワークfairy

  • スピーカー
    • 増田 創さん
  • What's fairy?
    • 分散処理を簡単にするミドルウェア
    • ネットワーク環境を意識しない
    • 複数サーバーに散らばったデータを高速処理
    • Ruby実装
    • 汎用性が高いMap/Reduce以上の柔軟にプログラムが書ける
    • Rubyならではの生産性の高さ
  • なぜ分散処理?
    • 大規模なデータを効率的に処理、分析できる企業が勝ち組となる
  • MapReduceとは?
    • オリジナルはグーグル
    • Map
      • 入力データ->キーと値に分ける
    • Reduce
      • 同じキーで値をまとめたり?
    • 上記を複数サーバで
  • fairy同様な他の実装
  • 現状ステータス
    • 楽天社内ではα版
    • 本番投入はしてない
    • バッチ処理に試験投入
    • パフォーマンスに課題
  • fairy詳細
    • Filter I/F
      • inputでデータを読み出し
      • filterで数珠繋ぎ
    • fairyのノードホストのローカルディスクに分散配置.vfファイル
  • build in filter
    • zip
    • shuffle
    • join
      • SQLのjoin風
    • ROMA(楽天が作っているkey-value strage)連携機能
  • 生産性
    • 13倍高速化
    • 1ヶ月つくっていたのが2.5日で実装できた
    • サーバ6台
  • パフォーマンス
    • filterが数珠繋ぎなのでそこでコストが高くなっている
    • filterを追加すると想定以上に遅くなっている

分散オブジェクトシステム DeepConnect

  • スピーカー
    • 石塚 圭樹さん
      • Ruby名づけ親
      • Ruby開発のきっかけを作った人
      • irb作者
  • DeepConnectとは
  • DeepConnectってなにしてくれるの?
    • ネットワーク越し、または、別プロセス空間上のオブジェクトに対して、
      • メッセージを送ったりその結果を得ることが出来る
      • drbの親戚
  • DeepConnect server
dc = DeepConnect::start(port)
dc.export("name",obj)
  • DeepConnect client
dc = DeepConnect::start(port)
ds = dc.open_deepspace
obj = deepspace.import("name")
  • 特長
    • メソッドは引数も戻り値も参照渡し
      • 参照渡しであればリモート、ローカルに実態があるかは意識しなくて良い
      • コードの修正が少ない
def basic_seach(&block)
	@map_proc =  BBlock.new
	#inputの実態がどこにあるか意識しない?
	@input.each do |e|
		block.call @map_proc.yield(e)
	end
end
  • Future型
  • 分散GC
    • 参照されているものはGC対象外
    • GCはリファレンスカウント方式
    • 全てRubyで実装
  • ShallowConnectモード
    • DeepConnectは、接続先にたいしてどんなメソッドも呼び出せてしまう
    • CORBA IDL的に指定可能
      • I/F宣言されたメソッドだけを利用可能
  • 実績
    • fairyで採用
    • fairyローカル版->fairy分散版への実装修正は5%くらい
      • ローカルで動いていようがネットワーク分散環境で動いていようが関係ない!
  • 注意事項
    • あまりにも分散を無意識に出来てしまう
      • 構文上ローカルで動いているものと同じでもネットワークコストを意識しないといけない
    • Arrayも参照渡し
    • パフォーマンス
  • 予定
    • 使ってみたい方は石塚さんにメールを
    • fairyがopensource化されるころには。。。

実戦投入Rails - RubyKaigiEdition

  • スピーカー
  • 実践投入Railsの背景
    • WEB+DBでは大人の事情で言えないことが、、、
      • 具体的に携わっている業務システムの事柄
  • 上記記事のクライアント
    • 業界最大手
    • 人事管理システム
      • 雇用、退職、部署間、給与管理
      • 10万人以上雇用している
    • 既存の運用中のシステムあり
      • 大炎上
      • お客さんとの関係が最悪
      • 会社ごとバックれる
      • 書置きのこして去る
      • 億単位の赤字
      • 1 column追加するのに1-2人月
    • Railsを提案
      • 実績はあるのか?
  • 既存システムとRailsの共存
    • 既存システムを無理やりレールに乗せる
  • ナチュラルキー
    • set_primary_key
  • 複合キー
    • composit primary key?
  • セッション
    • 自作
  • リリース後のバグも数回程度
    • 昨日資料を作っているときに丁度
    • 昨日資料を作っているときに丁度
  • 10万人userのシステムをRalisで作れた!
    • 初期の開発効率よりもその後の運用にRaisは適している

Railsサイト安定運用の心構え 8つのサービスから学ぶ

  • スピーカー
  • Rails製サイト
    • 演劇ライフ
    • コマーシャライザー
    • 旅箱
    • rectr
    • atnd
  • Rails製サイト合算のスペック
    • 月間6,000万PV
    • データ4TB
    • Railsのバージョンばらばら
    • mongrel,thin,passenger
      • 傾向としてはmongrel->passengerへ
  • passengerを使う予定
    • 運用が楽
    • パフォーマンスが良い
      • thinやmongrelよりも2割り位パフォーマンスが良い
  • Rubyのver
    • 基本的には1.8.6
    • Rubyのenterprise editoin
  • Platform
    • Xen
      • ひとつの物理マシンにphp/ruby/perlのサイトのappを共存
      • perl/phpはcpuを良く使う
      • RoRはmemoryを良く使う
      • 16GBmemory
    • HW
    • VM
      • 1GB ram
      • 10GB disk
      • 8CPU
    • 13VM/Hard!!!!
  • 1VMあたりmonrelを動かせるか
    • 10mongrel/VM(1GB)
    • 24mongrel/VM(2GB)
  • DBチューニングTips
    • 経験
      • リリース時にDBチューニングがされてない
      • ARつかうので意識が回らない
      • app側のコーディングに頭がいってしまう
    • 実践

my.cnf

[mysqld]
log-slow-queries
long_query_time=1
    • スロークエリを見て
      • サブクエリ分割
      • migrationでインデックス追加
    • EXPLAIN
  • LogローテーションTips
    • production.logが肥大化
    • logrotate.dを使う
      • copytruncate
  • Mongrel Restart
    • 定期的にmongrelを再起動
    • Xenの場合SWAPを使わないように気をつける
      • 同一VMも遅くなる
    • cron
      • 12時間に一回再起動
    • Logrotate.d
    • monit
      • swapが起きそうだったら再起動
  • 宣伝