Naniteは、Ezra Zygmuntowicz氏がEngine Yardのクラウドコンピューティング戦略に追加した最新のプロダクトである。これは、Webアプリケーションのバックエンドとして高いスケーラビリティを確保するための"自己集合するRubyプロセスのクラスタ"である。(Ezra氏のアナウンスはこちら(リンク))
Naniteを構成するのは、エージェントとマッパという2つのパーツである。エージェントはアプリケーションの機能を実装するものであり、マッパはエージェントをシステムのノードとして管理する。エージェントは定期的に自身のステータスとロードアベレージをマッパへ通知するため、マッパはエージェントに対して効率よく処理を分配することができるのである。Naniteのreadmeファイル(リンク)では、より詳しい情報とサンプルを見ることができる。
Naniteは、RabbitMQ(リンク)を中心に構築されている。RabbitMQとは、Erlangで記述された高信頼で完成されたエンタープライズメッセージングシステムである。彼のブログのコメント(リンク)によると、RabbitMQ以外でもAMQP互換のメッセージミドルウェア上であれば動作するはずである。
InfoQ: Engine YardでNaniteは使われていますか。
NaniteはEngine Yardの新しいサービスプラットフォームとしてバックエンドに使われています。EC2のインスタンスを自動でスケールさせるのに役立っています。私たちがサービスのコアの一部分を公開することによって、サービスへのトラフィックは増加しますが、サービスの一部がNaniteエージェントを使っているために何も問題は起きません。
InfoQ: ウェブアプリケーション以外でNaniteが役に立つアプリケーションはありますか。
Naniteはウェブアプリケーション以外にも多く使われると考えています。多くのサーバを横断するリソースのセットをRubyからコントロールする必要がある場合、Naniteはよいソリューションとなります。
InfoQ: 数ヶ月前、次世代クラウドコンピューティングプラットフォーム(参考記事)としてVertebraについての話を伺いましたが、NaniteとVertebraの関係はどうなっているのでしょうか。
最終的には、NaniteとVertebraはrabbitmq/xmppブリッジを通して共に動作することができるでしょう。Naniteはクラウド環境上のアプリケーションを、さらにスケールさせるためのものです。Vertebraは、異種のアプリケーションのエージェントが分散したサーバに存在する場合に、それらを接続して新たなアプリケーションを構築するためのものです。
RabbitMQのセキュリティモデルはvhostsをベースにしていますので、同一バーチャルホスト上のどのようなプロセスでも相互にメッセージ交換を行うことができます。つまりこれは、バーチャルホストを用いてスケーリングする方法と相性がよいのです。また、Naniteは、アプリケーションへの負荷でユーザを待たせないための高性能なメッセージングフレームワークでもあります。Naniteで互いのセキュリティを担保した上で、Vertebraを用いて複数のマシンを接続できるようになると考えています。
NaniteはGitHub(リンク)で公開されており、Vertebraはクリスマス前、12月15日前後にオープンソースとしてリリース予定である。