中村です。最近はセキュリティ方面のお世話だけでコードの貢献はしていませんが、CRuby、JRubyコミッタもやっています。
Treasure Dataを支えている各種システム、バックエンドのコアはJava中心、追加でScala/C/Pythonですが、多くの場所でRubyも使われています。12/25にRuby/2.2がリリースされたのに合わせて、Rubyの使われ方をご紹介しましょう。(本記事は12/26に執筆しています)
Client side
まずはTreasure Dataのシステム側でなく、クライアント側で動くRubyです。
Treasure Agent (Fluentd) package (td-agent)
Treasure Agentは、OSSであるRuby製ログ収集インフラFluentd: http://www.fluentd.org/の各種OS用パッケージ版です。Treasure Dataにログを入れるのに必要なプラグインが同梱されていますが、インストールすると出てくるのは環境設定済みfluentdなので、パッケージ版Fluentdとして使われています。動作環境はMacOS X 10.8, 10.9、RHEL/CentOS 5, 6、Ubuntu 10.04, 12.04 (, 14.04) 。
またtd-agentはサーバ側でも動いていて、JavaScript、iOS、Android、Unityの各SDKが投げてくるイベント群を受け付けています。
パッケージとしてはRuby 1.9.3を同梱していますが、そろそろ上げるタイミングですね。
(追記: 上記はtd-agent 1の話で、すでにtd-agent 2がリリースされています。すいません。そちらはRuby 2.1.3が同梱されています。詳しくはこちら: Treasure Agent(td-agent)の1と2の今後 移行手順もあります)
TD Toolbelt (td, td-client)
Treasure Dataの各種機能をコマンドラインから利用するためのツールです。一部、ファイルアップロードの前処理性能のため、Javaを使っているところもありますが、そこ以外はすべてRubyで書かれています。動作環境はMac OS X 10.8.5以後、Windows 64bit、RubyGemsの動く各種Linux。(つまり全部OSSです)
Mac OS X版とWindows版はこちらもRuby 1.9.3を同梱しているので、そろそろ上げるタイミングです。
Server side
続いてサーバ側。Treasure Data内部で使われるRubyです。
Console & API
ConsoleとAPIは共通(デプロイ先は別)のRailsアプリです。共通コンポーネントがHeroku、EC2、IDCFクラウド環境で動いています。APIは特にリクエスト数、処理負荷とも大きいので、非正規化して破壊的チューニング。。。よりは、プロセス/ノードを並べてスケールさせるRubyおよびRailsらしい作りになっています。
Task Scheduler、Coordinator
ConsoleとAPI、またはスケジューラが登録したタスクを管理しているのもRubyです。タスクにはHadoopジョブ、Prestoサーバ連携、外部データエクスポート、Consoleへのエコーバックなどがあり、それらをスケジュール、つなぎ、リトライなどのフロー制御を行います。コア部分はOSSとして公開されています。
- PerfectQueue - at-least-once、ポリシーベースのフェアな優先度付きキュー、ワークフロー制御サービス
- PerfectSched - at-least-onceのスケジューラサービス
その他
インフラ構築、運用もRuby(chef)で動いています。これについては別途専任のプロがいるので、記事を書いてくれるかもしれません。その他汎用的に利用できるコンポーネントはOSS化の流れができていて、今後新プロダクトで、JRubyも採用するかもしれません。
まとめ
Treasure Dataを支えているRubyコンポーネント群を紹介しました。OSS化されているものが多いので、興味があればぜひコードを覗いてみてください。