シンプルな高可用キャッシュサービスを実現
at+linkが分散KVS「okuyama」を
採用した理由
2011/3/1
Javaで書かれたOSSの分散KVS実装「okuyama」を使い、at+linkでは導入・運用ともに手軽なキャッシュサーバ機能を実現したという。サービスの狙いを聞くと同時に、okuyama開発者の岩瀬氏に話を聞いた。
注目を集めるNoSQL
NoSQLが注目されている。中でも、ハードディスクに比べてケタ違いに高速なメモリを活かせるKVS(Key-Value Store)技術の実装が数多く登場している。高いスケーラビリティや応答性が求められるWebアプリケーションでは、バックエンドに従来のRDBMSを利用しつつも、キャッシュとしてKVSを組み合わせる手法が一般化した。
特に負荷が集中しがちなソーシャルアプリなどでは、KVS利用はボトルネック解消のカギといってもよい。これはエンドユーザーへの応答性を高めるという意味もあって、プラットフォーム利用のための必須条件ともなりつつある。例えばmixiなどが採用するOpenSocialではAPIを使ってエンドユーザーのデータを取得できるが、こうしたデータをキャッシュするのにオンメモリのKVSが適しているからだ。
KVSの難点は導入や運用が面倒なこと
最も初期から利用されているKVS実装の1つ、memcachedはシンプルで高速だが、導入や運用が面倒という難点がある。
まず、可用性の問題がある。memcachedは複数サーバによるスケールアウトが可能だが、フェイルオーバーに対応していない。このためライブラリやクライアントコード側で、サーバの状態監視やフェイルオーバー処理を用意する必要がある。クラスタリングによる冗長構成や永続化もサポートしていないため、キャッシュ用途で使うにしても、シンプル過ぎるきらいがある。
KVSの実装は数多く登場し、高機能化している。メモリ上に高度なデータ構造を実現したものや、複数サーバのクラスタリングによる冗長構成が可能なものなども少なくない。こうしたKVSは、向き不向きや特性がさまざまで、導入のための評価や、運用フェーズでのハードルが高くなるというトレードオフもある。
こうした状況の中、at+linkは3月1日、国内ホスティング事業者としては珍しい、分散KVSを利用したキャッシュ機能のサービスを発表した。クラウド的な運用を可能とする専用サーバパッケージ「アプリプラットフォーム」で使えるオプションサービスだ。もともとアプリプラットフォームでは、 PCI Express 接続で利用するFusion-io社の高速なSSD「ioDrive」搭載サーバでDBのボトルネックを解消するなど、ソーシャルアプリベンダのニーズに応えるサービスだったが、さらに魅力的なサービスを追加投入してきた形だ。
キャッシュサーバ機能の利用は、初期費用と1GBまでの利用料が無料。2GBで630円/日、以降4GB・6GB……と増やしていける。
最大の特徴はシンプルさだ。サービス開発を担当した前佛雅人氏(同社ディベロッパーサポート シニアエンジニア)は、「Ruby on Rails向けPaaSとして注目されているHerokuのアドオンのような、手軽に追加して使えるサービスを目指した」と語る。コストメリットもさることながら、手軽さがポイントといい、「ちょうどマニュアル車からオートマへ移行して、もうマニュアル車に戻れないと感じたのと同様に、一度使えば便利さを感じていただけると思います」。
バックエンドとして利用しているのは、Javaで書かれた和製のオープンソース分散KVS「okuyama」だ。at+linkでokuyamaを利用したクラスタサーバ構成を構築しているため、ユーザーはこれらサーバ群の設定や運用の心配をする必要がない。利用開始・停止や容量変更は設定画面から行える。PHP、Javaの専用クライアントもあるが、プロトコルにmemcachedを使っているため、言語やフレームワークを問わず利用できる。
なぜokuyamaを選んだのか?
okuyamaによるキャッシュ・システムは、以下のように冗長化したマスターノードと、多数のデータノードから構成されている。
マスターノードは複数台存在し、フェイルオーバーもサポートしている。また、各データノードでデータは冗長化されているため、okuyamaのシステム内には、いわゆる単一障害点がない。at+linkのキャッシュサービスは、このシステムに支えられているので、利用者としても障害の心配をする必要はない。
データノードの動的追加も可能だ。このときシステムは自動で移行処理を行うため、容量変更時にアプリケーションもキャッシュサーバも止める必要がない。もちろんユーザー側で物理サーバの設定などは不要だ。ユーザーがokuyamaのシステム運用について意識する必要はないが、今後、サービス提供期間中に物理メンテナンスなどでシステムが停止する心配がないことは、重要なメリットとして知っておいて良いだろう。
ところで、okuyamaはJavaで書かれているためインフラアプリとしてはオーバーヘッドがあるのではないか? 個人的なサイドプロジェクトとしてokuyamaの開発をスタートし、現在は勤務先でフルタイム開発をしている神戸デジタル・ラボの岩瀬高博氏は、こう語る。
「現在、分散KVSはC/C++による実装が最も多いのは事実です。しかし、okuyamaでも1万クライアント同時アクセスで問題がなく、スケールアウトも容易です。okuyamaではネットワーク接続、書き込み処理など、タスク別にキューを用意し、これをワーカープールがさばくという実装にしています。これにより、スレッド生成のコストをかけず、同時接続性能を高めることに成功しています。ベンチマークでもC実装のものに引けを取らない数値が出ています」(岩瀬氏)
神戸デジタル・ラボはWebサイトの企画制作からシステム開発、そしてokuyamaの開発・導入支援・サポートを提供している。at+linkは、同社の協力を得て今回キャッシュサーバのサービスを提供する。開発者が日本人で、緊密なやりとりができたことも、at+linkにとってokuyamaを選択した理由の1つだったという。
JavaScriptをノードで実行、より高度な処理も
at+linkが今回のキャッシュ機能で目指したのはシンプルな実用性だが、okuyama自体はカスタマイズ性が高く、高機能だ。
例えば、永続化の有無やトランザクションログを残すかどうかなどは設定で変えられる。また分散KVSでは一般にデータの一貫性とパフォーマンスはトレードオフの関係にあるが、強い一貫性/弱い一貫性は運用時の設定で選べる。ちょっと変わった機能としては、キーだけをメモリに置いて、バリューをディスクに保存するということも、設定によって可能だ。これはPCI Express接続のSSDとの組み合わせで威力を発揮するという。
こうしたきめ細かな設定に加えて、okuyamaのユニークな機能として、タグ機能とデータノード上でのJavaScriptの実行機能がある。
一般に、KVSではキーが分からないことにはデータが取り出せないという性質がある。この制限のために、レコードのグループ化もアプリ側で複数キーを管理する仕組みを実装するしかない。だが、okuyamaでは各キー・バリューにタグを付加する機能がある(内部実装的にはタグもキー・バリューで管理されているという)。タグを使えば、複数のキー・バリューを1回のクエリで取得できるため、ログ処理などで特定の日付や期間だけを一発で引っ張ってくることも可能になる。
さらに、okuyamaではデータノード上でJavaScriptを実行する機能がある。特異な機能に感じるかもしれないが、KVS実装の世界では現在、データ側にコードを寄せるのが新しいトレンドの1つとなっている。メモリだけでなくCPU負荷を分散できるし、トランザクションを実現したり、各オブジェクトのアクセス統計を集計するコードなど可能性が広がっている。okuyamaは、こうした先進的な機能も実装しているのだ。
現状、at+linkのサービスはシンプルさと安定性を売りにしているが、今後はokuyamaの高度な機能を活かした画像サーバやログサーバの提供も検討しているという。今後もat+link アプリプラットフォームの機能追加に注目だ。
関連リンク
関連記事
- ソーシャルアプリ向けにリンクが新提案(@IT Special)
- 日単位でリソースを増減できる仮想サーバホスティング(@IT NewsInsight)
- 実際に“全社員在宅勤務”を実施してみたら(@IT NewsInsight)
提供:株式会社リンク、株式会社エーティーワークス
アイティメディア営業企画/制作:@IT 編集部
掲載内容有効期限:2010年3月31日
関連リンク
関連記事
- ソーシャルアプリ向けにリンクが新提案(@IT Special)
- 日単位でリソースを増減できる仮想サーバホスティング(@IT NewsInsight)
- 実際に“全社員在宅勤務”を実施してみたら(@IT NewsInsight)