TechReport

技術者情報

テクノロジー

2010年12月8日(水)公開

第35回

「GMOとくとくショップ」で利用する分散データストア-Cassandra-前編

Cassandraの概要とGMOとくとくショップでの利用について

GMOインターネット株式会社 次世代システム研究室 室長 堀内敏明。2009年11月24日、新しいショッピングガイドサイト「GMOとくとくショップ」をオープンし、既存の大手インターネット会社のショッピングガイドサイトと異なった、最新テクノロジーを多数盛り込んでいるのが特徴。今回は、「GMOとくとくショップ」分散データストア~Cassandraについて説明する。

記事INDEX

NoSQL

Webサービスにおいて膨大なデータ容量が蓄積される傾向が続いています。データ容量がどんどん増えていく一方、レスポンス速度の向上、冗長性の強化が以前にも増して重要な課題となってきました。多くのWebサービスでは、これらの課題を低コストで達成しなくてはならず、決定的なソリューションはまだありません。

図1 KVSのイメージ
図1 KVSのイメージ

そんな中、最近はNoSQL(= Not Only SQL)と呼ばれるデータストアが非常に注目され始めています。データベースと言うと、一般的にリレーショナルデータベースの意味合いで使われることが多く、それを象徴するものがまさしくSQL言語です。対してNoSQLと呼ばれるものの多くはKVS(= Key-Value Store)の発展形と言えます。KVSとは図1のようなKeyとValueのペアを保存する仕組みをもち、Keyのイコール検索によって、保存されたデータ(Value)を返すデータストアです。利用者の多いmemcachedもKVSの一つです。

KVS自体は新しいものではありませんが、KVSを発展させて、データの永続化と冗長性や負荷分散などのデータ分散機能を持たせたものが次々と開発されるようになりました。Amazon Dynamo、TokyoTyrant、kumofs、MongoDBなどがそうです。これらの実用性の高い分散KVSが、従来のリレーショナルデータベースに対してNoSQLと呼ばれています。

NoSQLと呼ばれる分散KVSのうち、機能・性能両面で特に注目しているのが、GMOとくとくショップで利用するCassandraです。GMOとくとくショップでは、画像用のデータストアとしてCassandraを利用しています。

Cassandraとは?

Cassandraは元々Facebook社がAmazon Dynamoなどを参考に開発したもので、後にオープンソースとして公開、現在はApacheのトップレベルプロジェクトとなっているものです。利用してわかった最大の特徴は「更新処理に冗長性があって、更新も参照も速い」ことに尽きます。Cassandraは広く応用されているマスター&スレーブ型のレプリケーション構成ではありません(図2参照)。

マスター&スレーブ型の欠点は、ほとんどの場合、何の制限も問題もなく更新が許されるのはマスター1台という点です。そのため、マスターが倒れるとシステム停止に繋がり、マスターがSPOF(= Single Point of Failure:単一障害点)となってしまうのが避けられません。

Cassandraはマスター&スレーブ型ではなく、Gossipプロトコルを用いたノードをリング状に繋げた構成を取っています(図3参照)。

どのノードに接続して更新しても構わないのが大きな特徴で、更新先のノードを意識する必要がありません。実際には更新対象のデータが格納されるノードはKeyによって決まっていますが、Cassandraはどのノードからでも内部処理として格納先ノードのデータを更新する仕組みを持つので、どこに接続しても構いません。

更新時に一貫性レベル(Consistency Level)を指定することができ、そのレベルに応じて一つ以上の格納先ノードへの更新を保証することもできます。一貫性レベルをZEROにして更新を行うと、書き込みの命令を投げてすぐに終了し、非同期でCassandraが実際の書き込み処理を行います。

データのレプリカ(複製)を同期する場合も、レプリカの格納先として決められたノード同士がすぐに同期されるわけではなく、「いつかは」同期する仕組みです。Cassandraの参照では、一貫性レベルを指定することができ、一番性能が良いレベル「ONE」の場合、レプリカの格納先から最初に返ってきたノードの結果を返すだけなので、常に「最新」のデータを保証するわけではありません。

このような「いつかは」同期されるという一貫性はEventually Consistencyと呼ばれ、Cassandraの仕組みの根幹をなしています。

図2 マスター&スレーブ型のレプリケーション構成イメージ
図2 マスター&スレーブ型のレプリケーション構成イメージ
図3 Gossipプロトコルを用いたノードをリング状に繋げた構成イメージ
図3 Gossipプロトコルを用いたノードをリング状に繋げた構成イメージ
GMOとくとくショップにおけるCassandraの利用

GMOとくとくショップでは、Cassandraを画像の分散データストアとして利用しています(図4参照)。
ショップや商品の画像をクローリングして取得した画像をCassandraに格納し、ユーザーから問い合わせにはCassandraから画像を返す仕組みです。当初は画像のデータストアに別のソリューションを利用していましたが、レスポンスと運用の更なる改善を目指してCassandraに切り替えました。

KVSは何と言ってもKeyを投げた時のValueが返ってくる速さが最大の魅力の一つですが、加えて、データの永続性と冗長性がありスケールアウトするというのがCassandraの魅力です。Cassandraはノードの追加をオンラインで実施することも可能で、スケールアウトが出来る上に比較的容易です。全停止を行わなくても追加したノードが利用されるようになります。

GMOとくとくショップでは、速度とスケールアウトの良さ、および運用面でシステムにマッチしたことから画像の分散データストアに採用しています。
結果、切り替え前のソリューションで必要不可欠だった画像のキャッシュサーバーが、速度向上のため現在は不要になりました。

 図4 GMOとくとくショップにおけるCassandraの構成イメージ
図4 GMOとくとくショップにおけるCassandraの構成イメージ
Cassandraと主要なプログラミング言語

Cassandraは主要なプログラミング言語から利用でき、主にThriftと呼ばれるRPCフレームワークを介して各種の言語からCassandraを扱います。Thriftは様々な言語を利用したサービス開発のために作られ、Cassandraと同じくFacebook社が開発し、オープンソースとして公開されました。Cassandra自体はJavaで出来ていますが、Thriftを使ってJavaだけでなくC++、Python、PHP、Ruby、Perlなどからも扱うことができます。Thriftによる多言語対応がCassandraの一つの魅了です。

また、直接Thriftとやり取りを行うよりも便利なクライアントも開発され、各種の言語向けに開発されたものが公開されています(図5参照)。

図5 各種の言語向けCassandraクライアント一覧
図5 各種の言語向けCassandraクライアント一覧

GMOとくとくショップでは、図4にあるように画像取得リクエストとCassandraとの間に画像サーバーを立てています。画像サーバーはApacheとPerlの組み合わせで構成されており、GMOとくとくショップのCassandraは現時点で最新安定版の0.6系なので、0.6系対応のPerl向けクライアントNet-Cassandraを使ってサービス運用しています。

後編では、Cassandraとリレーショナルデータベースの比較や利用方法について説明します。



2010.12.08

堀内 敏明

GMOインターネット株式会社

2002年7月に、現・GMOメディア株式会社に入社後、2003年3月に同社取締役システム本部長に就任。2008年3月よりGMOインターネット株式会社 次世代システム研究室 室長としてインターネット最新テクノロジーの研究や開発に従事。2015年3月に同社常務取締役に就任。

執筆者一覧