Microsoftの社内プロジェクト成果として生まれた「Azure DocumentDB」。それが大きく進化し、生まれ変わったのが「Azure Cosmos DB」だ。グローバルスケールの拡張性を持ち、「真のマルチモデル機能を持つ」というCosmos DBは、どのようなケースで最大のメリットを発揮するのだろうか。他のデータベースサービスとの違いや、最適な利用例について、Azure Cosmos DB担当シニアプログラムマネージャーのAleksey Savateyev氏に聞いた。
昨今、IT活用が一般化し、多くの企業でIoT(Internet of Things)やAI(人工知能)といった技術が使われるようになった。一方で、スマートフォンやIoTデバイスから無尽蔵にデータが集まるようになりつつある。特にグローバル企業にとっては、世界中から集めたデータを、どのように蓄積し、どうやって効率的に活用するかを考える必要がある。
そこで現在注目されるのがMicrosoftのグローバル分散データベースサービスである「Azure Cosmos DB」(以下、Cosmos DB)だ。本稿では、Microsoft Program Management Azure Cosmos DB Senior Program ManagerのAleksey Savateyev氏に、Cosmos DBの特長や他のデータベースサービスとの違い、最適な利用例について話を聞いた。
Cosmos DBの前身となる「Azure DocumentDB」(以下、DocumentDB)は、2010年に始まった「Project Florence」の成果として生まれた。Project Florenceは、Microsoftの製品やサービスを世界中に展開する中で生成され、消費される大量なデータに対して、グローバルスケールで低遅延のデータアクセスを実現するプロジェクト。当時、ほとんどの分散型データベースは、オンプレミスの従来型データベースをそのままクラウドに移行したもので、クラウド用にネイティブに構築されたものではなかった。しかも、グローバル規模で低遅延のアクセスを提供するデータベースサービスはほとんどなかった。
このような課題を解決するために生まれた新しいDBaaS(DataBase as a Service)は、2014年にDocumentDBとして一般提供される。DocumentDBは、その名の通り、ドキュメント指向型のNoSQLデータベースサービスだ。グローバルスケールかつ低遅延でデータにアクセスできる上、開発者になじみのあるSQL言語も利用できる。
SkypeやXbox Live、Azure Portalなどの製品を開発するMicrosoftを含む顧客の間でDocumentDBが成功し、さらに多くの改良を加え、2017年5月に生まれ変わったのがCosmos DBだ。Cosmos DBではドキュメント型データモデルに加え、キーバリュー型、列指向型、グラフ型など複数のデータモデルを扱うことができる。また、これらのデータモデルに異なるAPIを用いて「自然」にアクセスできる。APIには、ドキュメント用の「SQL API」や「MongoDB API」、キーバリュー用の「Table API」、グラフデータベースに対応する「Gremlin API」などがある。またあとから列指向型に対応するために、Apache Cassandraと互換性のある「Cassandra API」が追加された。
「多くの開発現場では、ドキュメント型以外のデータモデルを利用したり、SQL以外の言語でデータベースを扱ったりしています。Cosmos DBは、そのような要求に対応するために設計されました。競合サービスでもマルチモデルのデータベースをうたうものがあるが、一般的にはクエリの処理の際にエミュレーションしているだけです。Cosmos DBのデータは、異なるAPIを持って同時にアクセスできます。例えばSQL APIで書き込み、Gremlin APIで読み出すことが可能なのです」(Aleksey氏)
これを実現するために、データは単にCosmos DBの内部で異なるモデルを使用して複製している訳ではない。代わりにデータは、対応するAPIによって異なるデータモデルを介してマッピングできるように、パーシステントレイヤーに格納される。従って、異なる言語やモデルを使用するアプリケーションごとに異なるデータベースを用意する必要がない。
グローバルスケールで低遅延なデータアクセスを提供するCosmos DB。さらなる特長として、開発者は5つの明確な「整合性モデル」を選択できる。他の分散データベースの整合性モデルは、どのプロセスでも最新のデータを読み取れる「Strong」と、読み込めるデータが正しい順序である保証はないもののいつか最新のデータになる「Eventual」の2つが中心だった。そのような極端な選択肢は、開発の柔軟性に欠け、顧客の要求を満たすことが困難になるという制限があった。
「Cosmos DBではStrongとEventualの間に、『Bounded Staleness』『Session』『Consistent Prefix』という3つの整合性モデルを加えています。実際Cosmos DBユーザーに、これらの選択肢を提供した場合、単一のセッション内で強力なデータ整合性を提供する『Session』を73%が採用している一方、『Strong』はわずか4%、『Eventual』は3%しか利用されていませんでした。残りは、構成可能な『Staleness』期間の後に強いデータ整合性を提供する『Bounded Staleness』と、Eventualモデルに書き込み順序の保障を追加する『Consistent Prefix』との間で等しく分割されています」(Aleksey氏)
さらにMicrosoftでは、Cosmos DBにおいて「99.999%」という高可用性を保証している。その上で1KBのドキュメントデータの読み込み速度を10ミリ秒以内および書き込み速度を15ミリ秒以内にする性能保証がある。
「他にもスループット保証があり、全てがSLA(Service Level Agreement)の形で守れており、SLAが満たされない場合、その期間に支払われた金額を返します」(Aleksey氏)
Cosmos DBの価格は、「ストレージ容量」と「スループット」で決まる。それによる柔軟な価格体系も、ユーザーが採用しやすいポイントだ。スループットコストは、特定のコレクションまたはデータベースに割り当てられた「1秒当たりの要求ユニット数」(RU)で決まる。ストレージは、GB単位で月に利用した分だけを支払う。スループットとストレージは別々の課金なので、ユーザーが、ストレージとスループットの両方を互いに別々にスケーリングすることで、データトラフィックの急増に対処することが可能だ。
既にCosmos DBは、世界中のさまざまな企業が利用している。
日本企業の中ではトヨタ自動車が、Cosmos DBをレクサスのテレメトリーデータの管理で活用している。トヨタ自動車はレクサスの車載センサーからデータを収集して、リアルタイムに分析し、予防保守のサービスを実現している。
Cosmos DBは、データの格納だけではなく、Microsoft Azure(以下、Azure)の他のサービスと連携してデータドリブンのアクションのトリガーといった役割を果たすことが簡単だ。トヨタ自動車のユースケースでは、冬の寒い日にCosmos DBからメッセージを車両に送り、車に乗る前にエンジンをスタートするアクションで利用されている。
「トヨタ自動車のように世界中でサービスを提供したい要求に対し、グローバルレベルの高い可用性があることが、Cosmos DB採用のポイントになっています。これに低遅延のデータアクセスがあることで、ドライバーに対しリアルタイムなサービスを実現できるのです」(Aleksey氏)
トヨタ自動車以外にも、多くの自動車メーカーで走行中の自動車の監視などでCosmos DBが利用されている。
またCosmos DBは、自動車メーカー以外でもIoT活用にも適している。例えば「Spark-Azure Cosmos DB」コネクターを使うことで、「Apache Spark」のパワーとエコシステムを使用してビッグデータを収集し、分析する環境を容易に実現できる。
「Spark-Azure Cosmos DBコネクターを活用することで、データの近くでコネクターを実行し、分析に必要なデータだけをApache Sparkに渡し、大量のパーティションデータを効率良く分析できます」(Aleksey氏)
他にも「Azure Data Factory」(ADF)と連動して、Cosmos DBをあらゆる種類のソースからデータのリポジトリとして使用することも可能だ。ADFは、全ての種類のAzureベースおよび外部システムへの70以上のコネクターを備えており、効率的なCosmos DB統合を実現できる。
もう1つのユースケースが、EC(Eコマース)だ。一般的なECサイトでは、利用者が商品を選び、カートに入れ、注文を確定すれば商品が届けられる。このようなイベントの順序を確実に回せるように、開発者はECサイトのフロントエンドとバックエンドの仕組みを構築する。このとき重要となるのが、各ステップが確実に動いて、次のステップと連携することだ。そして、いつでもECプロセスの進行状況を確認できる必要もある。
Cosmos DBを使うことで、ECサイトの一連のプロセスを簡素化でき、ステータス確認の仕組みを簡単に実現できる。Cosmos DBの「Change Feed」機能を利用することで、データベースに発生した変更内容と、そのタイミングのレコードを確実に取得できる。Jet.comやASOSなどはこのChange Feedを活用し、Eコマースのプロセスが正確に実行される仕組みを構築している。
「Cosmos DBには、日々新しい機能が増えている。最近では、ユーザーから要望が多かった機能の1つである『マルチマスター』の機能を追加しました」(Aleksey氏)
マルチマスター機能は、Cosmos DBのようなマルチモデルおよびマルチAPIデータベースを中心に、グローバルスケールでの実装は非常に容易ではない。マルチマスター機能の提供で、グローバルスケールで生まれるデータを扱う際の、迅速な同期処理のニーズにも十分に応えられるようになった。
またCosmos DBの利用をさらに広げていくため、Cosmos DB開発者が使用可能なAPIを追加する計画もある。現在は、Cosmos DBを使えば、オンプレミスで利用しているMongoDBやCassandraの環境を、クラウド環境にすぐに「リフト&シフト」できる。そういったものをさらに、増やしていくという。
「幾つかの新しいAPIは既にロードマップにあります。われわれは、一般的なNoSQLデータベースと互換性のあるAPIを実装します。それによりCosmos DBで、オンプレミスベースのデータベース環境を安価でクラウドベースのアプリケーションに対応できます。多くのデータベース管理操作が自動化され、スクリプトを手動で行う必要がなくなったため、TCOが低くなります」(Aleksey氏)
しかしCosmos DBは既存のデータベース全てを置き換えるようなものではない。例えばリレーショナルデータベースと組み合わせることで、多様なアプリケーション要求に容易に応えられる。このハイブリッドアプローチでは、既存のコードベースを活用しながら、Cosmos DBをはじめとするクラウドネイティブデータベースを使って、新しいクラウドネイティブ関数およびマイクロサービスを構築できる。
「とにかくグローバルスケールで動かすようなアプリケーションを開発している人には、Cosmos DBをぜひ試してほしい。高い可用性、低遅延、柔軟な価格設定モデルを求めているような場合には、大きなメリットを提供できるはずだ」(Aleksey氏)
Cosmos DBは無償利用できるものも用意されており、さらにオンプレミス環境やPCでも使えるローカルエミュレータも提供されている。
「Azureのサブスクリプションがあればすぐに利用できるので、多くの人に試してもらいたい。使ってみると開発スピードがこんなに速くなるのかと、きっと驚くことになるでしょう」(Aleksey氏)
Copyright © ITmedia, Inc. All Rights Reserved.
提供:日本マイクロソフト株式会社
アイティメディア営業企画/制作:@IT 編集部/掲載内容有効期限:2018年8月22日