はじめに
RubyKaigi2日目に参加してきました。
気になるセッションもチラホラあり期待していました
ただ、盛大に寝坊しましたorz
という訳で、メモ
Data Analytics Service Company and Its Ruby Usage
ミドルウェア * データ処理をする上でスループットが重要 * 一度書いたものはそのまま運用されるので、固めにつくることが多い
集めてくるところとか、加工整形した結果などは固くつくる必要はない (書捨ても多いから)
要素
- データを集めて保存
- 総うさするコンソr−るapi
- データしゅべつ、型だとかのスキーマ管理
- 計算処理(batch,query)-> Java
- キューイングやスケジュール処理
- データを格納&エクスポート
キューとワーカーの話
perfedtsched(スケジューラー) →SPOFのないcrontabと思えばよい →1回も実行されないよりも2回実行されたほうがよい(別途担保が必要だが・・・)
リトライ可能かは、状況やエラー内容による 実行時間 jobの実行内容が重いものやら軽いものまで
perfectqueue(キュー)
- 優先どの高いキューは高いものは素早く処理
- graceful restart(字工事のjobは分離して実行)
- RDBMSのようなinsertで実現
- RDS(MySQL)を使ってる
パフォーマンスコントロールとかでジョブ実行を制御している 安全側に倒している(顧客情報のisolationとか)
何故Rubyを使っているか
- ワーカーのコードが複雑だけど重要
- テストが一番重要なので、書きやすいのでrspecを採用
- テストコードの書きやすさが重要だった(可読性とか、オーバーライドとか)
- 新しい機能とか新しいライブラリは使っていく
スケジューラーとキュー気になる
Ruby for one day game programming camp for beginners
京大マイコンクラブで事例
Windowsの環境が殆どなので以下を実行するようにした
- Ruby1.8.4(starter kit)
- MyGame and Ruby/SDL(ゲーム用)
- sakura editor
インストールして終わりぐらいの単純なものがよい
- 講義みたいなことはしない
- 1対1のペアプロ
- 楽しいRubyが教本
プログラム未経験の参加者の8割が大体できる →やる気に繋がる →自信によって自分が勉強する
考察してみる
- 教えかたが勉強できる
- つくるものが決まっている
- 締め切り
- 教えるものが少ない(基本的な制御構造)
Ruby and PostgreSQL, a love story
plmruby zombodb
- producael language handler(他の言語のサポート)
- indexがすぐれてる(通常indexだけなく、elastic searchとかのラッパーにもできる)
- foreginData(他にデータが投げられる, csvなりなんなりにdけいる)
postgresql fdl
- callbackルーチンで駆動するライフサイクル(コールバックチェーンかな)
- rubyがサポートする
holycorn
Rhebok, High Performance Rack Handler
Rhebok
- rack handler
- unicorn比較で1.5x
- gazelle(perlnのpluck)の置き換え
使いドコロ
- 高いトラフィックのあるところ
- 最適化が進んでるところに最適(SNS, gameとか)
- rackがネックになったとき
使えないところ
- websocket
- streaming
- リバースプロキシかまさないといけない
性能
- http1.1(keepaliveは未サポート)
- unix socket
- ホットデプロイ可能
- rackアプリの起動でOK
Rack
- 仕様(webserverとF/WをつなぐI/F)
- middleware
- Rack::Handlerの名前空間の下に同時実装をすれば自動認識できる
パフォーマンス上げる
- マルチプロセス
- マルチスレッド
- IO多重化
timeoutの実現
- IO.selectを使用する
- pollを使うことで実現
parser
- pico_http_parserに渡すように変更
tcp
- tco_nodelayをオフにする
- バッファリング遅延対策
- tcpのやり取りが増えるのでフラグメンテーションいっぱい
- 書き込み回数を1回にしておく
Pragmatic Testing of Ruby Core
テストを実行してみる テストが落ちた報告をするといい
Makefleにテストがなく、common.mkにある btest-ruby => bootstraptest sample/test.rbが通った後に実行(runner.rb経由で実行) make test-allなどは、標準ライブラリのテスト
make test-all TESTS=”-j4”すると並列で動く
test/ruby : 組み込み test/logger : 添付ライブラリ test/-ext- : C拡張
envutil.rb <- ヤバイ leakchecker.rb
rubyspecは現行の振る舞いだけしか書いてないので、 言語仕様ではない(by Matz)