ここから本文です

「Azure Cosmos DB」の全貌──MSエバ佐藤直生氏が解説

6/13(火) 12:00配信

アスキー

「de:code 2017」の日本マイクロソフト エバンジェリスト佐藤直生氏による「Azure Cosmos DB」のセッションを紹介する。
 「Azure Cosmos DBの開発は、マイクロソフトの7年越しのプロジェクトでした。ようやくその全貌をご紹介できます」---。5月23日、日本マイクロソフトの開発者イベント「de:code 2017」のテクニカルセッションで、同社 エバンジェリストの佐藤直生氏がMicrosoft Azureに新しく登場したデータベースサービス「Azure Cosmos DB」について解説した。
 

MS社内の必要性から生まれた大規模アプリ向けDB
 Cosmos DBは、5月11日に米マイクロソフトの年次開発者会議「Build 2017」で発表された分散NoSQLデータベースサービスだ。もともとは、マイクロソフトが自社でグローバル分散アプリケーションを開発する際の必要性から、2010年に「Project Florene」として開発がスタートしていた。
 
 2014年に、Project Floreneの成果の一部がDocumentデータモデル対応のNoSQLデータベースサービス「Azure DocumentDB」がプレビューリリースされた(2015年にGA)。そして今回、プロジェクトの完成形として、Document、Graph、Key-Valueの3つのNoSQLデータモデルに対応するCosmos DBが発表された(DocumentDBはCosmos DBのサービスの1部という位置づけに変更された)。
 
 Cosmos DBは、(1)すべてのデータを自動的に世界中のAzureリージョンにレプリケートし、(2)可用性、レイテンシ、スループット、整合性の4つを保証するユニークなSLAがあり、(3)5段階の整合性モデルを提供しているのが特徴だ。それぞれの特徴について、佐藤氏の解説を紹介する。
 
フェールオーバー時にアプリの再デプロイ不要
 Cosmos DBは、すべてのデータを自動的に世界中のAzureリージョンにレプリケートする。「ターンキー形式(鍵をひねるかのようにシンプルな操作)で、ユーザーが指定した複数のAzureリージョンにデータベースを展開できます。読み書き可能な1つのプライマリリージョンに対して、読み取り専用の多数のセカンダリリージョンを構成可能です」(佐藤氏)。
 
 現在、Azureのリージョンは計画を含めて世界に40カ所展開されている。政府専用リージョンや、現地の法規制に基づいて現地企業が運用している中国リージョン、ドイツリージョンもあるが、佐藤氏によれば、Cosmos DBはマイクロソフトが「リング0(基礎的なAzureサービスとして全リージョンで必ず提供する)」に位置付けるサービスであり、リージョンがローンチしたタイミングで必ず利用可能になるという。
 
 グローバルに分散したCosmos DBへのアクセス(データの読み取り)には、読み取りアクセスの接続先の優先順位を指定しておくことで、アクセス元から最寄りのリージョンに接続する「マルチホームAPI」という仕組みを採用している。これにより、通常時に最短経路でデータへアクセスできるだけでなく、「リージョンのフェールオーバー時に、接続先変更のためのアプリケーションの再デプロイが不要になります」と佐藤氏は説明した。
 
 障害時の自動フェールオーバーに加えて、手動フェールオーバーも可能なので、例えば夜間の利用が多いオンラインゲームでは、米国の夜間帯には米国リージョンをプライマリに、欧州の夜間帯には欧州のリージョンをプライマリにするといったように、手動フェールオーバーしながらの運用も可能になる。
 
 指定リージョン間でレプリケートされたCosmos DBのデータベースは、各リージョンではAzure Service Fabric上に構築されたクラスター内に配置されている。「現状では、全パーティションが1つの書き込みリージョンに配置されています。今後、パーティションごとに異なる書き込みリージョンに配置可能になります。これにより、例えば日本のユーザーからの書き込みは日本リージョンに書き込むように指定するなどの設計ができるようになります」(佐藤氏)。
 
 読み取りはレプリケートされている全リージョンで可能なので、Azure上で動作するアプリなら処理は同一リージョン内で完結する。「リージョン間ネットワークのレイテンシがないので読み取り処理は、1KBのデータで99パーセンタイル10ミリ秒未満、50パーセンタイル2ミリ秒未満となります」(佐藤氏)。
 
エンタープライズグレードの4つのSLAを提供
 Cosmos DBは、可用性に加えて、レイテンシ、スループット、整合性の4つを保証するSLAを設けている。「ほかにはない、ユニークなSLAです」と佐藤氏。
 
 可用性のSLAでは、利用規模(スループットやストレージ容量、リージョン数、リージョン間距離など)に関わらず全アカウントに対して99.99%を保証。そのほか、ユーザーによるリージョンのフェールオーバー実行時のデータ損失ゼロ、障害発生時のシステムによる自動フェールオーバーに関してはデータ損失の上限を保証している。
 
 レイテンシのSLAでは、エンドツーエンドの待機時間を99パーセンタイルで保証する。同一リージョン内のエンドツーエンドの待機時間は、1KBのデータの場合、読み取りで10ミリ秒未満、インデックス設定済みの書き込みは15ミリ秒未満が保証される。「Cosmos DBのデータベースエンジンは、書き込まれたデータに対して自動的にインデックスを作成するので、インデックス設計が不要で書き込み処理の待機時間が短くなります」(佐藤氏)。またこのデータベースはスキーマレスで、インデックス管理だけでなくスキーマ管理も不要になる、
 
 そのほか、予約したスループットを保証するSLA、後述する5段階の整合性に従ったSLAが提供される。「手厚いSLAに加えて、セキュリティもエンタープライズグレードです。データベースへの格納時、通信時に、データ、インデックス、バックアップ、添付ファイルが常時暗号化されます。規定で、暗号化は自動的に有効化されています」(佐藤氏)。
 
データ整合性とパフォーマンスのバランスを選択できる
 Cosmos DBでは、読み書き可能な1つのプライマリリージョンに対して、読み取り専用の多数のセカンダリリージョンを構成する。プライマリにデータが書き込まれると、複数のセカンダリと同期されて、最終的には全データベースのデータの一貫性が保たれる。このとき、データの整合性(一貫性)を優先するのか、パフォーマンスを優先するのか(整合性とパフォーマンスはトレードオフの関係)、整合性とパフォーマンスのバランスを5つのモデルから選択できるのがCosmos DBの大きな特徴だ。
 
 5つの整合性モデルとは、(1)確実にデータの一貫性を保証する強い整合性(複数リージョンではサポートされない)「Strong」、(2)t秒以降はk世代以内のデータが読めることを保証する(tとkはユーザーが指定)「Bounded Staleness」、(3)書き込みリージョンではデータ書き込み終了後にデータを読み取れることを保証する「Session」、(4)Sessionより1段階弱い整合性「Consistent Prefix」、(5)結果整合性のみを保証する最も弱い整合性「Eventual」。
 
 佐藤氏によれば、多くのCosmos DBユーザー(その多くはDocumentDBの既存ユーザー)は、最もバランスのとれている整合性モデル「Session」を選択して利用しているという。
 
インデックス管理やスキーマ管理の複雑性を排除
 前述のように、Cosmos DBの開発プロジェクトは、エンドユーザーを世界中に持つような大規模アプリケーションを開発する際に、マイクロソフトが社内で直面していた問題を解決することを目的に始まった。
 
 Cosmos DBを使うことで、高い応答性、スループット、常時稼働を(SLAで保証された形で)維持しながら複数リージョンにまたがる分散アプリケーションを開発することができる。分散アプリケーションの開発において課題になるインデックス管理、スキーマ管理の複雑性からも解放されるという。「使わないのはもったいない。これまでRDBMSをお使いのエンジニアの皆さんも、Cosmos DBでNoSQLの世界に触れてみてください」(佐藤氏)。
 
 
文● 羽野三千世/TECH.ASCII.jp

最終更新:6/20(火) 7:13
アスキー

Yahoo!ニュースからのお知らせ