関連サイト
本書の関連ページが用意されています。
内容紹介
●陳腐化しにくい「原則」を理解しよう
ベストプラクティスや標準化ガイドラインといった、クラウドを使いこなすための情報が増えています。しかしその一方で、背景を理解せずそれらの情報を表面的に利用してしまい、残念な結果に終わることも珍しくありません。本書では、Azureアプリケーションアーキテクチャガイドの「Azureアプリケーションの10の設計原則」をもとに、クラウド上にアプリケーションやシステムを構築する際に心にとめておきたい原則を、現役クラウドアーキテクトの経験を大幅に加えて解説します。陳腐化しにくい普遍的なクラウド設計の原理原則を知りたい方に向けた一冊です。単なるテクニックにとどまらない、長く役立つ視点や審美眼を磨いてみませんか。
【クラウドアプリケーション10の設計原則】
(1)すべての要素を冗長化する
(2)自己復旧できるようにする
(3)調整を最小限に抑える
(4)スケールアウトできるようにする
(5)分割して上限を回避する
(6)運用を考慮する
(7)マネージドサービスを活用する
(8)用途に適したデータストアを選ぶ
(9)進化を見込んで設計する
(10)ビジネスニーズを忘れない
書誌情報
- 著者: 真壁徹
- 発行日: 2023-10-05 (紙書籍版発行日: 2023-10-05)
- 最終更新日: 2023-10-05
- バージョン: 1.0.0
- ページ数: 288ページ(PDF版換算)
- 対応フォーマット: PDF, EPUB
- 出版社: インプレス
対象読者
クラウド向けアプリケーションを設計するアーキテクト、開発者、運用設計者・将来的にクラウドの活用、移行を計画しており、技術的な判断材料が欲しい意思決定者・パブリッククラウドや、Azureで使われているテクノロジーに関心のある人
著者について
真壁徹
北陸先端科学技術大学院大学博士前期課程修了修士(情報科学)。株式会社大和総研に入社。公共向けパッケージシステムのアプリケーション開発からIT業界でのキャリアを始める。その後日本ヒューレット・パッカード株式会社に籍を移し、主に通信事業者向けアプリケーション、システムインフラストラクチャの開発に従事する。その後、クラウドコンピューティングとオープンソースに可能性を感じ、OpenStack関連ビジネスでアーキテクトを担当。パブリッククラウドの成長を信じ、日本マイクロソフト株式会社へ。
主な著書に『しくみがわかるKubernetesAzureで動かしながら学ぶコンセプトと実践知識』(翔泳社)、『MicrosoftAzure実践ガイド』(インプレス)、共著に『Azureコンテナアプリケーション開発──開発に注力するための実践手法』(技術評論社)などがある。
目次
はじめに
本書の特徴
- 各章の構成
- 想定する読者像/読了後のゴール
- 謝辞
目次
第1章すべての要素を冗長化する Makeallthingsredundant
- 1-1クラウドにおける障害の特徴
- 一過性の障害
- 一過性の障害が非クラウドで起きにくかった理由
- 長時間にわたる障害
- サービスレベルの実際
- 冗長化がすべてではない
- 目標決定と見直しのサイクル
- 1-2推奨事項
- ビジネス要件を考慮する
- 仮想マシンを負荷分散サービスの内側に配置する
- PaaSでも冗長化を意識する
- データストアをパーティション分割する
- データを複製(レプリケート)する
- Geoレプリケーションを有効にする
- RTOとRPOを意識する
- フロントエンドとバックエンドのフェイルオーバーを同期する
- アクティブ/アクティブなマルチリージョン構成を検討する
- 正常性エンドポイントを実装する
- 自動フェイルオーバーを使用するが、フェイルバックは手動で行う
- 負荷分散サービスの冗長性を確保する
- 1-3まとめ
第2章自己復旧できるようにする Designforselfhealing
- 2-1基本的なアプローチ
- 2-2推奨事項
- 失敗した操作を再試行する
- リモートサービスを保護する(サーキットブレーカー)
- リソースの消費や障害を閉じ込める(バルクヘッド)
- キューで負荷を平準化する
- フェイルオーバー、フォールバックで切り替える
- 失敗したトランザクションを補正する
- 実行時間の長い処理にチェックポイントを設ける
- 潔く機能を停止する、減らす
- クライアントを制限する
- リーダー選定を使う
- カオスエンジニアリングに取り組む
- 2-3まとめ
第3章調整を最小限に抑える Minimizecoordination
- 3-1性能拡張と異常系処理は「調整」を生む
- 調整の例─ロック解放待ち
- 調整の例─キューと複数のワーカ
- 3-2推奨事項
- 結果整合性を受け入れる
- ドメインイベントを検討する
- CQRSやイベントソーシングパターンを検討する
- トランザクショナルOutboxパターンを検討する
- データストアをパーティション分割する
- べき等にする
- 楽観的並行性制御を検討する
- 調整にリーダー選定を使う
- 並列分散フレームワークを検討する
- オーケストレーションフレームワークを検討する
- 3-3まとめ
第4章スケールアウトできるようにする Designtoscaleout
- 4-1クラウドでスケールアウトが好まれる理由
- サーバの手に入りやすさとコスト
- スケジューリング
- PaaSで利用可能なリソース量
- 4-2推奨事項
- セッションアフィニティやスティッキーセッションに依存しない
- セッション情報は外に持つ
- 限界とボトルネックを把握する
- ワークロードで分離する
- 多くのリソースを消費するタスクを分離する
- 自動スケール機能を使う
- 安全にスケールインする
- 4-3まとめ
第5章分割して上限を回避する Partitionaroundlimits
- 5-1クラウドサービスの上限を理解する
- どのような上限があるのか
- 5-2推奨事項
- データストアをパーティション分割する
- エンドツーエンドで把握する
- 動かして把握する
- デプロイスタンプパターンを検討する
- 5-3まとめ
第6章運用を考慮する Designforoperations
- 6-1運用しやすいアプリケーションを作る
- “Youbuildit,yourunit.“
- 運用しやすいアプリケーションとは
- 6-2推奨事項
- 必要な情報を定義する
- アプリケーションを計装する
- 利用者目線での監視を行う
- 分散トレースを行う
- インシデントの根本原因の把握手段を整える
- 管理タスクを自動化する
- インフラストラクチャや構成をコードとして扱う
- テストを自動化する
- 6-3まとめ
第7章マネージドサービスを活用する Useplatformasaserviceoptions
- 7-1IaaSもPaaSもマネージドサービス
- 定番はNISTによる定義
- IaaSと比較したPaaSのメリット
- PaaSと比較したIaaSのメリット
- 活用の第一歩は、トレードオフを理解すること
- 7-2推奨事項
- IaaSとPaaSの垣根をなくす
- メンテナンスに備える
- 不明なサービス仕様は確認する
- 何を自ら作り運用すべきかを問う
- サービスや機能の非推奨化、終了に備える
- 7-3まとめ
第8章用途に適したデータストアを選ぶ Usethebestdatastoreforyourdata
- 8-1リレーショナルデータベースの代替技術
- 8-2推奨事項
- 要件に適するデータストアを選ぶ
- 一貫性に関するトレードオフを理解する
- ポリグロット・パーシステンスに取り組む
- 開発チームの能力を考慮する
- 境界付けられたコンテキストでデータストアを使い分ける
- 補正トランザクションを検討する/イノベーションを取り込むタイミングを見極める
- 8-3まとめ
第9章進化を見込んで設計する Designforevolution
- 9-1テストを自動化し、マイクロサービスから学ぶ
- 9-2推奨事項/高凝集と疎結合を徹底する
- ドメインナレッジをカプセル化する
- 非同期メッセージングを活用する
- オープンなインターフェイスを公開する
- インフラストラクチャを抽象化し、ドメインロジックと分離する
- サービスを個別にデプロイできるようにする
- マイクロサービスアーキテクチャの設計パターンから学ぶ
- 変化を計測、追跡する
- 9-3まとめ
第10章ビジネスニーズを忘れない Buildforbusinessneeds
- 10-1ビジネスニーズは技術の現場から遠ざかりやすい
- 10-2推奨事項
- 企業、組織のニーズや戦略を確認し、文書化する
- 具体的、現実的な目標を設定、文書化する
- コストを最適化する
- 10-3まとめ
付録A 守りは左から固める
- A-1シフトレフトとは
- 何度も左に戻す
- 圧倒されないために
- A-2推奨事項
- エンタープライズセキュリティの3R(Rotate、Repave、Repair)
- Repair(修理)
- Rotate(交換)
- Repave(再舗装)
- A-3まとめ
付録B目的別参考ドキュメント集
- Azureでアプリケーションを作りたい、設計の助けになる情報が欲しい
- 本書で紹介されなかったクラウド設計パターンも知りたい
- マイクロサービスに特化した情報が欲しい
- .NETに特化した情報が欲しい
- 本書で紹介されたAzureのサービスに対応するAWS、GoogleCloudのサービスを知りたい
- アプリケーション設計にとどまらない、ほかの視点での参考情報が欲しい