「システム運用アンチパターン」
この本を読むと得られるもの
- 組織にDevOpsを導入するための方法が理解できる
- 組織にDevOpsを導入する際のアンチパターンと対処法が理解できる
以下で、特に学びになったと感じた箇所を抜粋
5章 最後の味付けとしての品質
P91 継続的デプロイと継続的デリバリ
- 「ほとんどの人にって、継続的デプロイ(追加したコミット内容がすぐに本番環境に反映される。トランクベース開発)は不要」。一方で継続的デリバリ(常にデプロイ可能な状態にしておくこと)は重要。
- 継続的デリバリは、継続的デプロイの過程を目指す過程にあるもの
- 全てのコミットを本番環境に直接反映されるためには、強固な自動テストや、厳格なレビュープロセスが必要。こういった仕組みなしに継続デプロイを実施すると、大惨事に陥る可能性がある
- 多くの組織にとって継続的デプロイは「遠すぎる目標」
P94 機能フラグ
- データベースもしくはサードパーティー製のツール側で管理された真偽値をもとにコードを分岐させるフラグ
- 機能の有効化を、フラグの真偽値で管理できるので、機能を提供することと、デプロイという作業を切り離すことができる
- 特定の顧客やユーザーのみにフラグを有効にして機能を提供するといった使い方も可能
- 機能フラグで管理している機能をリリース後に、問題なければコード上から機能フラグを削除する
- DevOps系の書籍だと度々登場するが、導入している組織はそこまで多くない印象がある(主観
6章 アラート疲れ
本番環境で発生するシステムアラート関連の話
p106 オンコールローテーションの設定
エスカレーションやSLO関連のベストプラクティス
- オンコールローテーションを設定する際には、次の要素を含めると良い
- プライマリオンコール担当者
- オンコールイベントが起きた際に、最初に連絡を受ける担当者
- セカンダリオンコール担当者
- プライマリオンコール担当者が何かしらの理由で対応できない場合の予備の担当者
- マネージャー
- プライマリオンコール担当者もセカンダオンコール担当者も対応できない場合の最後の砦
- プライマリオンコール担当者
P111 基準が存在しない場合のアラート基準
- 参考になる過去のパフォーマンスや指標がない場合に、正確な閾値を指定するにはどうすればよいか
- 大抵、このような段階でアラートを作成するのは時期尚早
- アラートの作成は後回しにして、先にデータを貯める
8章 業務時間外のデプロイ
p179 ステージング環境は本番環境とまったく同じにならない
- 多くの組織ではステージング環境を本番環境と同じように動作させることに多大なエネルギーを費やしている
- 両者は決して同じになることはない
- 理由は、ステージング環境には、「想定していないようなユーザーの操作」や「並行実行性(複数のユーザーが同時に操作を行う)」がないから
- 本番環境ではユーザーが、システム設計者が想定していないような操作をしたり、悪意のある行動を行うことがある
p189 不完全な測定
- プログラムの処理を改善したいから、速度を計測したりすることが結構ある。完璧に測定しようとすると失敗するので、ほとんど全ての測定は不完全であるということを意識しておくことが重要
- 測定の完璧さに囚われてはいけない
- 例えば、行ったことのない場所に旅行する場合、マイナス10度から0度だと知っていれば、完璧ではない情報だとしてもある程度の順次や対策は可能
P194 データストアレベルのロールバック
- 本番データベースの変更ルール
- 「常に追加的な変更を加える」ということが重要
- すでに存在するものを変更するのはNG
- あるカラムの型をVARCHARをTEXTに変える場合、既存カラムを変更するのではなく、新しいTEXT型のカラムを追加を作る
- 緊急時にロールバックが必要になった際、元のVARCHARのカラムは残っているので、安全に巻き戻しが可能
- 新しく追加したカラムのデータを元のカラムから適用する方法
- 元のカラムのデータを追加したカラムのデータに一括でコピーする(小さなテーブル向け
- 一括ではなく、時間をかけてバックグラウンドでコピーする(大きめのテーブル向け
- プログラムからは、先に新しいカラムのデータを見るようにし、新しいカラムにデータが入っていなければ元のカラムデータを取得するようにする(大きめのテーブル向け
- 完全に新しいカラムにデータが入り切れば(SQLなどで確認)、古いカラムをDROPする
11章 命じられた文化
P283 シニアエンジニアへのこだわり
- シニアエンジニアの定義の曖昧さ
- 経験年数は大事ではない(ただし、完全に年数を使わないのは難しい)
- 何を持ってシニアとするか定義すること、なぜシニアエンジニアを必要としているのか明確にすることが重要
- 要求する職務、経験が明確にできていれば、応募者もそれに応じた経歴書を用意することができ、お互いに齟齬がなく嬉しい
まとめ
いかがでしたでしょうか。本記事では「システム運用アンチパターン」の要約と読んだ感想について紹介させていただきました。組織にDevOpsを導入する際のアンチパターンと対処法について学習できる一冊になりますので、ぜひ皆さんも書籍を購入して学習してみてください。