「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
- 参考から目次を抜いて体系化した。
- まだ、ごく一部しか書けていない(オンデマンドで追記予定)。
詳細 †
以下のような立て付けになっている。
アーキテクチャ スタイル †
ビッグ コンピューティング †
Azure Batch (HPC) 推しらしい。
イベントドリブン アーキテクチャ †
- パブリッシュ/サブスクライブ モデル
- Microsoft Message Queue (MSMQ)等にあった。
- レプリケーションとか。
- イベント ストリーム モデル
- イベントがログに書き込まれる。
- クライアントはいつでも参加でき、イベントを再生
- ストリーム内でクライアントの位置を進めるのは、クライアントの役割
マイクロサービス †
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 †
データのパーティション分割 †
データのパーティション分割戦略 (サービスごと) †
デプロイ スタンプ †
監視と診断 †
特定のサービスの再試行ガイダンス †
一時的な障害の処理 †
チューニング †
分散トランザクション †
複数のバックエンド サービス †
イベントのストリーミング †
アンチ・パターン †
- ビジー状態のデータベース
- ビジー状態のフロント エンド
- 頻度の高い 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: :アーキテクチャ, :クラウド系開発