Twitterが、Ruby on RailsからJavaVMへ移行する理由

2011年8月2日

オライリーが主催するイベント「Open Source Convention 2011」が7月25日から米国ポートランドで開催されました。

その中で、TwitterがなぜRuby on RailsベースのシステムをJavaVMベースへ移行しようとしているのかを解説したセッション「Twitter: From Ruby on Rails to the JVM」が行われ、ビデオが公開されています。

13分程度の短いセッションのポイントをまとめて紹介します。

世界最大のRuby on RailsによるWebサイトをJavaVMへ移行

Twitterのアプリケーションサービスグループ、Raffi Krikorian氏

fig

Twitterは世界中からのツイートをリアルタイムで扱っている。リアルタイム処理が、ツイッターにおけるもっとも難しい処理だ。

Twitterは、おそらく世界最大のRuby on RailによるWebサイトだ。いまも大部分のトラフィックをRubyで処理している。

しかし2008年から、その処理をJavaVMへ移行しつつある。私たちのチームはいま、主なTwitterのアプリケーションを分解し、JavaVM上に作り直している。

その理由をこれから紹介しよう。

私たちは秒間数千もの大量の同時コネクションを処理している。これまで私たちはこの大量のワークロードのためにRubyで多くのことをしてきた、MRI(Matz' Ruby Implementation)にパッチを当て、ガベージコレクションを改善するなど。

Rubyはこうした処理をこなしてきたが、私たちはもっと大きなコミュニティ、デベロッパ、よりよいツールなどによって、いま向かっている方向へさらに大きく前進する機会を見つけようとしている。それがJavaVMだ。

JavaVMを採用する理由の1つはフレキシビリティだ。Twitterでは、ストレージレイヤにはScalaを使っているし、それ以外にJavaも使っていて、最近ではClojureも使い始めた。JavaVMはこれらのデプロイもログ解析もシンプルに実現してくれる。

fig

JavaVMへ移行する最大の理由は、リアルコンカレンシーモデルだ。

これまでリクエストに対してワーカーが走るワーカーモデルを採用してきた。しかしこれは思ったより性能がよくない。

JavaVMでジェネリックなRPCモデルを実現するFinagle(発音は“ファネーグル”のようだ)をオープンソースで開発した。非同期なイベント処理をJavaVM上の言語でエレガントに書ける。Rubyでやっていたのと同じことを、さらに効率的に実現できる。

私たちは、ユーザーからリクエストが来たら、数百台のサーバにそれを投げて、そこからくる大量の返事をまとめあげる、という作業を50ミリ秒以内に実現する、ということをしたかった。

Rubyでは1つ1つにたいして順に処理をするようなコードになっていた。

私たちのやりたいことは、一発ですべてのサーバへリクエストを投げ、それをまとめるような処理である。JavaVMは基本的に、このようなRubyではできないことを実現できた。

また大量のメモリやCPUを載せたマシンではJavaVMのほうがネットワークI/Oなどでずっと効率よく動作した。それによりサーバ密度を高めることができるようになり、コスト削減を実現できる。

TwitterはRuby on Railsのスケーラビリティも証明してきた

TwitterがRuby on RailsからJavaVMへ移行しようとしている背景には、言語の柔軟性や非同期処理、JavaVMの性能などがあると説明されています。

これらの説明からJavaVMへ移行する理由が伝わってきますが、一方でTwitterはこれだけのスケーライビリティや性能が要求される段階までRuby on Railsで対応できることを証明してきたともいえます。世の中のほとんどのアプリケーションでは、Ruby on Railsで十分に実現できるのだといえるのでしょう。

このセッションではJavaVM上のJRubyには触れていませんが、彼らがJRubyについてどう考えているのかも気になるところです。

この記事ではビデオの内容を基に内容をまとめたのですが、一部早口の英語でうまく聞き取れなかった箇所もあります。もしも勘違いなどが含まれていたら、ぜひコメントなどで教えてください。

追記:Krikorian氏が自身のブログへのエントリ「Ruby and the MRI to lots-of-stuff and the JVM」で、このセッションの補足として、なぜJRubyに言及していないのか、そして今後もRubyに投資し続けていくことなどを書いています。

関連記事

あわせて読みたい

Java プログラミング言語 Ruby Twitter




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本