Edited at

Treasure Dataで働くRuby

More than 3 years have passed since last update.

中村です。最近はセキュリティ方面のお世話だけでコードの貢献はしていませんが、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化されているものが多いので、興味があればぜひコードを覗いてみてください。