第80条
一定の作業量
変更や障害の数に応じて仕事が増えるシステムは、余力がいちばん少ないときにいちばん多くの仕事をする。
心得
制御系では、変化の有無に関係なく同じ量の仕事をさせる
どうするか
設定やヘルス状態を伝える制御ループでは、変更のたびに差分を送るのではなく、決まった間隔で状態全体を送る。ペイロードの大きさは平均ではなく最大に合わせる。仕事の量を、変わったものの数に左右させない。この方式は仕事が小さい場所で使い、リクエストを処理する容量は負荷に応じて伸縮させ、過負荷時の振る舞いを明示的に設計する。
なぜ起きるか
多くのシステムは、状況が悪くなるほど仕事が増える。再試行が増え、伝播すべき変更が増え、処理すべきヘルス状態の遷移が増える。その追加の仕事は余力がいちばん少ないときにやって来て、それを処理するのは、ふだんいちばん実行されないコードだ。一定の作業量で動く設計は、状況にかかわらず同じだけ仕事をする。Route 53 ではヘルスチェックの集約役が、全ステータスを収めた固定長の表を数秒ごとに DNS サーバーへ送り、Network Load Balancer のノードは何も変わっていなくても数秒ごとに S3 から設定全体を読み込み直す。障害が一斉に起きても仕事は増えないので、本番で初めて出会う過負荷モードがない。
当てはまらなくなるとき
伸縮性:毎回すべての仕事をすれば、ほとんど何も変わっていないときには資源の無駄になる。設定やヘルス状態の伝播ならコストは無視できるが、Web サーバー群では、ピーク容量を一日中動かすより、負荷に合わせて伸縮させて節約するほうがたいてい得になる。
出典
Colm MacCárthaigh『Reliability, constant work, and a good cup of coffee』(Amazon Builders' Library, 2021)。コーヒーアーン (大型の給茶器) のたとえ、Route 53 のヘルスチェックと Network Load Balancer の設定配布の例、物理的な一定作業は "usually come at the cost of waste" と認めている箇所の出典。
原典を読む