寓話
麺屋の鍋はもう全員が食べ終わるのを待ってから新しい麺を茹でない
埠頭の麺屋には大きな鍋が一つある。昔は店員が十杯分の麺を揃えてから鍋に投入し、茹で上がったらまとめて引き上げ、次の客が揃うまで待っていた。
客が少ないときはこれで整っていた。後に小さな碗だけを求める者、肉と卵を追加する者、早く食べる者、まだスープを待つ者が現れた。大鍋はしばしば半分空で、門口には長い列ができた。
店主はまず十碗に達しなければ鍋を開かないと定め、さらに遅刻した客に番号札を渡した。一見公平に見えるが、実際には一杯の速い麺も遅い麺に引きずられることになった。
ある店員はすべての客の麺を無理やり同時に引き上げようとし、結果としてあるものは生煮え、あるものは糊のようになった。バッチとは異なる進捗を平らに均すことではない。
新しい料理人は段取りを変えた。鍋には常に麺が入っており、どの丼が茹で上がれば引き上げ、空いた場所にすぐ次の客の麺を入れる。各丼は自分の火加減のまま、ただ同じ鍋を共有する。
彼はさらに、近い火加減の麺をまとめ、早く出る注文には小さな枠を残し、長く煮る注文には後ろの位置を割り当てた。鍋はもう最も遅い人を待たず、列ももう批次全体の終了を待たなかった。
まもなく、麺屋は単位時間あたりの提供数が増え、客の最初の一口までの待ち時間も安定した。最も難しいのは麺を茹でることではなく、長さも進捗も異なる注文を同じリソース上で流すことだった。
店主は理解した。旧来のバッチ処理は整った隊伍に向くが、実際の埠頭は常に不揃いだ。新しいリクエストを稼働中のバッチに継続的に詰め込んでこそ、高価な大鍋を空回りさせずに済む。後に麺屋は二つの数だけを見るようになった。鍋の稼働率と客の待ち時間である。この両方を同時に守れるスケジューリングこそ、高並行サービスに真に適したスケジューリングだ。新しい店員は後に理解した。鍋の中の麺は一つに混ざり合っているのではない。どの椀にも自分の投入時刻、火加減、取り出し位置がある。真の技量は、不揃いな注文に熱い鍋を共有させつつ、互いに足を引っ張らないようにすることだ。店主は後に店員に、列の最後尾だけでなく鍋の表面を見るよう訓練した。どこに一枠空いたか、どこに短い注文を詰めるのが適切か、どこが鍋全体を遅らせるか、数息のうちに判断しなければならない。夜市が開き、客がより細かく来るようになって、この段取りの価値が現れた。