ロードバランサ
前に1つ置く
台数を増やしたら、届いた要求をどの台へ渡すかを決める役が要ります。これがロードバランサです。
一番わかりやすい配り方は、順番に1台ずつです。1件目は1台目、2件目は2台目、3件目はまた1台目に戻ります。
Python
# 要求が3件、台が2台
# 1件目 → a、2件目 → b、3件目 → a賢い配り方もあります。ただしどの台が空いているかを知る必要があります。
知るには各台の状態を集め続けることになり、そこが新しい壊れ所になります。順番に配るだけなら、状態を持たずに済みます。
偏りは受け入れる
順番に配ると、件数は台数で割り切れないかぎり偏ります。
5件を3台へ配れば 2件・2件・1件です。この偏りは直しません。
件数が増えれば差の割合は小さくなります。100万件なら1件の差は誤差です。
直すべき偏りは、1件が重い要求と軽い要求が混ざるときだけです。そこは順番では解けないので、別の配り方に替えます。
演習
要求のリストと台のリストを受け取り、順番に配った結果と、台ごとの件数を返します。
要件
- i 番目の要求は servers[i % 台数] へ配る。assignments にはその台の名前を順に入れる
- counts は台ごとの件数。1件も受けていない台も 0 で入れる。並びは servers と同じ順
- servers が空のときは assignments も counts も空にする
ヒント
編集 ゆめさく編集部