- 久しぶりの成本さん、サーベイアプリケーションのデモから始まりました。マルチテナントアプリケーションのお話。
課題と必要性
- 運用コスト、
- コードベース管理、
- テナント間の干渉、
- カスタマイズ要求、
- SLA
上記をどのように解決するかが、アーキテクチャの選択になる
- ストレージの選択、パーティショニング
- データスキーマの拡張性
- パーティショニング
- スケーラビリティ
- プロビジョニングの必要性
- ユーザ認証の選択
- 管理とモニタリング
- UIの拡張性
- 課金
上記についての説明をしてきます。
「ストレージの選択」
- IaaS vs PaaS 比較の説明 よくまとまっています。利用用途に合わせて選択が必要
- SQL vs NoSQL 冗長化OR冗長の許容、
NoSQLの選択、
- KeyVaues
- Document Database
- Column family database(HBase)
- Graph database(Neo4j)
ハイブリッドアプローチ(複数の選択)もよくあるパターンである。
ストレージノパーティショイニング
- 高分離レベル
- 低分離レベル
データスキーマの拡張
- テナント毎に別テーブル
- 複数スキーマを持つ単一テーブル
- 単一テーブルと拡張用別テーブル
パーティショニング
- Webロール・ワーカーロール
- キュー
- サービスバス
- キャッシュ
インスタンス境界の設計
- マルチインスタンス・シングルテナント
- シングルインスタンス・マルチテナント
- マルチインスタンス・マルチテナント
境界の設計
- コスト
- コードベース管理
- SLA
- スケーラビリティ
- リソースの制限
- 認証と承認
- カスタマイズ
- ALM
- 課金
- サードパーティーコンポーネント
- レギュレーション
キャッシュのパーティショニング
- Named Cacheによる分離
- Regionによる分離
- インスタンス共有
- ストレージ分離戦略
Web・ワーカーロールのパーティショニング
- 高分離レベル
- 低分離レベル
Webリクエストのルーティング
- URLパス
- サブドメイン
- カスタムドメイン名のマッピング
- 認証、SSLプロビジョニングへの影響
Queueのパーティショニング
- 共有キュー
- 標準、プレミアムキュー
- テナント毎キュー
Workerロール
- Webロールの負荷軽減
- Loadの平準化
- スケーラビリティ
- タスクのアサイン
- キューによる優先度コントロール
- ペシミスティックVSオプティミスティック同時アクセス制御
- プログレストラッキング(進捗を考慮したキューのハンドル)
スケーラビリティ
- 非同期コール
- 小さいインスタンスをSO
- 自動化(wasabi)
- スケーラビリティユニット(アーキテクチャサブセット)
- テストによるボトルネックの削除
ストレステスト
- Visual Studio Load Test
- 高負荷による例外の発見(キャッシュクライアント、存在確認など)
- ボトルネックの発見
プロビジョニング
- リソースのセットアップ
- コンフィグレーション
- カスタマイズ
- 認証方式
- プロセスの自動化
ユーザ認証
- STSとのSSO
- 1stパーティーIDP
- 3rdパーティーIDP
管理とモニタリング
- テスタビリティ
- スクリプトによる管理の自動化
- コンフィグレーション(サービスコンフィグレーションへの移管)
- システム診断
- エンドポイントの保護
その他の考慮事項
- サブスクリプションモデル
- 課金
- SLA
- Throtting
- On-boarding プロセス
まとめ
- データタイプに応じて適切なストレージを選択
- パーティショニング戦略
- Workerロールの実装と考慮事項
- スケーラビリティ
Developing Multi-tenant Applicaitons in the Cloud dowonload
WAG.codeplex.com