RubyWorld Conference 2011

RubyWorld Conference 2011に行ってきました。

RubyWorld Conference 2018


会場には、無線LANのアクセスポイントも用意されてたみたいです。(詳細は、公式の告知ページをご確認ください。)
あと、WiMAXも使えてました。電源も休憩ポイントに用意されてましたね。


以下、聞いたセッションのまとめを、いくつか書いておきます。

また、間違いなどありましたら、ご指摘いただければと。

目次

  • 「日本のRuby PaaS」立ち上げまでの道のり」
  • Ruby on RailsのPaaS「RCloud」ができるまで
  • 1.9.3 リリース、そしてRubyエンタープライズ分野への適用の可能性について
  • Advancing Net::HTTP
  • Cloud Foundry: Why Ruby, and will it last?
  • Heroku – 多言語化するアプリケーションの為のプラットフォームの紹介
  • ちゅうごく地域Rubyビジネスフォーラム」の取り組み 〜地域ITベンダのRubyビジネスの支援について〜
  • Rubyエコシステムを活用したアジャイルな受託開発の成功事例」

「日本のRuby PaaS」立ち上げまでの道のり」

Webの記事:http://www.atmarkit.co.jp/news/201109/05/mogok.html

概要については、上記記事を参照してください。

ここでは、もう少し技術詳細に関してメモしておきたいと思います。


まず、Engine Yard社 (EY社)の「herokuのようなマルチテナントはクラウドに向いていない」という話に触れ、クラウドのあり方について論じておられました。

IaaSだってマルチテナントには変わりない、ということで、「大事なのはどのレイヤでどんな技術を使い、サーバを論理分割するか、を検討することだ」という方針を述べられていました。


以下、MOGOKで採用された方式について、各レイヤーごとにまとめます。

OSレイヤー

HV方式(Xen, KVMなど)や、Linuxコンテナ方式(OpenVZ, lxc)、chroot 方式を比較して、
リソース消費量が一番少ない、chroot方式を選択。

カーネルインスタンスを共有するため、リソース消費量が少ない。
※ (個人的感想)けど、プロセスごとにリソース消費量を監視したり、作り込みが大変そう。あと、アプリのセキュリティとか、他プロセスを保護する機構とか。
  その辺って、Linux でがんばってるのかな。
  あと、スケールアウトってどうするんだろう。

なお、chroot + fuse あたりを組み合わせて、/proc を見えないようにする予定(開発中)。


Git を使ってデプロイ

詳しくは聞き取れてないので、省略します。

AP サーバには、Thinを採用。

Thinは、Ruby番の軽量サーバのこと。
Nginx + Passenger などもあるが、MOGOK では、以下の理由によりThinを使う。

OSレイヤーでchroot 方式をとっている。
なので、サーバリソースを制御するために、監視プロセスとWebプロセスを1:1で対応させるというアーキテクチャをとっている。

Nginx では、この方式が使えない。

RDBMySQL(5.5)

詳しい採用理由はメモしきれませんでした。
が、ユーザが多いとか、いろいろ理由が挙げられていました。

KVSとかも、今後サポート予定だそうです。

ちなみに、phpcon 2011 のLT で、IIJ GIO のHDD IO の性能がよかったとかいう情報がありましたね。

参考:http://sapp.xii.jp/iaas/

※ 訂正:IIJ GMOIIJ GIO の間違いです。申し訳ありません。ご指摘ありがとうございました。

Ruby Stack
  • Ruby (1.8.7, 1.9.2)
  • Rails/Gems は、Bundler で任意のGemをインストール可能


あとは、IaaS にIIJ GIO(日本のデータセンタ)を使っているので、海外ベンダーのIaaSに比べて、レイテンシーが低いという強みを主張されてました。

Ruby on RailsのPaaS「RCloud」ができるまで

Ruby + CentOS or Solarisバッドノウハウの発表ですね。

導入として、(意訳すると)Rails は、RADツールとして優秀で、ECサイトのアプリがJavaより作りやすかった。

あくまで基盤を運用してるときに直面した課題と、それをどう乗り越えたのかの発表。

Rails のチューニング

※ 個人的感想:まずは、Rails のプロファイルの取り方を説明してほしかった。「計測せよ」は定石。案外、Rubyってその辺がまだ発展途上な気がしてます。

  • ページ表示に時間がかかる
    • DBボトルネック
    • find_by_sql
    • 高いクロックのサーバを贅沢に使う(APサーバ、だったかな)
503 エラーが頻発

原因は、mongrel のプロセス(?)が、200 プロセスも立ち上がっていて、スワップが大量に発生していたから。
サーバのメモリには、4GB 積んでた。

CentOS + REE 186 から、Solaris +Sun のサーバに乗り換えた。
mongrel のプロセス数の上限を 7にした。

そのほか
  • アプリはメモリーリークが起こることを前提に運用せよ。
    • ソフトウェア若化は、運用では大事。プロセスを定期的に再起動するとか。
  • アプリを監視する方式も、HTTP HEADではだめで、ちゃんとGETで取って、レスポンスタイムも監視する。
    • レスポンスタイムを、SLAの一つとして定義しておくって話ですね。
  • Radiant CMS は、extention ごとに、dbのmigrate, update が必要。だから、管理が大変。
    • Rails アプリを作る際のバットノウハウになりそう

1.9.3 リリース、そしてRubyエンタープライズ分野への適用の可能性について

  • better GC

Lazy Sweep GCが実装されたそうです。

詳細は、以下の記事を参照してください。

http://www.infoq.com/jp/news/2011/08/ruby193-gc

  • better GVL (Gloval VM Lock)

fairness issue の問題。

最近の、メニーコアなCPUでは、ruby マルチスレッドの実行の際に、CPU時間の配分が不平等になることがある。
原因は、GVL の仕組みと、最近のIntel CPUの相性が悪いからだそうです。

詳細は、以下のスライドで説明されてます。

http://www.slideshare.net/kosaki55tea/ruby-gvlimprovement-8617719

  • Power Efficiency

昨今のデータセンターや、HPCでは、省電力が重要。なので、短いsleep, timer発火させてるアプリは、敬遠される。

Rubyではマルチスレッド用に、タイマースレッドがある(コンテクストスイッチをやるため、だったと思う)。
それが、PowerTOP に邪悪なアプリ認定をされてしまうので、それを改善したそうです。

そのほか、いろいろ細かい不具合が修正されているそうです。タイミング依存のバグとか、レビューでしか見つけられないバグが多い。


また、Rubyのコミッターは、Linux コミッターと違い、Rubyのコードの広い範囲に対して、知見を持っているんだとか。

最後に、Rubyのtrunkを試してくれる人柱の人が増えると、コミュニティ的にいろいろありがたいそうです。
Rubyコミュニティは慢性的な人不足だそうで。

いっぽう、Rubyのコミュニティってすごい人がおおいから、コミュニティに参加するのもハードル高そうですよねぇ。と勝手に思ってしまうのです。

Advancing Net::HTTP

Rubyで nonblocikng io api がほしいという話です。

あと、Net2::HTTP という、ノンブロッキングなHTTPライブラリが欲しいとも。

リアクターパターンの説明をされてたんですが、すみません、あんまり聞き取れませんでした。

イベント駆動なプログラミングモデルって理解でいいのかな。

node.js って単語も出てたし。

Cloud Foundry: Why Ruby, and will it last?

資料は以下を参照。

発表資料: http://j.mp/rubyworld2011


CloudFoundry には、ローカル環境用のMicro Cloud Foundryというものもあり、ロードバランサなどの機能がないけれど、基本的に同じ構成なんだとか。
試してみたい人は、がんばってダウンロードしてみてください。

会場では、Micro Cloud Foundry入りの、Original USB Memory が数個ほど配布されてたみたいです。



Cloud Foundryは、Rubyを使って実装されてるみたいで、EventMachineやFiber などを使ったら、パフォーマンスも十分なものが作れたって話だったと思います。

それに、Chefとか優れたデプロイメントツールもそろってる。

あと、SPoFの回避・ステートレスってのが、スケールアウトには大事だよねぇと、分散システムの基本もおっしゃってます。

そんな中、ACIDトランザクションをやるなら、どうしたらいい? っていう質問が出てました。(というか、しました。ちょっと場違いだったですね。結果整合性って単語が出てたので、そこんとこ、ちょっと気になりました。)

まず、Cloud Foundryでは、MySQLとかが使えるので、それを使う必要がある。

また、ACIDトランザクションが必要であるとともに、パフォーマンスが求められるなら、それはソフトウェアで解決するべき問題ではない。

やっぱり良いハードウェアを買う必要があって、Fusion IO社のソリューションだったり、SSDだったりを使うほうがいいんじゃない、っていうことをおっしゃってたと思う。

Heroku – 多言語化するアプリケーションの為のプラットフォームの紹介

  • 「適切な道具を選べ」

昔は、道具(プログラミング言語フレームワーク、ツール)の使い方を学ぶのに時間がかかった。

でも、今は、screencast など各種チュートリアルや学習環境が整備されているので、学習にかかる時間が短縮された。

その結果、Polyglot Platform が現実的になってきた。



また、「適切な道具を選べ」という話は、言語だけでなく、PaaSにもいえる話だそうです。

ECサイトは、heroku、トランザクションが必要な処理は、Salesforce と組み合わせて使う事例も紹介されていました。


関連記事:http://blog.heroku.com/archives/2011/8/3/polyglot_platform/


併せて、私がheroku (Rails) に触ったときの記事も読んでもらえたら嬉しいです。

ちゅうごく地域Rubyビジネスフォーラム」の取り組み 〜地域ITベンダのRubyビジネスの支援について〜

Rubyでネイティブモバイルアプリを作成」という記事で紹介されてる、「Rhodes」というスマートフォン向けフレームワークのデモがあった。

Rhodes[1]Rubyでネイティブモバイルアプリを作成 | 日経 xTECH(クロステック)

ただ、PaaS って感じでなく、単にスマートフォンアプリのサーバ側の開発に関して、技術支援しますよ〜っていうニュアンスを感じました。

Rubyエコシステムを活用したアジャイルな受託開発の成功事例

当日の発表資料:http://htn.to/9N7cJB

Ruby コミュニティに積極的に参加して、情報交換とかしていけば、きっと今までよりもいいシステム開発ができるようになる、というメッセージのお話でした。

とりあえず、Cucumberに触ってみたくなりました。あと、RSpecも触ったことないんで、ちょっと触っておきたいなぁ。