PaaS(プラットフォーム-アズ-ア-サービス)プラットフォームのHerokuでまず4つのNoSQLデータストアがアドオンとして利用可能になる。2009年10月に導入されたアドオンシステムを利用することでHerokuのユーザはCloudantを使って CouchDBを、NorthScaleを使ってMembaseを、MongoHQを使ってMongoDBを、そしてRedisをそれぞれ利用できるようになった。
HerokuはRubyのプラットフォームプロバイダであり、現在約70.000のアプリケーションをホストしている。セットアップ(gitを使った)と依存性管理がシンプルでRubyアプリケーションをシームレスに拡張できることが特徴だ。HerokuはAmazonのEC2上に、Rubyアプリケーションのサービス提供や拡張のためのカスタムのインフラ管理を載せることで構築されている。
私たちはHerokuのバイスプレジデントであり、NoSQLアドオンのコントリビュータでもあるOren Teich氏から、この件についてさらなる情報の提供を受けた。この記事ではそれを紹介したい。
HerokuはNoSQLデータベースを顧客にとってとても有益なものと見なしている。巨大なデータセットや、ユーザが提供する構造化されていないコンテンツやグラフ構造などの問題に対処しなければならない場合は特に有効だ。また、高可用性や耐障害性、スケーラビリティや分割耐性などのNoSQLデータベースの他の特性も同様に重要だ。
ユーザからの強い要望もあってHerokuはNoSQLの導入を決めた。同時に、複数のベンダがHerokuに接近してきた。Oren Teich氏の言葉を借りれば、それは"恐ろしいくらいのタイミング"だった。
herokuにはオープンなアドオンシステムとマーケットプレイスがあるので、サードパーティベンダは自身の持つインフラとサービスと簡単に統合できる。
氏はNoSQLアドオンの状況を下記のように説明する。
"それぞれのアドオンごとに現在の状況は異なります。 Northscale memcachedとMongoHQのMongoは完全に利用できる形でリリースされています。Cloudantはパブリックベータ、Redis To Goはプライベートベータです。このような状況から言えるのはHerokuのアドオンが基本的なデータストアではないということだけです。この数ヶ月の間に利用できるようになったアドオンもありますし、素晴らしいベータプログラムを提供して、何百ものユーザからのフィードバックを得る機会が持ったアドインもあります。"
他のNoSQLアドオンのために、Herokuはユーザの関心事を意見として集め、ベンダに必要な接続インフラを提供するように促したいと考えている。
私たちは4つのベンダにHerokuとの統合の経験、Herokuとのインターフェイスになるプロトコルや提供する機能について話を聞いた。また、既存のリレーショナルデータベースや文書からのマイグレーションのサポートについて、これからの開発についても話を聞いた。
すべてのプロバイダがNoSQLのインスタンスを自身のインフラにホストし、Herokuのユーザがアクセスするためのインターフェイスとして、RESTかプログラミングAPI(例えばruby gems)を提供する。アドオンはアプリケーションの必要に応じて透過的に規模を調整するHerokuのプロビジョニングシステムと統合される。ほとんどのアドオンが既存のデータストアと同様の機能を提供する。また、耐障害性や監視についてはさらにサポートが強化されている。リレーショナルデータベースからのマイグレーションには既存のオープンスペースツールを利用すべきだろう。
MongoDBのMongoHQ
MongoHQアドオンを利用するとデータベースを視覚的に管理できる。バックアップやレプリケーション機能も提供する。
ホストされたMongoDBとのコネクションにはMongoMapperを使う。MongoMapperはRuby用のオブジェクトマッパーだ。また、オブジェクトドキュメントフレームワークであるMongoidも利用できる。また、Mongo Ruby Driverも利用できる。
NorthScale MembaseとMemcached
NorthScaleが管理するのでHerokuへの統合は直接的だ。サービスのアップデートもユーザ(そしてHeroku)に対して透過的である。 NorthscaleはHerokuと協業してHeroku側のアドオンの要求にもMembaseのアーキテクチャにも適合するAPIを開発した。サービスのプロビジョニングはHeroku側が行い、ユーザは直接プロビジョニングを利用できる。また、NorthScaleはHerokuのチケッティングシステムにも統合される。
Membaseはmemcachedの当座の代替品なので、MembaseでもHerokuでもすべての既存ツールは(再)利用できる。
クライアント側についてはNorthScaleはEvan Weaver氏と協業した。氏はRubyのmemcached向けクライアントFaunaの開発者だ。氏と協業したのは、Herokuのマルチテナント環境でクライアントに正しい挙動をさせるためだ。Membaseはmemcachedと互換性があるので、既存のRuby on Railsは透過的にMembaseへ移行できる。Membaseをデータ保存場所とするActiveRecordもサポートする。
現時点で2000のユーザがHeroku上でMemcached Serverを利用している。NorthScale Membase ServerがHerokuのアドオンとして利用できるのは8月中旬からだ。
NorthscaleはRDBMSからキャッシングソリューションやNoSQLへのマイグレーションは段階的に行うことを推奨している。
James Bracy氏のRedis To Go
EC2上のシステムにとって、スケーリングは問題にならない。Herokuのプロビジョニングシステムを通じて新しいサーバを追加することも同様だ。Redis To Goは内部ツールとServer DensityをRedisのインスタンスやサーバの状態監視に使う。
Redis To Goは現在、いくつかのアプリケーションで利用されている。現在の最大のユーザはFlightCasterだ。Heroku上のユーザからの評価は上々だ。
Redisのアドオンはプロビジョニングサービス用のAPIを持つ。Redisと連携するためにはいくつかのオープンソースのソリューションを利用できる。ドキュメントはredistogoと閲覧できる。
バックアップは毎日される。ウェブインターフェイスと使えば、バックアップを直接ダウンロードできる。また、インスタンスの能力の限界に近づいたらユーザに通知する機能も追加される予定だ。
Alan Hoffman氏のCloudant
CloudantはすでにCouchDBのホスティング(EC2上でも)の経験がある。したがって、Herokuへの統合は直接的だ。インスタンスの配置はCloudantが制御する。HerokuユーザがアクセスするにはCouchDBのRESTインターフェイスを通じて行われる。
アドオンがリリースされる前にCloudantを利用したHerokuユーザがいて、彼らが積極的にフィードバックをくれた。
アドオンはCouchDB 1.0のAPIに準拠している。また、漸進的マップ/リデュースやピアベースレプリケーションのようなCouchDBの機能も利用できる。加えてCloudantには冗長性もある。異なるサーバに各レコードの複数のコピーを保存するのだ。また、コンパクションやビュー構築などだ典型的なデータ管理タスクも自動化している。
CouchDBと通信するための規定のRuby gemはCouchRestだ。HerokuでCouchDBを使い始めるための概説記事もある。また、Rails向けの詳しい情報はRailsのウィキにある。