「Azure Cosmos DB」は、大規模なアプリケーション開発を支援し、「Coca-Cola」やソフトウェア会社の「NortonLifeLock」(旧:Symantec)、大手EC「ASOS」などでも使われている分散型データベースです。優れた応答性と高可用性を実現し、50以上のAzureリージョンで利用できます(2020年7月15日現在)。
また、可用性やスループット、一貫性などに関してSLA(Service Level Agreement)が適用されており、ミッションクリティカルなアプリケーションに利用可能です。本記事では、Azure Cosmos DBの概要を紹介していきましょう。
Cosmos DBとは
Cosmos DBは、フルマネージドな分散型データベースサービスです。数ミリ秒の高速データアクセスが可能で、スループットや待機時間、可用性、一貫性については包括的なSLA(Service Level Agreement)が適用されています。
Azure Portal上の画面をクリックするだけで複数のAzureリージョンを跨いで、スループットとストレージを柔軟に変更可能であり、オンライン状態のままパフォーマンスを即座に変更することが可能です。
さらに、利用可能な50以上のAzureリージョンの中から、任意のリージョンをAzure Cosmosアカウントに紐付けると、選択した各リージョンにデータが自動的かつ透過的にレプリケートされます(Cosmos DBの利用にはAzure Cosmosアカウントが必要です)。
複数のAPIとデータモデルが利用可能
また、Cosmos DBは「マルチモデルのデータベースサービス」と説明されることがありますが、これはAPIとデータモデルを選択できるという特徴に由来しています。Cosmos DBでは以下のAPIが提供されています。
- SQL API
- MongoDB API
- Azure Table API
- Apache Gremlin API
- Cassandra API
- etcd API(プレビュー版)
Blockchain Data Managerを使用したCosmos DBと連携
Microsoftが提供するフルマージドのブロックチェーンサービス「Azure Blockchain Service」で使えるAzureサービス「Blockchain Data Manager」を活用することで、Cosmos DBにブロックチェーン上のトランザクションデータを記録することができます。記録されたトランザクションデータは「Azure Cosmos DB Data Explorer」を用いて検索可能です。
一般的なデータベースと比べて、ブロックチェーンは検索性能が劣る場合がありますが、上記のサービスを用いることで検索性能を向上させることができます。
Cosmos DBのメリット
Cosmos DBの主なメリットを簡単に紹介していきましょう。
Turn-key global distribution
優れた応答性と高可用性を実現するためには、アプリケーションのインスタンスを、物理的にユーザーに近いデータセンターにデプロイしなければなりません。前述したように、Cosmos DBでは50以上のAzureリージョンを選択して、データを透過的にレプリケートすることができます。したがって、ユーザーはもっとも近いリージョンにあるデータのレプリカと対話することができるのです。
そして、Cosmos DBではAzure Portal上の画面をクリックするだけで、自身のCosmosアカウントにAzureリージョンを追加/削除することができます。追加されたリージョンには、データがシームレスにレプリケートされます。レプリケーションにあたって、アプリケーションの一時停止や再デプロイは必要ありません。
Always On
Cosmos DBは読み取りと書き込みの両方に対して、99.999%の高可用性が提供されています。また、CosmosアカウントのフェールオーバーをプログラムあるいはPortalを介して呼び出す機能も利用可能です。したがって、特定のリージョンで大規模災害が発生した場合などにも、アプリケーションが自動で復旧するように設計できます。
需要に応じたスケーラビリティを世界規模で実現
Cosmos DBでは1回のAPI呼び出しで、世界中のどこでも秒間数千から数億のリクエストへとスケールアップすることができます。その際には、必要なスループットとストレージに対してのみ支払いが発生します。したがって、予期せぬリクエストの急増(スパイク)にも即座に対応可能です。
選択可能な5つの一貫性レベル
分散データベースにおいてデータの一貫性とパフォーマンス、可用性、待機時間はトレードオフの関係にあります。Cosmos DBでは、データの一貫性に関して5つレベルが提供されており、その概要は以下の通りです。
- Strong(厳密):厳密な一貫性を保証する。読み込み時には、最新版のデータが必ず返される
- Bounded staleness(有界整合性制約):データの読み取りが、最大Kバージョン分あるいはT時間分だけ、書き込みよりも遅れる可能性がある(TとKはユーザーが指定。TとKどちらか先に到達した数値分だけ遅れる)
- Session(セッション):単一のクライアントセッション内では、古いデータを読み取ったり、書き込んだ後にすぐに書き込み処理完了後のデータを読み取ったりできる(consistent-prefix,monotonic reads/writes,read-your-writes,write-follows-readsを保証。ただし、単一のライターセッションか複数のライターでセッショントークンを共有することが前提)
- Consistent prefix(整合性のあるプレフィックス):読み取ったデータが最新である保証は無いものの、最終的には一貫性を保った状態に収束する。また、書き込まれた順序通りの読み取りが保証される
- Eventual(最終的):読み取る際の順序の保証がなく、読み取ったデータが最新である保証は無いものの、最終的には一貫性を保った状態に収束する
なお、一貫性レベルに関しては、ドキュメントに記載されているアニメーションを見ると、直感的にイメージしやすいです。
その他のメリット
上記以外にも以下のメリットが挙げられます。
- 全世界で99パーセンタイルの低遅延を保証
- スキーマとインデックスの管理が不要
- Skype、Xbox、Office 365、Azureなどのミッションクリティカルなアプリケーションで10年近く使われてきたデータベースサービス(=厳しくテストされたデータベースサービスである)
- 50以上のAzureリージョンで利用可能
- デフォルトでのセキュリティ保護され、エンタープライズ用途にも対応
- TCO(Total Cost of Ownership)の大幅な削減
- 包括的なSLA(Service Level Agreement)
- 人気のオープンソースソフトウェアAPIを使ったアプリ開発が可能
- Cosmos DBに保存されたデータにApache Sparkを直接実行できる
Cosmos DBの価格
Cosmos DBでは、プロビジョニングのスループットと時間あたりの使用ストレージに対して課金されます。目的に応じてプランを選択できるので、価格の詳細に関しては以下のページをご覧ください。
Cosmos DBをとりあえず触ってみたい方は、Azure Cosmos DB の Free レベルを使用して期間限定・無料で試用することができます。Azureサブスクリプションへの課金がなくても問題ありません。また、最初の400RU/秒と5GBのストレージの範囲内であれば、30日間無料で利用可能です(RU= Request Units)。
まとめ
本記事冒頭でも紹介したように、Cosmos DBを活用することで大規模なアプリケーション開発を行うことができます。また、Blockchain Data Managerを利用することで、構築したブロックチェーンアプリケーションのトランザクションデータをCosmos DBに記録し、検索性を向上させることも可能です。
Microsoftは「Azure Cosmos DBのNoSQLデータを扱う」というラーニングパスを提供しており、Cosmos DBを用いたNoSQLデータ用のデータベースとコンテナの作成方法を学ぶことができます。
Azure Cosmos DBのNoSQLデータを扱うラーニングパス – Learn
その他、詳細についてはCosmos DBのドキュメントをご覧ください。