SlideShare a Scribd company logo
Azure Cosmos DB を使った
クラウドネイティブアプリケーションの
設計パターン
2018.1.26
@ JAZUG札幌支部(きたあず) 第17回勉強会
三宅 和之 Kazuyuki Miyake

﹣
﹣
﹣
﹣

﹣
﹣
﹣
Blog: k-miyake.github.io/blog/
Twitter: @kazuyukimiyake
A globally distributed, massively scalable, multi-model database service
Column-family
Document
Graph
Turnkey global distribution
Elastic scale out
of storage & throughput
Guaranteed low latency at the 99th percentile
Comprehensive SLAs
Five well-defined consistency models
Table API
Key-value
Azure Cosmos DB
MongoDB API
A globally distributed, massively scalable, multi-model database service
Column-family
Document
Graph
Turnkey global distribution
Elastic scale out
of storage & throughput
Guaranteed low latency at the 99th percentile
Comprehensive SLAs
Five well-defined consistency models
Table API
Key-value
Azure Cosmos DB
MongoDB API
API Apps
Search
Cosmos
DB
Blob
Storage
利用者
認証
App Service
Microsoft Azure
Storage
Queue
Blob
Storage
Functions
Storage
Queue
SQL Database
Cosmos
DB
Cognitive
Services
Machine
Learning
Function
s
PC Clients(Windows/Mac)Mobile Clients(iOS/Android)
API Gateway
外部システム
Application
Insights
Azure
Monitor
Web Apps
Token
.NET
Identity
Framework
Functions
REST/OAuth2
SPA (Browser App)SPA (Browser App)
負荷モニター/オートスケール
Microsoft導入事例サイト:
https://www.microsoft.com/ja-jp/casestudies/ffs.fujifilm.aspx
1.
2.
﹣
﹣
﹣
3.
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

﹣
﹣
﹣
参考: A technical overview of Azure Cosmos DB
https://azure.microsoft.com/en-us/blog/a-technical-overview-of-azure-cosmos-db/
Dr. Leslie Lamport
Azure Cosmos DB

﹣
﹣
Document型
Graph型
Column Family型
• SQL API (DocumentDB)
• MongoDB API
• Gremlin API• Table API
Key-Value型
• Apache Cassandra API(プレビュー)

﹣

﹣

﹣

﹣
参考: Automatic regional failover for business continuity in Azure Cosmos DB
https://docs.microsoft.com/ja-jp/azure/cosmos-db/regional-failover

﹣
﹣
﹣
﹣
﹣
﹣
﹣
﹣

﹣
﹣

﹣
﹣
﹣
https://www.documentdb.com/capacityplanner
参考: Azure Cosmos DB の要求ユニット
https://docs.microsoft.com/ja-jp/azure/cosmos-db/request-units
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
•
•
「Person」を表現するために4
つのエンティティが必要
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
画面の多くがマスタを
参照していることが多い

﹣
﹣
参考: NoSQL データベースのドキュメント データのモデル化
https://docs.microsoft.com/ja-jp/azure/cosmos-db/modeling-data
•
•


• 1つのJSONは、1つのcsファイルにまとめても良い
• 実際には、各プロパティにJsonPropertyを付与してキャメ
ルケースに対応させる
public class Rootobject
{
public string Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public Address Address { get; set; }
public string Title { get; set; }
public Contact[] Contacts { get; set; }
}
public class Address
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public int Zip { get; set; }
}
public class Contact
{
public string Email { get; set; }
}
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

﹣
﹣
Use the best data store for the job
https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/use-the-best-data-store
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
• 自動レプリケーション
• フェールオーバー
(自動/手動)
アクティブ
アクティブ
ルールによるトラ
フィック振分け
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

﹣
﹣
﹣

﹣
﹣
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン



参考: Automatic regional failover for business continuity in Azure Cosmos DB
https://docs.microsoft.com/ja-jp/azure/cosmos-db/regional-failover
// 接続ポリシーの作成
var connectionPolicy = new ConnectionPolicy
{
ConnectionMode = ConnectionMode.Direct, // ダイレクトモード
ConnectionProtocol = Protocol.Tcp // TCPを利用
};
// 読み取りリージョンを優先度順に追加
connectionPolicy.PreferredLocations.Add("Japan West");
connectionPolicy.PreferredLocations.Add("Japan East");
connectionPolicy.PreferredLocations.Add("Southeast Asia");
// DocumentDBクライアントの生成
client = new DocumentClient(
new Uri(ConfigurationManager.AppSettings["endpoint"]),
ConfigurationManager.AppSettings["authKey"],
connectionPolicy
);
client.OpenAsync(); // パフォーマンス改善のため一度接続しておく
接続クライアント生成時に、読み取
りリージョンを設定しておく
参考: PaaSがかりの部屋 - Cosmos DBで読み取りリージョンへ明示的にルーティングする
https://k-miyake.github.io/blog/cosmos-db-preferred-locations/
動的設定の
実装例
Make all things redundant
https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/redundancy
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

﹣

﹣
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Azure Cosmos DB Triggerを使ったAzure Functionの実行フロー
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
•
•

﹣
﹣

﹣

﹣
﹣https://docs.microsoft.com/ja-jp/azure/cosmos-
db/import-data

﹣
﹣
﹣
Use managed services
https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/managed-services
デモで利用したソースコードはGithubで公開しています
https://github.com/k-miyake/mstsjp2017-dal005
Try Azure Cosmos DB for free!
https://azure.microsoft.com/ja-jp/try/cosmosdb/
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン
Cosmos DBのリソースモデル •
•
•
Account
Database
Container
Item
=
Collection Graph Table
• ドキュメント
• ストアドプロシージャ
• トリガー
• ユーザ定義関数
参考: Azure Cosmos DB 階層型リソース モデルと中心的概念
https://docs.microsoft.com/ja-jp/azure/cosmos-db/documentdb-resources
Container(SQL APIでは「コレクション」)
が設計上最も重要な単位

﹣
﹣

﹣
﹣
﹣

﹣
﹣
Provisionedrequest/sec
Time
12000000
10000000
8000000
6000000
4000000
2000000
Nov 2016
Hourly throughput (request/sec)
参考: Azure Cosmos DB コンテナーのスループットの設定
https://docs.microsoft.com/ja-jp/azure/cosmos-db/set-throughput
•
•
Document document = await _client.ReadDocumentAsync(
UriFactory.CreateDocumentUri(_option.DatabaseId, _option.CollectionId, id),
new RequestOptions{ PartitionKey = new PartitionKey(pkey)}
);
参考 :Azure Cosmos DB でのパーティション分割とスケーリング
https://docs.microsoft.com/ja-jp/azure/cosmos-db/partition-data

﹣
﹣
﹣
﹣


﹣
参考: Azure Cosmos DB の SLA
https://azure.microsoft.com/ja-jp/support/legal/sla/cosmos-db/


参考: Azure Cosmos DB での予約されたスループット上限の超過
https://docs.microsoft.com/ja-jp/azure/cosmos-db/request-units#RequestRateTooLarge
一貫性
レベル
説明
Strong
• 最新バージョンのデータを返すことが保証される
• 複数リージョンへの分散ができない
Bounded
Staleness
• 最大でアイテムの K 個のバージョンまたはプレフィックス
あるいは期間 t の分だけ、読み取りが書き込みに対し遅れる
ことが保証
• kとtは設定変更が可能
Session
• クライアント セッション内での一貫性が保証される
• デフォルト
Consistent
Prefix
• 返される更新が、それ以外の全更新の一部のプレフィックス
となる (ギャップなし)
• 書き込みが A, B, C の順で実行された場合、クライアントで
は A、A,B、または A,B,C で返る可能性があるが、A,C また
は B,A,C などで返されることはない
Eventual
• 結果整合性
• 読み取りと書き込みの待機時間は最短
• クライアントからの読み取りは順不同となる可能性がある
参考: Azure Cosmos DB の一貫性レベル
https://docs.microsoft.com/ja-jp/azure/cosmos-db/consistency-levels

﹣
﹣
Physical index
https://docs.microsoft.com/ja-jp/azure/cosmos-db/indexing-policies

﹣
﹣
参考: Azure Cosmos DB のサーバー側 JavaScript プログラミング
https://docs.microsoft.com/ja-jp/azure/cosmos-db/programming#database-program-transactions

﹣
﹣

﹣https://www.documentdb.com/sql/demo
参考: Azure Cosmos DB DocumentDB API: SQL 構文
https://docs.microsoft.com/ja-jp/azure/cosmos-db/documentdb-sql-query-reference#select-query

﹣
﹣
PM> Install-Package Microsoft.Azure.DocumentDB
• TCP直接接続モードの例
• ポート範囲 10000 ~ 20000
を開けておく必要あり
参考: Azure Cosmos DB .NET SDK
https://docs.microsoft.com/ja-jp/azure/cosmos-db/documentdb-sdk-dotnet

サンプル実装:
https://github.com/Azure-Samples/documentdb-dotnet-todo-app/blob/master/src/DocumentDBRepository.cs
• SDK利用に多くの解釈がないため、
ほぼ同じようなコードに収束する
• Upsertもサポートされている
• 実はSQLを直接使う機会
はあまりない
DocumentDBRepository抜粋

﹣
﹣

﹣
﹣

﹣
参考: Azure Cosmos DB データベースのセキュリティ
https://docs.microsoft.com/ja-jp/azure/cosmos-db/database-security

﹣
﹣

﹣
﹣
参考: Azure Cosmos DB での自動オンライン バックアップと復元
https://docs.microsoft.com/ja-jp/azure/cosmos-db/online-backup-and-restore




﹣
参考: Azure Cosmos DB のメトリックを使用した監視とデバッグ
https://docs.microsoft.com/ja-jp/azure/cosmos-db/use-metrics
Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

More Related Content

PPTX
Azure Cosmos DB のキホンと使いドコロ
PDF
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
PDF
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
PDF
20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon SES
PDF
Infrastructure as Code (IaC) 談義 2022
PDF
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
PDF
Amazon DynamoDB 키 디자인 패턴
Azure Cosmos DB のキホンと使いドコロ
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
IDaaS を正しく活用するための認証基盤設計 ~Azure Active Directory の構成パターン詳細~
20180717 AWS Black Belt Online Seminar AWS大阪ローカルリージョンの活用とAWSで実現するDisaster Rec...
AWS Black Belt Tech シリーズ 2016 - Amazon SES
Infrastructure as Code (IaC) 談義 2022
機密データとSaaSは共存しうるのか!?セキュリティー重視のユーザー層を取り込む為のネットワーク通信のアプローチ
Amazon DynamoDB 키 디자인 패턴

What's hot (20)

PPTX
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
PDF
JAWS-UG 情シス支部の皆様向け Amazon Elastic File System (Amazon EFS)
PPTX
Hybrid Azure AD Join 動作の仕組みを徹底解説
PDF
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
PDF
20200630 AWS Black Belt Online Seminar Amazon Cognito
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
Azure governance v4.0
PPTX
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
PDF
Azure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベント
PDF
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
PDF
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
PDF
AWS Black Belt Online Seminar 2018 AWS上の位置情報
PDF
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
PDF
GraphQL入門 (AWS AppSync)
PDF
AWS Black Belt Techシリーズ AWS Direct Connect
PDF
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
PDF
AWSでアプリ開発するなら 知っておくべこと
PDF
オンプレミスRDBMSをAWSへ移行する手法
PDF
진정한 하이브리드 환경을 위한 올바른 선택, AWS Outposts! - 강동환 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
PDF
AWS Black Belt Online Seminar 2017 AWS WAF
AWS Organizations連携サービスの罠(Security JAWS 第26回 発表資料)
JAWS-UG 情シス支部の皆様向け Amazon Elastic File System (Amazon EFS)
Hybrid Azure AD Join 動作の仕組みを徹底解説
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
20200630 AWS Black Belt Online Seminar Amazon Cognito
マルチテナント化で知っておきたいデータベースのこと
Azure governance v4.0
サポート エンジニアが Azure Networking をじっくりたっぷり語りつくす会
Azure Blob Storageへの様々なアクセス方法を比べてみた JAZUG12周年イベント
20190319 AWS Black Belt Online Seminar Amazon FSx for Windows Server
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
AWS Black Belt Online Seminar 2018 AWS上の位置情報
20210330 AWS Black Belt Online Seminar AWS Glue -Glue Studioを使ったデータ変換のベストプラクティス-
GraphQL入門 (AWS AppSync)
AWS Black Belt Techシリーズ AWS Direct Connect
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
AWSでアプリ開発するなら 知っておくべこと
オンプレミスRDBMSをAWSへ移行する手法
진정한 하이브리드 환경을 위한 올바른 선택, AWS Outposts! - 강동환 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
AWS Black Belt Online Seminar 2017 AWS WAF
Ad

Similar to Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン (20)

PPTX
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
PDF
[Japan Tech summit 2017] DAL 005
PPTX
Cosmos DB 入門 multi model multi API編
PDF
OSS on Azure で構築するウェブアプリケーション
PPTX
Microsoft Azure build & ignight update summary
PDF
BPStudy20121221
PDF
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
PPTX
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
PDF
Azure IaaS update (2018年6月~8月 発表版)
PPTX
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
PPTX
エンジニアのための Azure 基礎知識
PDF
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
PPTX
機械学習 / Deep Learning 大全 (5) Tool編
PPTX
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
PDF
AWSクラウドデザインパターン - JEITA講演 -
PDF
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
PDF
Azure上の データベース 機能の選び方。KVSからDWHまで
PPTX
Moot2013 moca ver0.3
PDF
オープンソーステクノロジー対応の App Service と Azure Database Servicesを活用した Webシステムデザイン
Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
[Japan Tech summit 2017] DAL 005
Cosmos DB 入門 multi model multi API編
OSS on Azure で構築するウェブアプリケーション
Microsoft Azure build & ignight update summary
BPStudy20121221
ゲームインフラと解析基盤 そのものの考え方を変えるAWS
Web App for Containers + MySQLでコンテナ対応したRailsアプリを作ろう!
Azure IaaS update (2018年6月~8月 発表版)
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
エンジニアのための Azure 基礎知識
やりたいことから考えるMicrosoft Azure 上の データストアの選び方とデータサイエンティスト向け活用法。KVSからDWHまで
機械学習 / Deep Learning 大全 (5) Tool編
Web App for Containers + MySQLでコンテナ対応したPHPアプリを作ろう!
AWSクラウドデザインパターン - JEITA講演 -
[ウェビナー] Build 2018 アップデート ~ データ プラットフォーム/IoT編 ~
Azure上の データベース 機能の選び方。KVSからDWHまで
Moot2013 moca ver0.3
オープンソーステクノロジー対応の App Service と Azure Database Servicesを活用した Webシステムデザイン
Ad

More from Kazuyuki Miyake (10)

PPTX
Azure Search クックブック
PPTX
Azure Cosmos DB + App Serviceの良い関係
PPTX
XamarinでAzure AD認証 (リフレッシュトークン対応)
PPTX
Xamarin + Azure Mobile Appsの現実
PPTX
DocumentDBクイックスタート(開発現場編)
PPTX
本番運用で使うVisual Studio
PPTX
現実的な「WordPress on Azure App Service」 クイックスタート
PPTX
Face APIで開発する時に使っている7つの道具
PDF
Agile meets BABOK
PDF
要求管理を確実に行うための知識と方法
Azure Search クックブック
Azure Cosmos DB + App Serviceの良い関係
XamarinでAzure AD認証 (リフレッシュトークン対応)
Xamarin + Azure Mobile Appsの現実
DocumentDBクイックスタート(開発現場編)
本番運用で使うVisual Studio
現実的な「WordPress on Azure App Service」 クイックスタート
Face APIで開発する時に使っている7つの道具
Agile meets BABOK
要求管理を確実に行うための知識と方法

Azure Cosmos DB を使った クラウドネイティブアプリケーションの 設計パターン

Editor's Notes

  • #4: 3
  • #5: 4
  • #11: サーバレスデータベース サーバレスアーキテクチャを支えるデータストア もはやいわゆるNoSQLデータストアではない
  • #12: DocumentDB API データはJSON形式 SQLが利用可能 MongoDB API 既存のMongoDBツールチェーンとスキルを活用できる ワイヤプロトコル Table Storage API KVS Azure Storage Tableのプレミアム版という位置付け Gremlin API グラフDB グラフトラバーサル言語のGremlinをサポート
  • #24: idを含めなければ自動で生成される(手動採番もOK) 大量データなら「インポートツール」も利用可能
  • #29: Webアプリ + DBのシステム全体が東西DR構成となる Traffic Managerとの組み合わせ SQL DBも併用可能
  • #30: Webアプリ + DBのシステム全体が東西DR構成となる Traffic Managerとの組み合わせ SQL DBも併用可能
  • #38: IoTからのセンサーデータや操作ログなどの分析 リアルタイムに分析ができるデータストア 複数ドキュメントを返すクエリはRUの消化が大きくなる
  • #41: Functions Cosmos DBトリガーでほぼリアルタイムの検索インデックスを作成 Azure Function Cosmos DBトリガー
  • #43: Cosmos DBのSQLでは検索に限界がある SELECT * FROM c WHERE CONTAINS(c.note, '本田技研') 表記揺れ、ゆらぎなどへの対応ができない 検索結果のスコアリングができない ページングの実装がシンプルになる
  • #62: Get insights into your Azure #CosmosDB: partition heatmaps, OMS, and more - https://azure.microsoft.com/en-us/blog/get-new-insights-into-your-azure-cosmos-db-partition-heatmaps-azure-monitor-oms-and-audit-log/