「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 参考から目次を抜いて体系化した。
- まだ、ごく一部しか書けていない(オンデマンドで追記予定)。
詳細 †
以下のような立て付けになっている。
アーキテクチャ スタイル †
ビッグ コンピューティング †
Azure Batch (HPC) 推しらしい。
イベントドリブン アーキテクチャ †
- イベント ストリーム モデル
- イベントがログに書き込まれる。
- クライアントはいつでも参加でき、イベントを再生
- ストリーム内でクライアントの位置を進めるのは、クライアントの役割
マイクロサービス †
n 層アプリケーション †
アプリケーションを論理層と物理層に分離
Web キューワーカー †
- Webロール、Workerロール
- 必要に応じて、キュー
設計原則 †
自動修復機能の設計 †
- その他
- フォールト挿入でテストする。
- Chaos エンジニアリングを利用する。
すべてを冗長化 †
- 複数のリージョンにデプロイ
- geo レプリケーション
- Traffic Manager
調整を最小限に抑える †
- トランザクション(ACID特性)以外の実現方法を検討する。
スケールアウトのための設計 †
垂直方向・水平方向にスケールできるように設計
- 垂直方向
システム、アプリで構成する。
- ボトルネックの特定、ワークロードの分解など。
- タスクのオフロード(バックグラウンド・ジョブ化)
- 水平方向
クラウド機能で構成する。
- サーバー・ステートレス
- スケールアウト・スケールイン
- 自動スケール
パーティション分割による制限の回避 †
スケール・アップに限界があるので、パーティション分割。
- システム
- データベース
- キューまたはメッセージ バス
- App Service Web アプリ
操作に合わせた設計 †
運用チームが必要なツールを得られるようにアプリケーションを設計
管理対象サービスの使用 †
なるべく、PaaS / FaaS, SaaSを選択。
ジョブに最適なデータ ストアの使用 †
- その他
- 開発チームのスキルセット
- コンテキスト境界を確認(DDD)
改良を見込んだ設計 †
SOAっぽい(疎結合)。
- 高凝集と疎結合
- サービスを個別にデプロイ
- 共通機能を専用のサービスにオフロード
- ゲートウェイにはドメイン ナレッジを実装しない
- ドメイン ナレッジをカプセル化
- オープン インターフェイスを公開
- 非同期メッセージングを使用
ビジネス ニーズに合わせた構築 †
- 成長に対応可能な計画とコストの管理
- 目標復旧時間 (RTO)、目標復旧時点 (RPO)、最大許容停止時間 (MTO)
- サービス レベル アグリーメント (SLA) とサービス レベル目標 (SLO)
- 要件
- 機能要件と非機能要件
- ワークロード別に分けて要件を判断
- ビジネス ドメインを中心にアプリケーションをモデル化(DDD)
技術選定 †
コンピューティング サービスの選択 †
適切なモンを使えと。
データ ストアの選択 †
適切なモンを使えと。
※ 多言語パーシステンスと言うらしい。
負荷分散サービスの選択 †
負荷分散については、NLBの項が参考になる。
(NLBを使えとは言っていない)
メッセージング サービスの選択 †
色々あるらしい。
- Azure Service Bus
- Event Grid
- Event Hubs
ベスト・プラクティス †
API 設計 †
- データ処理
(ネットワーク帯域幅と処理能力の有効活用)
- フィルター or ページング処理
- HATEOAS
- バイナリ リソースの部分的な応答
API 実装 †
自動スケール †
水平方向のスケーリング
バックグラウンド ジョブ †
- トリガ
- イベント ドリブン トリガー
- スケジュール ドリブン トリガー。
キャッシュ †
- 注意点
- 高可用性の実装、スケーラビリティ・パフォーマンスの向上
- コンカレンシーの管理、最終的な整合性
- データをキャッシュするタイミングを決める
- データを効率的にキャッシュする方法を決める
- 非常に動的なデータをキャッシュする
- キャッシュ内のデータの有効期限を管理する
- クライアント側キャッシュ内のデータを無効にする
Content Delivery Network (CDN) †
- ルーティングとバージョン管理
- キャッシュ制御
- セキュリティ
- CDN フォールバック
データのパーティション分割 †
- パーティションの設計
- 水平的パーティション分割 (行方向、シャーディング)
- 垂直的パーティション分割(列方向)
- 機能的パーティション分割(機能的)
データのパーティション分割戦略 (サービスごと) †
- Azure SQL Database のパーティション分割
- Azure Table Storage のパーティション分割
- Azure Blob Storage のパーティション分割
- Azure Queue Storage のパーティション分割
- Azure Service Bus のパーティション分割
- Cosmos DB のパーティション分割
- Azure Search のパーティション分割
- Azure Cache for Redis のパーティション分割
- Azure Service Fabric のパーティション分割
- Azure Event Hubs のパーティション分割
デプロイ スタンプ †
- データ ストアを含め、アプリケーション コンポーネントの複数の独立したコピーをデプロイする。
- 個々のコピーは "スタンプ" と呼ばれ、"サービス ユニット" または "スケール ユニット" と呼ばれる場合もある。
- このアプローチにより、
- 顧客データを分離でき、
- ソリューションのスケーラビリティが向上し、
- インスタンスを複数のリージョンにデプロイすることが可能となる。
- 自動化された完全に反復可能なデプロイ プロセスを使用する
監視と診断 †
- 正常性の監視
- 可用性の監視
- パフォーマンスの監視
- セキュリティの監視
- SLA の監視
- ユーザー操作の監査
- 利用状況の監視
- 問題追跡
- 操作のトレース
- リリースのデバッグ
- 監視と診断のパイプライン
- 監視と診断のデータ ソース
- アプリケーションのインストルメント化
- データの収集と保存
- データの分析と問題の診断
- データの視覚化とアラートの生成
特定のサービスの再試行ガイダンス †
一時的な障害の処理 †
- 標準の再試行機構が存在するかどうかを調べる。
- 操作を再試行するのが妥当かどうかを判断する。
- 適切な再試行回数と間隔を決める。
- アンチパターンを避ける。
- 再試行の戦略と実装をテストする。
- 再試行ポリシーの構成を管理する。
- 一過性の障害と一過性ではない障害を記録、追跡する。
- 絶えず失敗する操作に対処する。
チューニング †
分散トランザクション †
複数のバックエンド サービス †
イベントのストリーミング †
アンチ・パターン †
- ビジー状態のデータベース
- ビジー状態のフロント エンド
- 頻度の高い I/O
- 余分なフェッチ
- 不適切なインスタンス化
- モノリシック永続化
- キャッシュなし
- 同期 I/O
参考 †
Microsoft Docs †
- Azure Architecture Center
アーキテクチャ スタイル †
https://docs.microsoft.com/ja-jp/azure/architecture/guide/architecture-styles/
10 の設計原則 †
https://docs.microsoft.com/ja-jp/azure/architecture/guide/design-principles/
技術選定 †
https://docs.microsoft.com/ja-jp/azure/architecture/guide/technology-choices/
ベスト・プラクティス †
https://docs.microsoft.com/ja-jp/azure/architecture/best-practices/
チューニング †
https://docs.microsoft.com/ja-jp/azure/architecture/performance/
その他 †
多言語パーシステンス †
HATEOAS †
Tags: :アーキテクチャ, :クラウド系開発