バランサーの仕組み
バランサーは、複数のベルトまたは複数のベルトレーンにアイテムを均等に分配するために使用される。
入力が均等配分されているバランサーは、すべての入力ベルト/ベルトレーンから均等に取り出す。出力が均等配分されたバランサーは、すべての出力ベルト/ベルトレーンに均等に分配する。理想的には、バランサーは入力と出力のバランスが取れているべきである。
ベルトバランサー
ベルトバランサーは、分配器が両方の出力ベルトに1:1の比率でアイテムを出力するという仕組みを利用している。つまり、分配器を使えば、2本のベルトに同量のアイテムを載せることができる。この過程は無限に繰り返すことができるので、2n本の出力ベルトを持つバランサーは簡単に作ることができる。
バランサーはまた、分配器は両方の入力ベルトから等量のアイテムを取るという仕組みを使う。つまり、2つの入力ベルトに接続された分配器は、それらのアイテムを2つの出力ベルトに均等に分配する。ベルトのバランスを取るには、出力ベルトに各入力ベルトから同数のアイテムが含まれるようにしなければならない。
スループット
スループットが制限されているバランサーは、1つ以上の出力がブロックされると、最大出力を提供できないことがある。スループットが制限されていないバランサーであるためには、 バランサーは以下の条件を満たす必要がある。
- 満載の状態で100%のスループットであること。
- 任意の量の入力ベルトが、任意の量の出力ベルトに向かうことができること。
バランサーは、内部ボトルネックのために、しばしば2番目の条件を満たさない。右の図は、4→4バランサーに2本のベルトが供給されているが、1本のベルトしか出力していない。このバランサーのボトルネックは、真ん中の2本のベルトが1つの分配器からしか入力されないことである。そのため、分配器の片側からしか入力を得られない場合、図に見られるように、分配器の片側から2本のベルト一杯に入力する分配器から供給を受けているにもかかわらず、1本のベルトしか出力できない。この特別なケースでは、ボトルネックは、より多くの分配器で2つの中央の出力ベルトに供給することで解決できる。これは、ここに見られるように、バランサーの端にさらに2つの分配器を追加することによって行われる。
しかし、ほとんどのバランサーのボトルネックはそう簡単には解決できない。スループット無制限バランサーを実現する保証された方法は、スループット無制限バランサーの最初の条件(最大負荷で100%のスループット)を満たす2つのバランサーを連結して配置することである。出来上がったバランサーは、スループット無制限を前提に設計されたバランサーよりも大きくなる。これは、スループット無制限のバランサに最低限必要な分配器の数よりも多くの分配器を使うからである。n → n のバランサー(ただしnは2の累乗)では、n×log2(n)−n÷2
という式で、最低限必要な分配器の数を計算できる。この式はベネシュネットワーク(英語)のノード数に基づいており、本質的にはあらゆる入力が、あらゆる出力に到達可能になっているスループット無制限のバランサーと同じである。
ユニバーサルバランサー
多くのバランサーは、出力が詰まったり、出力が使われなかったりすると、正しくバランスをとることができなくなる。要するに、これはn-n個のバランサが機能的なn-(n-1)個のバランサではないことを意味する。時々、これは未使用の出力をバランサーの周りを戻してループさせ、入力に分配することで修正できる。しかし、その選択肢がとれない場合もある。ユニバーサルバランサーは、バックループを内蔵することで、この問題を解決する。これらのバランサーは、どのような入力とどのような出力の間でも均等にバランスをとることができる。ユニバーサルバランサーはスループットを制限することができる。ユニバーサルバランサーがスループット制限を受けている場合、ボトルネックはループかバランサー自体にあるかもしれない。スループットが制限されたユニバーサルバランサーは、いくつかの未使用出力のキャパシティしか持たないことがある。許可された出力数以上のものが詰まると、ユニバーサルバランサは通常のバランサのように振る舞い、 正しくバランスをとらないかもしれません。
レーンバランサー
レーンバランサーには、出力均等型と入力均等型がある。入力均等型レーンバランサーは、入力ベルトの各側から均等に引き出し、出力均等型レーンバランサーは、出力ベルトの各レーンに均等に出力する。