RubyKaigi2日目に行ってきた

はじめに


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)