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.
Upcoming SlideShare
クラウドデザイン パターンに見る クラウドファーストな アプリケーション設計 Data Management編
Next
Download to read offline and view in fullscreen.

Share

JAZUG クラウドデザインパターンのコードを覗く

Download to read offline

「クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き」のサンプルコードを紹介します

http://ec.nikkeibp.co.jp/item/books/P98330.html

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

JAZUG クラウドデザインパターンのコードを覗く

  1. 1. クラウドデザインパターンの コードを覗く kyrt / Takekazu Omi http://kyrt.in takekazu.omi@kyrt.in @takekazuomi 2014/7/30 1.0.1
  2. 2. クラウドデザインパターン Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications kyrt @takekazuomi 2
  3. 3. 自己紹介 近江 武一 JAZUG Azure Storage 担当(自称) Microsoft MVP for Azure kyrt @takekazuomi 3 kyrt.in github.com/takekazuomi white paper
  4. 4. 紹介 • Microsoft patterns & practices • Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications • http://msdn.microsoft.com/en- us/library/dn568099.aspx • 翻訳が、2014年6月に出ました • クラウドデザインパターン Azureを例とし たクラウドアプリケーション設計の手引き • http://ec.nikkeibp.co.jp/item/books/P98330.html • 日経BP 以下、CDP本と記述 kyrt @takekazuomi 4
  5. 5. 内容 クラウドアプリケーション設計の頻出課題集 Software design pattern の Cloud Application 版 •24のパターン •10のガイダンス ポスター • http://azure.microsoft.com/en-us/documentation/infographics/cloud- design-patterns/ kyrt @takekazuomi 5
  6. 6. JAZUGで監訳 •翻訳と監訳のはざまに悩みつつも de:code で出せるように奮闘 kyrt @takekazuomi 6
  7. 7. 回答集じゃない 課題が整理され、考慮点について記述されて いる •8つの問題領域 •10つのcode sample kyrt @takekazuomi 7
  8. 8. Design Patterns with Sample Code kyrt @takekazuomi 8 名称 可用性 データ 管理 設計 実装 メッセージ ング 管理 監視 パフォーマンス スケーラビリ ティ 回復性 セキュリ ティ Code samples Competing Consumers Pattern ◯ ◯ Compute Resource Consolidation Pattern ◯ ◯ External Configuration Store Pattern ◯ ◯ ◯ Health Endpoint Monitoring Pattern ◯ ◯ ◯ Leader Election ○ ○ ○ Pipes and Filters Pattern ◯ ◯ ◯ Priority Queue Pattern ◯ ◯ ◯ Runtime Reconfiguration Pattern ◯ ◯ ◯ Static Content Hosting Pattern ◯ ◯ ◯ ◯ Valet Key Pattern ◯ ◯ ◯
  9. 9. kyrt @takekazuomi 9
  10. 10. Sample Codes サンプルコードをざっと見ていこう kyrt @takekazuomi 10
  11. 11. 前準備 •Web Platform Installer •Microsoft Visual Studio 2012/2013 •Windows Azure Tools for Microsoft Visual Studio • http://azure.microsoft.com/ja-jp/develop/net/ •Azure Trial • http://azure.microsoft.com/ja-jp/pricing/free-trial/ kyrt @takekazuomi 112014/2/26
  12. 12. Codes •細かいところがなかなか興味深い •概要を紹介 • パターンの内容自体はざっくり流して、細かいとこ ろを見る •注意 • Azure Storageのバージョンが2.1.xで古い。最新は、 4.2.0 (7/28 release) • Azure SDK が、2.2 (2.3 へ変換で動く) kyrt @takekazuomi 12
  13. 13. 場所 •Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications • http://msdn.microsoft.com/en-us/library/dn568099.aspx •サンプルコード • http://aka.ms/Cloud-Design-Patterns-Sample kyrt @takekazuomi 13
  14. 14. Cloud Design Patterns Examples.zip Competing Consumers Compute Resource Consolidation External Configuration Store Health Endpoint Monitoring Leader Election Pipes and Filters Priority Queue Runtime Reconfiguration Static Content Hosting Valet Key +Readme files kyrt @takekazuomi 14
  15. 15. Competing Consumers Pattern 競争する消費者のパターン kyrt @takekazuomi 15
  16. 16. Competing Consumers Pattern 図引用 http://msdn.microsoft.com/en-us/library/dn568101.aspx kyrt @takekazuomi 16 •競争する消費者のパターン
  17. 17. Outline •送る側は投げるだけ、処理する側はQueueか らひたすら読んで処理する •ワークロードの急増を平準化する •ワークロードを負荷分散させる •信頼性を改善する kyrt @takekazuomi 17
  18. 18. Project 構成 •CompetingConsumers.ccproj • Azure のRole 定義 •CompetingConsumers.Shared.csproj • Sender,Receiverの共通 •Receiver.csproj • 右のConsumer •Sender.csproj • 左のProducer kyrt @takekazuomi 18
  19. 19. コード構成 •2つのコンポーネントで構成 • Sender worker role • Service Bus Queueにメッセージを送信 • Receiver worker role • Queueからメッセージを読んで処理をする •Receiver worker は、2インスタンスが起動す るように初期構成 kyrt @takekazuomi 19
  20. 20. Service Bus Queue のUtility Class CompetingConsumers.Shared.QueueManager コンパクトな使用例 •Start() •Stop() •SendMessagesAsync() •ReceiveMessages() kyrt @takekazuomi 20
  21. 21. async Task QueueManager.Start() •Receiver.OnStart(), Sender.OnStart() の両方で呼ぶ • Queueの作成、起動される順番は不定 •Queueの作成処理は idempotent にする • 存在Check->作成-> MessagingEntityAlreadyExistsException は、 TraceWarning(エラーじゃない) •MessagingException • InnerException as WebException !=null の場合は、APIのエ ラー、 HttpStatusCode でエラーコードがわかる kyrt @takekazuomi 21
  22. 22. async Task QueueManager.Start() queueDescription.MaxDeliveryCount = 3; •Brokered Messaging: Dead Letter Queue • http://code.msdn.microsoft.com/windowsazure/Brokere d-Messaging-Dead- 22536dd8/sourcecode?fileId=76870&pathId=497121593 kyrt @takekazuomi 22
  23. 23. Compute Resource Consolidation Pattern コンピューティング リソースの統合 パターン 1.5章 P32 kyrt @takekazuomi 23
  24. 24. Compute Resource Consolidation Pattern 図引用 http://msdn.microsoft.com/en-us/library/dn589778.aspx kyrt @takekazuomi 24 コンピューティング リソースの統合 パターン
  25. 25. Outline •separation of concerns(SoC、関心の分離) の設計原則に沿って分割 •論理設計の簡素化 •複数のタスクを同一の計算ユニットで実行 する(=統合) •費用対効果の最適化 kyrt @takekazuomi 25
  26. 26. Project 構成 •ComputeResourceConsolidation.ccproj • Role定義 •ComputeResourceConsolidation.Worker.ccproj • WorkerRole kyrt @takekazuomi 26
  27. 27. コード構成 •WorkerRoleに全部ある •MyWorkerTask[12](CancellationToken ct) • サンプルのworker role task • Trace.TraceInformation して、Task.Delayしてloop • #1 は、30秒間隔で、#2は、5分間隔で動作 • CancellationToken で中断 • Task.Delay()のところにコードを入れる kyrt @takekazuomi 27
  28. 28. WorkerRole.Run() •Run() • バックグラウンド処理の一般例 • Task.WaitAny() して、Taskの完了待ち • AggregateExceptionでは、 OperationCanceledException は、キャンセル処理 (Stop)を実行 kyrt @takekazuomi 28
  29. 29. WorkerRole.Run():L61,L74,L98 •L61 catch (AggregateException ex) • キャンセルでここに来た場合でも、まだ動いている タスクがあることを忘れない(L71) • cts.IsCancellationRequested でない場合は、全部のタ スクをキャンセル(Stop)してる •L74, L98:Stop(TimeSpan.FromMinutes(5)) • L98、OnStop()の執行猶予は5分 • L74は任意で可 kyrt @takekazuomi 29
  30. 30. kyrt @takekazuomi 30
  31. 31. External Configuration Store Pattern 構成情報の外部ストア保存 パターン 1.8 P62 kyrt @takekazuomi 31
  32. 32. External Configuration Store Pattern 図引用 http://msdn.microsoft.com/en-us/library/dn589803.aspx kyrt @takekazuomi 32 構成情報の外部ストア保存 パターン
  33. 33. Outline •アプリケーションのデプロイと構成情報 (config)を分離 •アプリケーションの再デプロイなしに、構 成情報を変更 •アプリケーション間で構成情報を共有 kyrt @takekazuomi 33
  34. 34. コード構成 • WorkerRole.cs • WorkerRole Class • ExternalConfigurationManager.cs • 設定のCache 、取得 • 変更監視 • ExternalConfiguration.cs • ExternalConfigurationManagerのFactory Class • Lazy<>を利用した典型的な実装 • BlobSettingsStore.cs • 設定をBlobに保存するStore kyrt @takekazuomi 34
  35. 35. WorkerRole.OnStart():L43 •デフォルトの構成情報をUL • L85: パッケージに含まれるので上書 •構成上の変更イベントをSubscribe • L52: ExternalConfiguration.Instance.Changed.Subscribe kyrt @takekazuomi 35
  36. 36. WorkerRole.OnStop():L65 • Blogにあげた構成情報ファイルを削除 • DeleteConfigurationBlob():L94 • コンテナごと削除 • デプロイ後に構成情報を変更した場合 • 再デプロイではパッケージに含まれる構成情報に戻る • 構成情報を共有している場合はupload, deleteのタイミングを検 討 • Version Checkして「新しければULで削除はしない」という実装 もある(ETagでは不可) kyrt @takekazuomi 36
  37. 37. ISettingsStore •サンプルコードには、本のP65と違って Update() が無い • 問題ないというか無い方が良い kyrt @takekazuomi 37 public interface ISettingsStore { Task<string> GetVersionAsync(); Task<Dictionary<string, string>> FindAllAsync(); }
  38. 38. BlobSettingsStore •async Task<string> GetVersionAsync() :L40 • FetchAttributesAsync()はHEAD を使う、Bodyの転送が 伴わないのでETag は効率的 • ETagだと同一性の判断ができても新旧の区別が不可 kyrt @takekazuomi 38
  39. 39. おまけ •Azure Files • 同一データセンター内ならSMB 2.1 でマウント可 • net use z: myaccount.file.core.windows.netmyshare /u:myaccount StgAccKey== • データセンター外からでもAzCopy 2.4 以降でcopy可 • Storage Client library 4.0 からサポートあり • Microsoft Azure Files サービスの概要 • http://blogs.msdn.com/b/windowsazurej/archive/2014/06/05/ blog-introducing-microsoft-azure-file-service.aspx kyrt @takekazuomi 39
  40. 40. Health Endpoint Monitoring エンドポイントの健康監視 1.11 P82 kyrt @takekazuomi 40
  41. 41. Health Endpoint Monitoring 図引用 http://msdn.microsoft.com/en-us/library/dn589789.aspx kyrt @takekazuomi 41 エンドポイントの健康監視
  42. 42. Outline •サービス監視でhttpのエンドポイントを使う 方法 •専用のエンドポイントを作成することで、 効果的に監視 •ネットワーク的な遅延、応答速度 •SSL証明書の有効期限 kyrt @takekazuomi 42
  43. 43. コード構成 •HealthEndPointMonitoring.Web.csproj • Endpointを実装してるASP.NET •HealthEndpointMonitoring.Cloud.ccproj • Azure Project kyrt @takekazuomi 43
  44. 44. Leader Election Pattern リーダー選出 パターン 1.13 P99 kyrt @takekazuomi 44
  45. 45. kyrt @takekazuomi 45 図引用 http://msdn.microsoft.com/en-us/library/dn568104.aspx
  46. 46. Outline •Role内の1つのインスタンスに管理的なJob を委託 •障害時には再度選出が行われリーダーが移 動 •Blobのリースを利用して Mutex を実装 •Apache Zookeeper などの外部サービスを 使った実装も検討する kyrt @takekazuomi 46
  47. 47. コード構成 •DistributedMutex.csproj • 本体 •LeaderElection.ccproj • Azure Project •LeaderElection.Tests.csproj • Unit Test •LeaderElection.Worker.csproj • Worker Role kyrt @takekazuomi 47
  48. 48. BlobLeaseManager •L51: RetryPolicy = new LinearRetry(TimeSpan.FromSeconds(1), 3); • RetryPolicy は、 LinearRetry •L76,L138 • Debugには、StorageExceptionの StorageExtendedErrorInformationと、RequestResultが 便利 kyrt @takekazuomi 48
  49. 49. Pipes and Filters Pattern パイプとフィルターのパターン 1.15 P133 kyrt @takekazuomi 49
  50. 50. kyrt @takekazuomi 50 図引用 http://msdn.microsoft.com/en-us/library/dn568100.aspx
  51. 51. Outline •処理をパイプで繋いでデータを流す •各処理は分割し再利用しやすい •インスタンスを増やす、パイプを増やすで、 スケール kyrt @takekazuomi 51
  52. 52. Project構成 • PipesAndFilters.Cloud.ccproj • Azure Project • InitialSender.csproj • データ送信のWorkerRole • PipeFilterA.csproj • データのフィルターAのWorkerRole • PipeFilterB.csproj • データのフィルターBのWorkerRole • FinalReceiver.csproj • 最後にデータを受けるWorkerRole kyrt @takekazuomi 52
  53. 53. コード構成 •QueueManager.cs • Competing Consumers の QueueManagerとほとんど同じ だけどちょっと違う。参考にするときは両方見ると良い •ServiceBusPipeFilter.cs • Start()は、idempotent にする • OnPipeFilterMessageAsync()がフィルター本体 • フィルターの関数 Func<BrokeredMessage, Task<BrokeredMessage>>を受け取って、結果のMesasgeを、 out queueに送る kyrt @takekazuomi 53
  54. 54. kyrt @takekazuomi 54
  55. 55. 終わりに kyrt @takekazuomi 55
  56. 56. •Queueが全部 Service Bus Queue だけど、 Storage Queue 使おうよ •Special Thanks • Source Han Sans • https://github.com/adobe-fonts/source-han-sans/ kyrt @takekazuomi 56
  57. 57. おまけ 祝、Storage Client Library 4.2.0 がリリースされました kyrt @takekazuomi 57
  58. 58. Windows Azure Storage 4.2.0 (1) 2014/7/28 リリース、変更内容 • All: リソース名のバリデーションを行う NameValidator class を追加 • All: LogRecord の RequestUrl で HTML4 decoded が間違っていた BUGを 修正 • All: 許可された最大実行時間は24 日 • All: log line error の文言変更 • All (WP): Windows Phoneアプリケーションをストアに提出するさいに必 要な認証に失敗する問題を修正 • All (WP): Windows Phone 8.1 Silverlight support を追加 kyrt @takekazuomi 58
  59. 59. Windows Azure Storage 4.2.0 (2) • Blobs: blob snapshots の SAS tokens をサポート • Blobs: CloudBlobClient.DefaultDelimiter の “” を禁止 • https://github.com/Azure/azure-storage- net/commit/905e9f260b8c673988cee9903092af7c71517270#diff- 90cd11bb9518ee4bff77205ad15cf726R218 • Queues (RT): queue に、 message を追加するときに、 messagettl と visibilitytimeout の query parameters が 正しく設定されない問題を修正 kyrt @takekazuomi 59
  60. 60. Windows Azure Storage 4.2.0 (3) •Tables: CloudTable.DeleteIfExists 、 async 版は、 Table が存在しない場合に、exceptionではな く false を返す • https://github.com/Azure/azure-storage- net/releases/tag/v4.2.0 • http://www.nuget.org/packages/WindowsAzure.Storage/ 4.2.0 kyrt @takekazuomi 60
  • Katsutoshi0813

    Dec. 2, 2014
  • NakamuraTakashi

    Sep. 20, 2014
  • onflow1

    Aug. 17, 2014
  • ChieArai

    Aug. 5, 2014
  • HiromichiYukawa

    Aug. 4, 2014
  • polidog

    Aug. 3, 2014
  • furuya02

    Aug. 1, 2014
  • nakaharatm

    Aug. 1, 2014
  • kmikami

    Aug. 1, 2014
  • KoichiNakao

    Jul. 31, 2014
  • koujimikami5

    Jul. 30, 2014
  • NobuhiroNakayama

    Jul. 30, 2014
  • kazutada

    Jul. 30, 2014
  • yocchi

    Jul. 30, 2014

「クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き」のサンプルコードを紹介します http://ec.nikkeibp.co.jp/item/books/P98330.html

Views

Total views

57,852

On Slideshare

0

From embeds

0

Number of embeds

2,965

Actions

Downloads

46

Shares

0

Comments

0

Likes

14

×