Skip to content

Instantly share code, notes, and snippets.

@beginerbeginer
Last active January 4, 2025 11:15
Show Gist options
  • Save beginerbeginer/71224817b2aa00aa97b7e40dd94275c9 to your computer and use it in GitHub Desktop.
Save beginerbeginer/71224817b2aa00aa97b7e40dd94275c9 to your computer and use it in GitHub Desktop.
【感想】クラウドアプリケーション10の設計原則「Azureアプリケーションアーキテクチャガイド」から学ぶ普遍的な原理原則

目次

第1章 すべての要素を冗長化する (Make all things redundant) 第2章 自己復旧できるようにする (Design for self healing) 第3章 調整を最小限に抑える (Minimize coordination) 第4章 スケールアウトできるようにする (Design to scale out) 第5章 分割して上限を回避する (Partition around limits) 第6章 運用を考慮する (Design for operations) 第7章 マネージドサービスを活用する (Use platform as a service options) 第8章 用途に適したデータストアを選ぶ (Use the best data store for your data) 第9章 進化を見込んで設計する (Design for evolution) 第10章 ビジネスニーズを忘れない (Build for business needs) 付録A 守りは左から固める 付録B 目的別参考ドキュメント集

要約(各章のポイント)


第1章 すべての要素を冗長化する (Make all things redundant)

クラウド環境では障害が避けられないため、システムを**複数の場所やサーバーに分散(冗長化)**し、1つの障害が発生してもサービスを止めない仕組みが必要です。特にデータストアや仮想マシンの冗長化、負荷分散の設定が重要です。

ポイント

  • 障害を前提に設計する。
  • 重要な要素は複数用意する。

第2章 自己復旧できるようにする (Design for self healing)

障害が発生した際、システムが自分で問題を検知し、再試行や切り替えを行う「自己復旧」機能を設けるべきです。これにより、手動で対応する時間を削減し、システムの安定性が向上します。

ポイント

  • 障害が起きても自動で回復する仕組みを作る。
  • 再試行、フェイルオーバーを自動化する。

第3章 調整を最小限に抑える (Minimize coordination)

複数のシステムが連携するとき、過剰な調整は遅延やエラーの原因になります。各システムが独立して動作できる設計を目指すことで、スムーズな運用が可能です。

ポイント

  • 各システムが自律的に動けるように設計する。
  • 調整が必要な場面を最小限にする。

第4章 スケールアウトできるようにする (Design to scale out)

負荷が増えたときにシステムを横に拡張(スケールアウト)できるように設計します。サーバーを追加して対応することで、スムーズな運用が可能になります。

ポイント

  • サーバーを簡単に増やせる設計にする。
  • 自動スケーリングを活用する。

第5章 分割して上限を回避する (Partition around limits)

システムが扱えるデータやトラフィックには限界があります。これを小さく分割して処理を分散することで、限界を超えずに対応できます。

ポイント

  • データや処理をパーティションに分ける。
  • システムの負荷を複数のサーバーで分散させる。

第6章 運用を考慮する (Design for operations)

システムは作った後も長期間運用する必要があります。運用中のトラブルを減らすために、監視、ログ、メンテナンスの仕組みをあらかじめ組み込んでおくことが重要です。

ポイント

  • システムの状態を常に監視する。
  • 自動化された運用ツールを活用する。

第7章 マネージドサービスを活用する (Use platform as a service options)

クラウドプロバイダが提供するマネージドサービスを活用することで、自分たちで管理する負担を減らし、システムの安定性を向上させます。

ポイント

  • 専門的な管理はマネージドサービスに任せる。
  • 自分たちは本来のビジネスに集中する。

第8章 用途に適したデータストアを選ぶ (Use the best data store for your data)

データの種類や利用方法に応じて、最適なデータストアを選ぶことが重要です。リレーショナルデータベースだけでなく、NoSQLや分散データストアも検討します。

ポイント

  • データの種類に合ったストアを選ぶ。
  • 一貫性とパフォーマンスのバランスを考える。

第9章 進化を見込んで設計する (Design for evolution)

将来の変化に対応できるシステム設計が重要です。新しい技術やビジネスの変化に柔軟に対応できるよう、設計時点で進化を見込む必要があります。

ポイント

  • 変更や拡張が簡単にできる設計を目指す。
  • 部品化し、独立した機能を持たせる。

第10章 ビジネスニーズを忘れない (Build for business needs)

システム設計の目的はビジネスの成功を支援することです。技術的な優位性だけでなく、コスト、利益、顧客満足度を意識して設計することが重要です。

ポイント

  • ビジネスの目的を最優先に考える。
  • 成果を測る指標を定め、常に確認する。

付録A 守りは左から固める (Shift left security)

セキュリティの問題は早い段階で対処することが重要です。開発の初期段階からセキュリティ対策を講じることで、問題の発生を防ぎます。

ポイント

  • 問題が起きる前に対策する。
  • 自動化してセキュリティチェックを行う。

付録B 目的別参考ドキュメント集

クラウドの設計や運用に役立つ資料や情報源が目的別に紹介されています。

ポイント

  • 必要な情報を効率よく探せるようにする。
  • 他のクラウドプロバイダのサービスとの比較も行う。

この本が伝えたいメッセージ

クラウドアプリケーションを成功させるためには、設計時点で冗長化、自己復旧、分割、スケールアウトなどの原則を取り入れることが重要です。 また、技術だけでなくビジネスニーズを意識し、常に進化を見込んだ柔軟なシステムを作ることが成功の鍵です。


帰納法による原理原則

  1. 障害は避けられない。だから、冗長化と自己復旧が必要。
  2. 負荷は予測できない。だから、スケールアウトできる設計が必要。
  3. システムは成長し続ける。だから、進化を見込んで設計する。
  4. 技術は手段であり、目的はビジネスの成功。だから、ビジネスニーズを最優先する。

参照

https://tatsu-zine.com/books/ten-design-princeples-for-cloud-applications

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment