Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Azure Cosmos DB を使った高速分散アプリケーションの設計パターン

3,211 views

Published on

Tech Summit 2017のセッション(DAL005)「Azure Cosmos DB を使った 高速分散アプリケーションの設計パターン」資料です。

Published in: Software
  • Be the first to comment

Azure Cosmos DB を使った高速分散アプリケーションの設計パターン

  1. 1. Microsoft Tech Summit 2017
  2. 2. 1. 2. 3. 4. #mstsjp17 #DAL005
  3. 3.  ﹣ ﹣ ﹣  ﹣ ﹣ ﹣ Blog: k-miyake.github.io/blog/ Twitter: @kazuyukimiyake
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. 1. 2. ﹣ ﹣ ﹣ 3.
  8. 8. ■  https://docs.microsoft.com/ja-jp/azure/cosmos-db/ ■ ■Azure Cosmos DB: The globally distributed, multi-model database  https://myignite.microsoft.com/sessions/54947 ■Azure Cosmos DB, design patterns and case studies for globally distributed applications  https://myignite.microsoft.com/sessions/54954
  9. 9.  ﹣ ﹣ ﹣ 参考: A technical overview of Azure Cosmos DB https://azure.microsoft.com/en-us/blog/a-technical-overview-of-azure-cosmos-db/ Dr. Leslie Lamport
  10. 10. Azure Cosmos DB  ﹣ ﹣ Document型 Graph型 Key-Value型 • DocumentDB(SQL) API • MongoDB API • Gremlin API (プレビュー) • Table API(プレビュー)
  11. 11.  ﹣  ﹣  ﹣  ﹣ 参考: Automatic regional failover for business continuity in Azure Cosmos DB https://docs.microsoft.com/ja-jp/azure/cosmos-db/regional-failover
  12. 12.  ﹣ ﹣ ﹣ ﹣ ﹣ ﹣ ﹣ ﹣
  13. 13.  ﹣ ﹣  ﹣ ﹣ ﹣ https://www.documentdb.com/capacityplanner 参考: Azure Cosmos DB の要求ユニット https://docs.microsoft.com/ja-jp/azure/cosmos-db/request-units
  14. 14. • • 「Person」を表現するために4 つのエンティティが必要
  15. 15. 画面の多くがマスタを 参照していることが多い
  16. 16.  ﹣ ﹣ 参考: NoSQL データベースのドキュメント データのモデル化 https://docs.microsoft.com/ja-jp/azure/cosmos-db/modeling-data • •
  17. 17.   • 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; } }
  18. 18.  ﹣ ﹣ Use the best data store for the job https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/use-the-best-data-store
  19. 19. • 自動レプリケーション • フェールオーバー (自動/手動) アクティブ アクティブ ルールによるトラ フィック振分け
  20. 20.  ﹣ ﹣ ﹣  ﹣ ﹣
  21. 21.    参考: Automatic regional failover for business continuity in Azure Cosmos DB https://docs.microsoft.com/ja-jp/azure/cosmos-db/regional-failover
  22. 22. // 接続ポリシーの作成 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/ 動的設定の 実装例
  23. 23. Make all things redundant https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/redundancy
  24. 24.  ﹣  ﹣
  25. 25. Azure Cosmos DB Triggerを使ったAzure Functionの実行フロー
  26. 26. • •
  27. 27.  ﹣ ﹣  ﹣  ﹣ ﹣https://docs.microsoft.com/ja-jp/azure/cosmos-db/import-data
  28. 28.  ﹣ ﹣ ﹣ Use managed services https://docs.microsoft.com/en-us/azure/architecture/guide/design-principles/managed-services
  29. 29. デモで利用したソースコードはGithubで公開しています https://github.com/k-miyake/mstsjp2017-dal005
  30. 30. Try Azure Cosmos DB for free! https://azure.microsoft.com/ja-jp/try/cosmosdb/
  31. 31. DAL005: Azure Cosmos DB を使った高速分散アプリケーションの設計パターン
  32. 32. Cosmos DBのリソースモデル • • • Account Database Container Item = Collection Graph Table • ドキュメント • ストアドプロシージャ • トリガー • ユーザ定義関数 参考: Azure Cosmos DB 階層型リソース モデルと中心的概念 https://docs.microsoft.com/ja-jp/azure/cosmos-db/documentdb-resources Container(DocumentDB APIでは「コレク ション」)が設計上最も重要な単位
  33. 33.  ﹣ ﹣  ﹣ ﹣ ﹣  ﹣ ﹣ 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
  34. 34. • • 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
  35. 35.  ﹣ ﹣ ﹣ ﹣  参考: Azure Cosmos DB の SLA https://azure.microsoft.com/ja-jp/support/legal/sla/cosmos-db/v1_0/
  36. 36.   参考: Azure Cosmos DB での予約されたスループット上限の超過 https://docs.microsoft.com/ja-jp/azure/cosmos-db/request-units#RequestRateTooLarge
  37. 37. 一貫性 レベル 説明 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
  38. 38.  ﹣ ﹣ Physical index https://docs.microsoft.com/ja-jp/azure/cosmos-db/indexing-policies
  39. 39.  ﹣ ﹣ 参考: Azure Cosmos DB のサーバー側 JavaScript プログラミング https://docs.microsoft.com/ja-jp/azure/cosmos-db/programming#database-program-transactions
  40. 40.  ﹣ ﹣  ﹣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
  41. 41.  ﹣ ﹣ 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
  42. 42.  サンプル実装: https://github.com/Azure-Samples/documentdb-dotnet-todo-app/blob/master/src/DocumentDBRepository.cs • SDK利用に多くの解釈がないため、 ほぼ同じようなコードに収束する • Upsertもサポートされている • 実はSQLを直接使う機会 はあまりない DocumentDBRepository抜粋
  43. 43.  ﹣ ﹣  ﹣ ﹣  ﹣ 参考: Azure Cosmos DB データベースのセキュリティ https://docs.microsoft.com/ja-jp/azure/cosmos-db/database-security
  44. 44.  ﹣ ﹣  ﹣ ﹣ 参考: Azure Cosmos DB での自動オンライン バックアップと復元 https://docs.microsoft.com/ja-jp/azure/cosmos-db/online-backup-and-restore
  45. 45.     ﹣ 参考: Azure Cosmos DB のメトリックを使用した監視とデバッグ https://docs.microsoft.com/ja-jp/azure/cosmos-db/use-metrics

×