Riakは可用性を重視するデータベースです。例えば、ひとつのクラスタ内でネットワークの分断が起きたとき、Riakはそれでも動作を続けようとします。その代償としてRiakは厳密な整合性を保つことのできない、いわゆる結果整合型のデータベースとして開発されてきました。
Riakは内部的にデータ更新の履歴を保持しており、その系譜をたどることで不整合の多くを自動解決していきます(ベクタークロックを用いた更新履歴管理)。それでも解決できない不整合についてRiakは「sibling」と呼ばれるデータを残す道をオプションに加えています。これはコンフリクトする複数の結果をそのまま残しておき、上位のアプリケーションにその解決を委ねるもので、不整合が発生してデータが失われることを防ぐ有効な手段となっています。
図3:Riakでのレプリカのイメージ
データセンター間でレプリケーション
2014年10月、Bashoは「Riak 2.0」をリリースしました。これまで比較的忠実にDynamoDB論文のコンセプトに沿ってきたRiakにとって、最新版の2.0は、その良さを生かしつつも大きな変革を伴ったものとなっています。
例えば、この新しいRiakは従来の結果整合型の設定に比べて強い整合性を持ったデータベースとしても設定でき、KVSの枠組みを越えた新しいデータタイプも導入されています。また「Apache Solr」を使った全文検索機能、セキュリティ機能など、強力で新しい機能も追加されました。
RiakにはOSS版の他にBashoが提供するエンタープライズ版があります。エンタープライズ版にはいくつかの追加機能が提供されており、Bashoのエンジニアによるサポートも付随しています。エンタープライズ版でのみ提供される代表的な機能はデータセンター間レプリケーション(MDC-R)と呼ばれるものです。
前述のようにRiakは、それ自身のクラスタ内で複数のレプリカを持っています。MDC-Rはこれに加えて、クラスタ自体を複数レプリケーションするもので、複数のデータセンターに配置したクラスタ同士を同期する形で利用されます。同期は片方向にも双方向にも設定でき、災害対策やクライアントとのデータローカリティを考慮してアクセス先を変えるような使い方がされています。
Riakはその特徴を生かし、多くのエンタープライズユーザーの獲得に成功しています。スマホゲームで記録的な大ヒット作となった「Angry Birds」(Rovio)、世界で最もプレイヤー数が多いオンラインゲーム「League of Legends」(Riot Games)はRiakを利用して作られています。
オンライン広告プラットフォームを提供するOpenXではRiakを利用したシステムで年間数兆件を越えるアクセスを処理しています。国内でもYahoo! JAPANのモバイルポータルで使われているほか、金融やECの分野でも利用が広がっています。
Hadoopとのハイブリッドシステム
Riakの代表的なユースケースをいくつかご紹介しましょう。
ひとつにECサイトがあげられます。最近のECサイトでは極めて多くの商品を取り扱っており、膨大な商品データを保持しています。データの多くは商品IDに紐づく商品説明や写真、価格などの情報であり、キーバリューのモデルに良くあてはまり、Riakの可用性、スケーラビリティが生かせる良いユースケースです。決済などで厳密なトランザクション処理が必要な部分については従来のRDBを組み合わせるといいでしょう。事例としては米大手小売店BestBuyのECサイトがあります。
スマホゲームに代表されるコンシューマー向けアプリケーションは大量のユーザー情報、セッション情報を管理する必要があります。数千万、数億にのぼるユーザーデータ、セッションデータの保管はまた、Riakのメジャーなユースケースのひとつで、Angry Birdsをはじめ、国内大手のECサイトなど多くの事例があります。
イギリスやデンマークでは国民健康保険の情報管理データベースとしてRiakを利用し、医療機関での治療投薬履歴などを管理しています。要求される高い可用性を満たすことはもちろんですが、従来の商用RDBを利用したシステムに比べて、大きくコストを低減できた事例として知られています。
昨今、アクセス情報や販売情報を元に顧客やユーザーごとにコンテンツやサービスを変える顧客情報管理(CRM)システムが広く使われるようになっています。大量のデータを分散並列で処理するシステムとしては「Apache Hadoop」が有名で、多くの成功事例があります。
しかしHadoopはバッチ処理に適した反面、リアルタイムの応答性能に特化したシステムではありません。Riakのユースケースのいくつかは、HadoopとRiakを融合したハイブリッドシステムです。Hadoopがバッチ処理で解析した結果をRiakが引き取ってユーザーからのアクセスに応答する、こうした好例のひとつがYahoo! JAPANのモバイルポータルで使われている「あなたにお勧めの記事」機能でしょう。
この機能では収集した多くのデータからユーザーごとの好みを解析し、興味があると思われる記事をお勧めとして提供しています。1日数回、RiakはHadoopで解析された結果を受け取ってピーク時には秒間2000アクセスを越えるリクエストを安定してさばいています。
いかがでしたでしょうか。駆け足ではありましたが、代表的なキーバリューストア型の分散データベースRiakの技術的な概要とユースケースについて解説しました。詳しい情報はhttp://basho.co.jp/をご参照ください。英文になりますがhttp://docs.basho.com/ではさらに多くの情報をご提供しています。
最後になりますが、Bashoジャパンは米Basho Technologiesの製品開発拠点のひとつです。Bashoジャパンには製品開発のコアエンジニアが常駐しており、Riakについて技術的にディープな質問にも日本でお答えが可能です。どうぞお気軽にお問い合わせください。
- 森英悟(もり・えいご)
- Bashoジャパン
- IBM、NOKIA、ユニデンを経て2013年より現職。IT業界での幅広い経験をベースに各業界の顧客にアプローチし、Riakを用いたソリューションを提案することに奔走している