このページの本文へ

“惑星規模”でスケール!? デプロイ王子が解説

謎の分散データベース「Azure Cosmos DB」一問一答

2017年05月23日 07時00分更新

文● 羽野三千世/TECH.ASCII.jp 写真●曽根田元

  • この記事をはてなブックマークに追加
  • 本文印刷

 米マイクロソフトが「Build 2017」で発表した新しいクラウドNoSQLデータベース「Azure Cosmos DB」。Microsoft Azureの世界40リージョン(計画中6カ所を含む)にデータを分散保存し、分散された各リージョンのデータが一貫性を保って利用できるように設計されている。

 もともとは、マイクロソフトが自社のアプリケーションをグローバルに提供するために、社内向けに2010年頃から開発してきたものだ。世界中のリージョンから同時に書き込まれたデータに、最寄りのリージョンからアクセスできるため、応答性の高いアプリケーションを構築することができる。

 Build 2017で紹介されたCosmos DBの次の特徴について、日本マイクロソフトクラウドプラットフォーム技術部 テクノロジースペシャリストの廣瀬一海氏(デプロイ王子)に一問一答形式で教えてもらった。

  • 惑星規模でスケール
  • マルチモデル、マルチAPI
  • Turn-key global distribution
  • 5つの一貫性モデル
  • 大規模アプリケーションの開発を支援

日本マイクロソフトクラウドプラットフォーム技術部 テクノロジースペシャリストの廣瀬一海氏(デプロイ王子)

“惑星規模”でスケールするデータベースとは?

 この惑星(地球)にあるAzureリージョンで、データを分散保存するデータベース基盤という意味です。

 ユーザーは、どのリージョンにデータを分散配置するか、Azure Cosmos DBでデータベースを作成する際に選択でき、いつでも追加・変更することができます。Cosmos DBは現在、25リージョンへのレプリケーションが可能です。まだAzureの全リージョンには対応していませんが、理論上、すべてのリージョンに分散することができます。日本の東西リージョンは対応済みで、今後、利用できるリージョンが順次拡大することを期待しています。

マルチモデル、マルチAPIとは?

 Cosmos DBは、「データの保存方式とAPIを選べる」分散データベース基盤です。この特徴をマルチモデル、マルチAPIと表現しています。

 保存方式は、Document、Graph、Key-Valueの3つのNoSQLデータモデルから選択できます。そして、それぞれのデータモデルで利用できるAPIを提供しています。DocumentではDocumentDB APIとオープンソースのMongoDB API、GraphではオープンソースのGremlin API、Key-ValueではTable APIというように対応します。

 これまで、分散NoSQLデータベースサービス「DocumentDB」として提供されていたものは、Cosmos DB分散データベース基盤上で構築され、今後DocumentDBはCosmos DBに統合され、選択肢の1つとして提供されます。

 データの保存方式とAPIは、Cosmos DBでデータベースを作成する際に指定します。現状は作成後の変更はできません。

Cosmos DBではデータベース作成時にデータモデルを選択

Turn-key global distributionとは?

 Cosmos DBは、Azureポータルの地図上でリージョンをポチポチとクリックするだけで、データを分散保存するリージョンの選択が完了します。新しいリージョンを追加している間も、Cosmos DBは停止しませんし、スループットも維持されます。これをTurn-key global distributionと呼んでいます。

データを分散保存するAzureリージョンをクリックで選択

5つの一貫性モデルとは?

 分散データベース全般の話ですが、「データの一貫性」と「パフォーマンス」はトレードオフの関係にあります。日本と米国に分散されたデータベースがあるとして、日本からデータが書き込まれたとき、データの一貫性を確実に保証するためには、日本と米国のデータベースの同期が完了するのを待つ必要があります。同期完了を待ってから次の処理が実行されるため、当然パフォーマンスが落ちます。スピードを重視したいシステムでは、一貫性の条件を少し緩めて、例えば何ミリ秒まではデータの不整合を認めるといった調整によって、性能を高めることができます。

 Cosmos DBでは、この一貫性の強弱のレベルを、5段階から選択できるようになっています。確実に一貫性を保証する「Strong」から、t秒以降はk世代以内のデータが読めることを保証する(tとkはユーザーが指定)「Bounded Staleness」、書き込み終了後に書き込んだリージョンではデータが読める「Session」、読めない場合もある「Consistent Prefix」、読めない「Eventual」まで提供しています(日本語画面では強固、有界整合性制約、セッション、CONSISTENTPREFIX、最終的)。

データの一貫性の強弱レベルを5段階から選択

 一貫性が強いほどパフォーマンスは悪くなり、逆に弱いほどパフォーマンスは向上します。このように、パフォーマンスと可用性をアルゴリズムで管理できるのが、Cosmos DBの大きな特徴です。

大規模アプリケーションの開発を支援とは?

 例えば、世界中に同じアプリケーションを展開して、それをブラジルから使うケースを考えてみてください。このアプリのデータベースAPIのアクセス先が日本だったら、アプリからデータベースへのアクセスは相当の時間がかかっていました。

 ひとつの解決方法として、従来は、各国に個別にデータベースを設置して、個別に運用したりしてきたわけです。

 モバイルファースト、クラウドファーストの時代になり、開発者が世界の市場を対象にしてアプリケーションを構築することが増えてきました。IoTのシステムを例にとると、自動車や航空機に搭載されたデバイスなどは、それこそ世界中を移動して、世界中からデータベースへアクセスします。Cosmos DBによって、これら世界中から届くデータを1つのデータベースとして統合的に管理できるようになります。

■関連サイト

カテゴリートップへ

ASCII.jp特設サイト

クラウド連載/すっきりわかった仮想化技術

ピックアップ