法則一覧

第80条分散システム

一定の作業量

変更や障害の数に応じて仕事が増えるシステムは、余力がいちばん少ないときにいちばん多くの仕事をする。

Amazon Web Services

心得

制御系では、変化の有無に関係なく同じ量の仕事をさせる

どうするか

設定やヘルス状態を伝える制御ループでは、変更のたびに差分を送るのではなく、決まった間隔で状態全体を送る。ペイロードの大きさは平均ではなく最大に合わせる。仕事の量を、変わったものの数に左右させない。この方式は仕事が小さい場所で使い、リクエストを処理する容量は負荷に応じて伸縮させ、過負荷時の振る舞いを明示的に設計する。

なぜ起きるか

多くのシステムは、状況が悪くなるほど仕事が増える。再試行が増え、伝播すべき変更が増え、処理すべきヘルス状態の遷移が増える。その追加の仕事は余力がいちばん少ないときにやって来て、それを処理するのは、ふだんいちばん実行されないコードだ。一定の作業量で動く設計は、状況にかかわらず同じだけ仕事をする。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" と認めている箇所の出典。

原典を読む

ロゴ:Public domain · Wikimedia Commons

引用するとき

Hammurabi『第80条 一定の作業量』 https://kanywst.github.io/hammurabi/ja/laws/constant-work/

BibTeX
@misc{hammurabi-constant-work,
  title  = {一定の作業量},
  author = {{Hammurabi contributors}},
  note   = {Hammurabi, § 80},
  url    = {https://kanywst.github.io/hammurabi/ja/laws/constant-work/}
}

本文は CC BY-SA 4.0 です。Hammurabi の名前と記事へのリンクを添えてください。

XBlueskyはてブLinkedIn

コラムで読む

関連する法則

GitHub で誤りを指摘する