Más contenido relacionado La actualidad más candente (19) Similar a JAZUG クラウドデザインパターンのコードを覗く (20) JAZUG クラウドデザインパターンのコードを覗く3. 自己紹介
近江 武一
JAZUG Azure Storage 担当(自称)
Microsoft MVP for Azure
kyrt @takekazuomi 3
kyrt.in
github.com/takekazuomi
white paper
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
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 ◯ ◯ ◯
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
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. 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
19. コード構成
•2つのコンポーネントで構成
• Sender worker role
• Service Bus Queueにメッセージを送信
• Receiver worker role
• Queueからメッセージを読んで処理をする
•Receiver worker は、2インスタンスが起動す
るように初期構成
kyrt @takekazuomi 19
20. Service Bus Queue のUtility Class
CompetingConsumers.Shared.QueueManager
コンパクトな使用例
•Start()
•Stop()
•SendMessagesAsync()
•ReceiveMessages()
kyrt @takekazuomi 20
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
34. コード構成
• WorkerRole.cs
• WorkerRole Class
• ExternalConfigurationManager.cs
• 設定のCache 、取得
• 変更監視
• ExternalConfiguration.cs
• ExternalConfigurationManagerのFactory Class
• Lazy<>を利用した典型的な実装
• BlobSettingsStore.cs
• 設定をBlobに保存するStore
kyrt @takekazuomi 34
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
48. BlobLeaseManager
•L51: RetryPolicy = new
LinearRetry(TimeSpan.FromSeconds(1), 3);
• RetryPolicy は、 LinearRetry
•L76,L138
• Debugには、StorageExceptionの
StorageExtendedErrorInformationと、RequestResultが
便利
kyrt @takekazuomi 48
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. コード構成
•QueueManager.cs
• Competing Consumers の QueueManagerとほとんど同じ
だけどちょっと違う。参考にするときは両方見ると良い
•ServiceBusPipeFilter.cs
• Start()は、idempotent にする
• OnPipeFilterMessageAsync()がフィルター本体
• フィルターの関数 Func<BrokeredMessage,
Task<BrokeredMessage>>を受け取って、結果のMesasgeを、
out queueに送る
kyrt @takekazuomi 53
56. •Queueが全部 Service Bus Queue だけど、
Storage Queue 使おうよ
•Special Thanks
• Source Han Sans
• https://github.com/adobe-fonts/source-han-sans/
kyrt @takekazuomi 56
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. 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. 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
Notas del editor 9個のサンプルがある 10個のディレクトリにサンプルが入っている 648
最初だけ Brokered Messaging: Dead Letter Queue
http://code.msdn.microsoft.com/windowsazure/Brokered-Messaging-Dead-22536dd8/sourcecode?fileId=76870&pathId=497121593
MessagingEntityAlreadyExistsExceptionと、response.StatusCode != HttpStatusCode.Conflict の両方みてるクレイジー!
648
最初だけ 648
648
648
648
https://github.com/Azure/azure-storage-net/commit/905e9f260b8c673988cee9903092af7c71517270#diff-90cd11bb9518ee4bff77205ad15cf726R218 https://github.com/Azure/azure-storage-net/commit/905e9f260b8c673988cee9903092af7c71517270#diff-90cd11bb9518ee4bff77205ad15cf726R218