この記事は、以前CourseraにあるReliable Google Cloud Infrastructure design processという講座を視聴し、一部をまとめたものです。より詳しい情報は該当講座を受講してみることをおすすめします。無料です!
Requirements, Analysis, and Design#
Who: システムの利用者だけでなく、開発者やステークホルダーまで決定する人です。
What: シンプルでありながら難しいこと。必要な主要機能要件を確立しつつ、明確で曖昧でない方法で設定する必要があります。
Why: システムが必要な理由は本当に重要な質問です。設計されるシステムが解決すべき最大の問題は何か?明確な要件への理解がなければ、追加要件が増えていきます。whyは潜在的にKPI's、SLO's、SLA'sの定義に役立ちます。
When: スコープの見積もりと現実的な実行期間の決定に役立ちます。
How: 数多くの非機能要件の決定に役立ちます。
SLOs, SLIs, and SLAs#
KPI: Key Performance Indicator、重要業績評価指標。ミッション、ビジョン、コアバリューに到達するための小さな目標の集まり。
SLI: Service Level Indicator、サービスレベル指標。サービスの水準を定量的に測定できるように設定し、追跡できるようにした指標。
SLO: Service Level Objectives、サービスレベル目標。SLIによって測定された値が目標値や一定範囲内に収まっているかを確認する指標。
SLA: Service Level Agreement、サービスレベル合意。組織やチームごとに追求する目標を達成するために、サービスに加えた成果物を文書化し、測定された期待値を持つ文書にすること。
The 12-Factor App#
より詳しい情報はThe Twelve-Factor Appサイトを参照してください。
- コードベース
バージョン管理された一つのコードベースと多数のデプロイ - 依存関係
明示的に宣言され分離された依存関係 - 設定
環境(environment)に格納された設定 - バックエンドサービス
バックエンドサービスを接続されたリソースとして扱う - ビルド、リリース、実行
厳密に分離されたビルドと実行段階 - プロセス
アプリケーションを一つまたは複数のステートレス(stateless)プロセスとして実行 - ポートバインディング
ポートバインディングを使ってサービスを公開する - 並行性(Concurrency)
プロセスモデルを使ったスケーリング - 廃棄可能性(Disposability)
高速な起動とグレースフルシャットダウン(graceful shutdown)による堅牢性の最大化 - 開発/本番環境の一致
開発、ステージング、本番環境をできるだけ同一に保つ - ログ
ログをイベントストリームとして扱う - Adminプロセス
admin/maintenanceタスクをワンオフプロセスとして実行
You cannot have a positive life and a negative mind.
— Joyce Meyer