enterprise cloud design pattern 大量データ処理アーキテクチャの構築

39
上坂貴志 | ACE 株式会社NEXTSCAPE

Upload: uesaka

Post on 01-Dec-2014

1.836 views

Category:

Software


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

上坂貴志 | ACE株式会社NEXTSCAPE

Page 2: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

本日の内容

1. 前編の振り返り

2. ACEのご紹介

3. Cloud Design Pattern とは

4. 今回の大量データ処理の概要

5. Microsoft Azure におけるPaaSとScaling

6. Scalingを前提とした大量データ処理用アーキテクチャ

7. クラウド汎用パターン あらゆるプロジェクトで使用推奨

Page 3: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

1.前編の振り返り

Page 4: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

トリニティで Cloud Design Pattern を支援

• 技術観点 3つと実現指向のアーキ・トレンド “トリニティ”

2014 (C) Arichika Taniguchi, All rights reserved.

• 入力と処理、出力の分割

• 長時間ロードの分割非同期

• 疎結合での負荷移動の容易さ

• 負荷単位でのSLAと制御運用性

• トランザクションの整合性

• 処理中の緩い整合性の許容完全性

Business

Architect

Code

Architect

Infra(Model)

Architect

Science

Page 5: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

2.ACEのご紹介

Page 6: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure パートナーコンソーシアム

Azure Council Experts(略称:ACE/エース)アジュール評議会は、Microsoft Azure を利用した技術やサービスを提供するリーディングカンパニーが集結し、普及ならびに技術者の育成、ノウハウの共有などでコラボレーションを展開するパートナーコンソーシアム。

顧客企業・団体技術者

一般社団法人 Azure Council Experts について

http://a-c-e.biz/

Page 7: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure パートナーコンソーシアム

【書籍の出版】

【ACE加盟企業による定例会&ワーキンググループの活動の様子】

Azure Council Experts 著日本マイクロソフト 監修発行:日経BP社編集:日経SYSTEMSページ数:176Pターゲット:アーキテクト、システムエンジニア

一般社団法人 Azure Council Experts について

Page 8: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

スピーカー自己紹介

• 株式会社ネクストスケープ(ACE理事企業)Microsoft Partner of the Year 2012 Windows Azure パートナー アワード 受賞(日本13,000事業所中)

Microsoft Partner of the Year 2013Windows Azure パートナー アワード(System Integrator) 受賞(日本14,000事業所中)

2013 Microsoft Worldwide Partner AwardCloud Partner of the Year 世界2位(世界3,000事業所中)

こんな会社です• 配信ソリューション

• Microsoft Azure導入支援

• DRMソリューション(PlayReady)

• システム・インテグレーション

• Sitecore(CMS)導入支援

Page 9: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

スピーカー自己紹介

• 上坂貴志(うえさかたかし)株式会社ネクストスケープでアーキテクトやってます。

東京出身のおっさんです。

Twitter, Blogやってません。更新めんどい。

.NET, Java, PHP, JavaScriptなど使います。

最近の活動

第1回 Build Insider OFFLINE(登壇)

Cloud Days Tokyo 2014 Spring(MicrosoftブースにてAzure紹介)

Codezineにて記事公開(Visual Studio Online)

InfoQでDDD連載始めました! .NETでドメイン駆動開発~ValueObject 前編、後編~

Page 10: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

3.Cloud Design Pattern とは

Page 11: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Cloud Design Pattern とは

http://msdn.microsoft.com/en-us/library/dn568099.aspx

24のデザインパターン

10のガイダンス

コードサンプル

Page 12: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Cloud Design Pattern とは

10のガイダンス

24のデザインパターン

可用性 管理と監視

データ管理 パフォーマンスとスケーラビリティ

設計と実装 弾力性

メッセージング セキュリティ

⇒ 8つのカテゴリに分類

Page 13: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

10のガイダンス

非同期メッセージング入門

オートスケールガイダンス

キャッシュガイダンス

アプリケーション分割ガイダンス

データ整合性入門

データパーティション分割ガイダンス

データレプリケーション&同期ガイダンス

インストルメンテーションとテレメトリガイダンス

複数データセンター展開ガイダンス

サービスメータリングガイダンス

Cloud Design Pattern とは

Page 14: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

24のデザインパターン

キャッシュアサイドパターン

回路ブレーカーパターン

補正トランザクションパターン

競合する消費者パターン

リソース統合計算パターン

コマンドクエリ分離パターン(CQRS)

イベントソースパターン

外部構成ストアパターン

フェデレーション Idパターン

ゲートキーパーパターン

エンドポイントヘルス監視パターン

インデックステーブルパターン

リーダー選挙パターン

マテリアライズドビューパターン

パイプとフィルターパターン

優先度キューパターン

キューベースのロード平準化パターン

リトライパターン

実行時再構成パターン

スケジューラエージェントスーパーバイザーパターン

Shardingパターン

静的コンテンツホスティングパターン

抑制パターン

係員付きパーキングサービスキーパターン

Cloud Design Pattern とは

Page 15: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

4.今回の大量データ処理の概要

Page 16: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

• 楽曲データを配信用に加工する処理(パッケージング)

今回の大量データ処理の概要

楽曲コンテンツ エンコード処理 トランスコード処理 暗号化処理 アップロード

• エンコード処理にかかる処理時間1曲あたり、2分半~3分半。これが120万曲。

120万 x 3分 = 6万時間!(2500日)

Page 17: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

5.Microsoft Azure におけるPaaSとScaling

Page 18: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure におけるPaaSとScaling

• PaaSとは、アプリケーションが稼動するための基盤(Platform)がサービスとして提供されたもの。

アプリケーション

OS

仮想化

サーバー

ストレージ

ネットワーク

ミドルウェア

アプリケーション アプリケーション

オン・プレミス IaaS PaaS

Runtime

データ

OS

仮想化

サーバー

ストレージ

ネットワーク

ミドルウェア

Runtime

データ

OS

仮想化

サーバー

ストレージ

ネットワーク

ミドルウェア

Runtime

データ

アプリケーション

SaaS

OS

仮想化

サーバー

ストレージ

ネットワーク

ミドルウェア

Runtime

データ

ユーザーが管理

クラウドベンダーが管理

ユーザーが管理

ユーザーが管理

クラウドベンダーが管理

クラウドベンダーが管理

Page 19: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure におけるPaaSとScaling

Scalingとは要求される作業量に応じて性能・処理能力を増減すること。

Scalingには垂直スケール(ScaleUp)と水平スケール(ScaleOut)の2つがある。

Scale

Up

ScaleOut

Page 20: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure におけるPaaSとScaling

• Microsoft Azure の場合PaaSに対してスケールの例

インスタンス数(PaaS数)を入力して保存するだけ!(手動によるスケール)

Page 21: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure におけるPaaSとScaling

Microsoft AzureにおけるPaaS

• クラウドサービスという名称

• VisualStudioから簡単にデプロイ可能• JenkinsなどのCIツールを使用したデプロイも可能(Azure Powershell使用)

• WebRole(Web用)と、WorkerRole(バッチ用)の2種類をホスト

• StagingとProduction環境• Stagingにデプロイして稼働確認→Productionへスワップ!(ボタン一発)

• リモートデスクトップで接続可能

Page 22: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

Microsoft Azure におけるPaaSとScaling

Microsoft AzureにおけるScaling

• Webの管理画面から手動でインスタンス数を増減可能

• オートスケールを設定可能• CPU負荷に応じて増減• 参照するメッセージQueueの数に応じて増減• スケジュール設定で増減

Page 23: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

6.ScaleOutを前提とした大量データ処理用アーキテクチャ

Page 24: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

処理A 処理B

• Scalingを用いて大量に並列処理をするために並列処理と並列処理のつなぎにQueueを使用する

ScaleOutを前提とした大量データ処理用アーキテクチャ

処理A用のメッセージ Queue 次処理用のメッセージ Queue

Azure の Queueは2種類

Storage Queue最大メッセージ サイズ:64 KBメッセージの最大 TTL:7日間キューの最大数:無制限

Service Bus Queue最大メッセージ サイズ:256 KBメッセージの最大 TTL:無制限キューの最大数:10,000

Page 25: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ

• Queue数をベースにオートスケール

AutoScale

PaaS

メッセージ Queue

Queue数によるスケール設定

1インスタンス当たりに処理するQueueの数• 増減しきい値に相当

総インスタンス数のMin値、Max値

1度に増減するインスタンス数

AutoScale

PaaS

メッセージ Queue

Page 26: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ

• タスクの統合

楽曲コンテンツ エンコード処理 トランスコード処理 暗号化処理 アップロード

負荷高 負荷低 負荷低

楽曲コンテンツ

エンコード処理トランスコード処理

暗号化処理 アップロード

別処理

Page 27: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ

• 最終形

楽曲コンテンツ エンコード処理トランスコード処理

暗号化処理

アップロード

メッセージ Queue

Queue投入 メッセージ Queue

AutoScale

AutoScale

Page 28: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ

使用した Cloud Design Pattern

競合する消費者パターンスループット、スケーラビリティと可用性の向上と、作業負荷を最適化するために同時に複数のメッセージを処理することを可能にする

パイプとフィルターパターンタスク要素のデプロイとスケーリング処理を別々に実行することにより、パフォーマンス、スケーラビリティ、および再利用性を向上できる

リソース統合計算パターン計算リソースの使用率を高め、クラウドでホストされるアプリケーションの処理の実行に関連するコストと管理オーバーヘッドを減らすことができる

Page 29: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ• 競合する消費者パターン

• 概要• スループット、スケーラビリティと可用性の向上と、作業負荷を最適化するために同時に複数のメッセージを処理することを可能にします。

• 戦略• クラウドで実行されるアプリケーションが多数の要求を処理することを可能にします。

• 一般的な手法は、各要求を同期的に処理するのではなく、要求をメッセージングシステムを通して他の非同期にサービスに渡すことです。

• この戦略は、要求の処理中、アプリケーションのビジネスロジックがブロックされないようにするのに役立ちます。

メッセージ Queue

アプリーケーションインスタンスメッセージ生成

サービスインスタンスメッセージ処理

Page 30: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

パイプライン

ScaleOutを前提とした大量データ処理用アーキテクチャ• パイプとフィルターパターン

• 概要• 複雑な処理を実行するタスクを再利用可能な一連の個別要素に分解します。このパターンはタスク要素をデプロイとスケーリング処理を別々に実行することによってパフォーマンス、スケーラビリティ、および再利用性を向上できます。

• 戦略• 1 つのタスクを実行するそれぞれの個別のコンポーネント (またはフィルター) のセットに処理を分解します。

• 各コンポーネント(またはフィルター)が受信し、出力するデータの形式を標準化することで、パイプライン内で複数のコンポーネント(またはフィルター) を組み合わせることができる。

メッセージ Queue フィルター メッセージ Queue フィルター

Page 31: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

ScaleOutを前提とした大量データ処理用アーキテクチャ• リソース統合計算パターン

• 概要• 複数のタスクまたは操作を 1 つの計算ユニットに統合します。このパターンはコンピューティングリソースの使用率を増加し、クラウドでホストされるアプリケーションでの処理を実行するために必要なコストと管理オーバーヘッドを削減できます。

• 戦略• タスクは、環境によって提供される機能に基づいて、様々な基準や機能に関連したコストに応じてグループ化することができます。

• 一般的なアプローチは、そのスケーラビリティ、有効期間、および処理の要件に関して同様のプロファイルを持っているタスクを探します。

• これらのタスクを一つのグループの単位としてスケールできます。

Task A

Task E

計算ユニット

計算ユニット

Task B

計算ユニット

Task C

計算ユニット

Task D

計算ユニット

Task A

Task E

計算ユニット

計算ユニット

Task B

Task CTask D

Page 32: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

7.クラウド汎用パターンあらゆるプロジェクトで使用推奨

Page 33: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

クラウド汎用パターンあらゆるプロジェクトで使用推奨

• Retryパターン

• 概要

• クラウドでは一時的な障害は珍しくない。障害発生時にその影響を最小限に抑える。

• 戦略• 障害を示すエラーが一時的でない、または繰り返し要求しても成功する可能性が無い場合、アプリケーションは操作を中止し、適切な例外を報告する必要がある。 (例:資格情報が無効なため、何度挑戦しても失敗する)

• 報告された例外が通常は起こりえないものや極希少なものの場合、極めて異常な事情によってその例外が引き起されている可能性がある。(例:ネットワークパケットの破損)このような場合は同一の障害が繰り返される可能性は低いし、再要求は恐らく成功するので直ちに再試行を行う。

• 障害の原因が一般的な接続の問題や接続先がビジー状態によるものの場合、接続時の問題が解決するか、接続先のタスクがクリアされるまで短時間の待ち時間が必要な場合がある。このような場合、アプリケーションは要求を再試行する前に適切な時間を待つ必要がある。

アプリケーション サービス

1

500

2

500

3

200

Page 34: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

クラウド汎用パターンあらゆるプロジェクトで使用推奨

• Retryパターン実装例

private int retryCount = 3;

public async Task OperationWithBasicRetryAsync(){

int currentRetry = 0;

for (; ;){

try{

// 外部サービスの呼び出し.

await TransientOperationAsync();

// Return or break.break;

}catch (Exception ex){

Trace.TraceError("Operation Exception");

currentRetry++;// 一時的なエラーか判定。

if (currentRetry > this.retryCount || !IsTransient(ex)){

// 一時的なエラーではない場合、リトライしない

throw;}

}

// リトライの待機。

Await.Task.Delay();}

}

// リモートサービス非同期呼び出しメソッド.

private async Task TransientOperationAsync(){

...}

private bool IsTransient(Exception ex) {

// 例外が一時的なものか判定// 例外のタイプのチェックだけでよい場合もあるが、時には例外のプロパティ値のチェックも必要

if (ex is OperationTransientException)return true;

var webException = ex as WebException;if (webException != null){

// web exceptionのStatusが以下のStatus値のいずれかの場合、一時的なエラーとみなす

return new[] { WebExceptionStatus.ConnectionClosed,WebExceptionStatus.Timeout,WebExceptionStatus.RequestCanceled }.

Contains(webException.Status);}

// 追加の例外チェックはここに実装

return false;}

Page 35: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

クラウド汎用パターンあらゆるプロジェクトで使用推奨

• でもAzureのSDKを使用する場合は先ほどのような実装はしませんStorageアクセスの場合のRetry実装例

• 最初からRetryの仕組みが用意されています。

CloudStorageAccount storageAccount = new CloudStorageAccount(new StorageCredentials(Configs.StorageAccountNameSupply, Configs.StorageAccountKeySupply), true);var client = storageAccount.CreateCloudBlobClient();client.RetryPolicy = new Microsoft.WindowsAzure.Storage.RetryPolicies.ExponentialRetry(TimeSpan.FromSeconds(2), Configs.RetryMaxCount);

using Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;

・・・var sqlConn = new SqlConnection(sqlConnString);var policy = new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryCount: 3, initialInterval: TimeSpan.FromSeconds(30), increment: TimeSpan.FromSeconds(30));sqlConn.OpenWithRetry(policy);

Microsoft Azure SQLの場合のRetry実装例• Enterprise Library - Transient Fault Handling Application Block - Windows Azure SQL Database integration

• 拡張メソッドと実装済みの戦略が提供されています。

Page 36: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

クラウド汎用パターンあらゆるプロジェクトで使用推奨

エラーNo エラー内容

4050110929

サービスは現在ビジー状態

10928 同時要求の最大制限が 180 を超えたため要求を拒否

10053 サーバーから結果を受信するときにトランスポート レベルのエラーが発生。クライアントが切断

10054 サーバーから結果を受信するときにトランスポート レベルのエラーが発生。サーバーが切断

10060 Socket接続エラー。サーバーが見つからない

40197 要求の処理中にソフトウェアやハードウェアのアップグレードのためのサービス停止、ハードウェア エラー、またはその他のフェールオーバーの問題が発生

40540 要求処理中にエラーに遭遇。再試行を。

40613 サーバー上のデータベースが使用不可

233 未サポートバージョンのSQLServerへ接続しようとした;サーバービジーで新しい接続を生成できなかった;メモリ不足で新しい接続を生成できなかった

64 接続は成功したが、ログインに失敗した

20 接続先のSQLServerインスタンスはencryptionをサポートしていない

SqlDatabaseTransientErrorDetectionStrategyが一時的なエラーである、と判定するエラーの種類

※TimeoutException も一時的なエラーと判定される

Page 37: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

• 外部構成ストアパターン

• 概要

• 複数のアプリケーションやインスタンスで構成設定を共有する。

• 戦略• 外部記憶装置に構成情報を格納し、迅速かつ効率的に読み取りおよび設定を更新するために使用できるインターフェイスを提供する。

• 外部ストアの種類は、アプリケーションのホスティング、ランタイム環境に依存する。

• クラウドでホストされているシナリオでは通常、クラウド・ベースのストレージサービス。もしくはデータベース、他のシステムになる可能性もある。

クラウド汎用パターンあらゆるプロジェクトで使用推奨

Application

外部構成ストアApplication

Application

クラウド・ストレージ

データベース

代替オプション

Page 38: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築

クラウド汎用パターンあらゆるプロジェクトで使用推奨

Page 39: Enterprise cloud design pattern 大量データ処理アーキテクチャの構築