2014年2月19日水曜日

BashoのRiakとは何か?    -SDS7-

このSDS(Softesre-Defined Storage)シリーズも第7回目。
今回と次回は、Web時代にとって有用なオブジェクトストレージについて取り上げる。まずは風変わりな名前のスタートアップBasho Technologiesだ。この名前は創業者のひとりが俳句に造詣が深く、それで芭蕉(Basho)にしたと聞く。ちなみに、俳句は今やそのまま英語“Haiku”で通じるほど人気は高い。クラウドの世界でも、Hero(ヒーロー)とHaiku(俳句)をもじった社名Herokuというプロバイダーがあるし、前Sun CEOだったJonathoan Shuwartz氏も英語の俳句を作っていた。さてBashoだが2008年、同じボストンに本拠をもつAkamaiのエンジニア達が興した会社である。彼らが試みたのはAmazonが出したDynamoに関する論文の製品化だ。目指すはエンタープライズには欠かせない耐障害性と無停止運転である。

=4つのRiak製品=
Bashoの開発したオブジェクトストレージがRiakだ。Bashoの開発チームは、Riakを分散環境に適合させて、その上で高信頼データベース化を追及した。彼らの製品は4つある。まず、元祖オープンソースのRiak。勿論、無償で利用でき、1クラスター構成となる。ここで言うクラスター(後述)とは1つのデータセンターと考えても良い。次に有償版のRiak Enterprise。これにはマルチクラスター間(マルチデータセンター間)のレプリケーション構築と24x7のサポートサービスが付いている。この異なるセンター(クラスター)間でのレプリケーションは高可用性を追求するRaikの大きな特徴だ。さらに、AWS S3互換のRiakをベースとしたRiak CS(Cloud Storage)。これにも無償シングルクラスター版と前述のマルチ機能(レプリケーション)でサポート付きの有償版(Riak CS Enterprise)がある。このRiak CSを利用すれば、S3で作られたアプリケーションの移行が出来るし、同じインターフェースのオンプレミスやクラウドアプリケーションを作ることも可能だ。CSはまた、マルチテナントでもあるため、プロバイダーや大企業での採用が多い。

=Riakの仕組み=
さて、基本となるRiakの仕組みを見ていこう。まずRiakは分散システムだと述べた。このランタイムは配備された幾つかのサーバーのErlang/OTP で稼動する。これらサーバーのひとつひとつをノードと言い、複数ノードからなるクラスターがRiakデータベースを構成する。クラスター内では各ノードは平等なP2Pの関係にあり、新たにノードを参加されることも容易である。蛇足だが、並列処理言語Erlangは開発元のエリクソン社のEricsson Languageが名前の由来だが、実際は、並列計算処理で重要な待ち行列理論の数学者Agner Erlangにちなんだものらしい。OTPはエリクソン社が電話交換機用に開発した分散環境のプラットフォームで、耐障害性や無停止運用に強い特性を持つ。Riakのデータ構造をもう少し詳しく見よう。
Riakのデータ管理はKey-Value Store。個々のKey+Valueからなるデータはバケットに入れられ、分散環境の複数サーバー(クラスター)のノードに保存される。バケットはKeyを分類するための名前空間で、Bucket/Keyからハッシュ関数計算して、分散保存するノードを決める。実際の構造はもう少し細かく、各ノードは仮想ノード(vnode)に分割されて、ハッシュ値からvnodeが決められる。vnodeはさらに複数のPartitionに分けられており、分散をより確かなものにしている。下図のRingでは160bitのハッシュ空間をP=32個のPartitionで分け、同数のvnodeで配分している。この例では物理ノードは4つだ。

=実際のI/Oと障害対策=
実際の読み書きはどうなるのだろうか。
書き込み(Put)は、障害対策のため、異なる物理ノードの複数vnode(Default=3)に複製される。そして複製がW値(Default W=2)に達した時にアプリケーションに完了を返す。この例では3回の書き込み保存のうち2回が終われば成功だとみなす。読み込み(Get)も、事前に設定されているR値(Default=2)回の読み込みが出来るとアプリケーションにデータを戻す。このようにRiakは、データの自動複製、さらには障害vnodeの自動回避や自動復旧機能を用いながら、耐障害性について、完璧な対応をしている。また DRなど更なる障害対策のために、クラスター間でリプリケーションを行うことも出来る。下図はノードから見ることが出来るクラスター管理コンソールの画面例だ。ノードは親が無いP2Pなので、どのノードからも同じ画面が見れる。


以上、見てきたようにRiakは耐障害性と運用の容易性にこだわった製品である。
周知のように、AWSで提供される各種サービスは魅力的だが、一度それらを使って開発をすると、他システムへの移行は難しい。つまり、AWSは便利だがベンダーロックインの側面も持ち合わせている。その意味でRiakおよびRiak CSの登場は、AWSの保守性をブレークスルーさせ、且つより高い信頼性をユーザーにもたらす可能性を秘めている。Riakは既にFortune 50の25%に浸透していると聞く。