勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

DevOps的な非機能要件(運用要件)リスト

The DevOps Handbookで紹介されていた

を読んだら面白かったというメモ。国内ではあんまり取り上げられていないような気もする(もしくは私が不勉強で知らないだけ?)

The DevOps ハンドブック 理論・原則・実践のすべて

The DevOps ハンドブック 理論・原則・実践のすべて

開発部門が下流の作業の状況をフォローし、本番インシデントの解決の作業に参加すれば、アプリケーションは次第に運用にとってよい設計になっていく。さらに、スピーディなフリーとデプロイのしやすさを正面から意識してコードやアプリケーションを設計するようになると、すべての本番サービスに組み込みたいと思う一連の非機能要件が見つかる。
これらの非機能要件を実装すれば、サービスはデプロイしやすく、本番環境で動き続けるようになる。そして、本番環境では、問題を早い段階で見つけ、解決できるようになり、コンポーネントが故障したときには穏やかにグレードダウンできるようになる。そのような非機能要件の例を挙げておこう。
The DevOps ハンドブック 理論・原則・実践のすべて (20.5 非機能要件を体系化して運用にやさしい設計を実現する、より)

The Top Ten DevOps “Operational Requirements”

というわけで元記事を元にメモ。

  1. Documentation
    • ちゃんとドキュメントを書いてくれ。
      • 俯瞰的な概念図
      • 全ての依存関係
      • 全てのエラーメッセージと詳細
      • すべての設定オプション/スイッチ/フラグ/キーなどの詳細
      • (実行状況)計測機能のエンドポイントと期待値
      • 前提条件、デフォルト値など
  2. Robust Regression Test suite
  3. Automation and “scriptability”
    • 自動化とスクリプト化容易性。未サポートでも将来リリースプロセス等をスクリプト化できるようにしておくこと。
  4. Horizontal Scalability (for all tiers)
    • 全階層における水平方向のスケーラビリティ。
  5. “Feature Flags”
    • フィーチャフラッグ(追加機能をフラグで制御できるようにする)
    • コードベースをロールバックせず、ダウングレードを可能とすること。
  6. Configurability
    • 設定容易性。ハードコードなどもってのほかで、正しく設定できるように構築する。
  7. Backward/Forward Compatibility
    • 後方/前方互換性。これはオンライン中でのアップグレードを行う前提となるため。
  8. Code defensively & degrade gracefully
    • 主にサードパーティサービスに対する防御的な実装と、縮退稼動のサポート。
  9. Keep track of the Dependencies!
    • アプリケーションの依存関係が把握され文書化されていること。
  10. Instrumentation
    • (稼動状況の)計測のサポート。アプリケーションの稼働状況がモニタリングできる方法のサポート。

うん、わかるわかる。