ワーカータスクを自動スケーリングする方法は?
処理するアイテムのスループットに対応するためにワーカータスクの数を自動的にスケーリングしたいアプリケーションがあります(明らかにワーカー数の上限があります)。
処理するすべてのアイテムは単一のポイントを経由してルーティングされ、そこからワーカータスクに分散されます(現在、キューが最も短いワーカーを見つけて、アイテムをキューに入れます)。
アイテムを処理するために何人のワーカーをスピンアップする必要があるかについて、インテリジェントな決定を行うために使用するのに適したパターンまたは手法は何でしょうか。このロジックには、より少ないワーカーでアイテムをタイムリーに処理できる場合に、ワーカーをシャットダウンすることを含める必要があります。
最終的に他のリソースがボトルネックになるため、ワーカーを追加しても無限に拡張できるわけではなく、ある時点でワーカーを追加すると、助け以上に害が生じることを理解しています。これを考慮して、「スイートスポット」を自動的に見つけるためにワーカーの数を減らすことにした場合、それは素晴らしいことですが、この時点で、システムがワーカーの数を次のように増やすことができれば幸いです。より多くのアイテムが追加され、必要なアイテムが少なくなるにつれて数を減らします。
私がいじくり回したアイデアの1つは、アイテムがキューにある平均時間を測定することです。この平均時間が数秒を超える場合は、(設定された最大制限に達するまで)より多くのワーカーを起動する必要があります。平均時間が1秒未満の場合は、より多くのワーカーをスピンダウンする必要があります(もちろん残りが1つになるまで)。
誰かがこれに取り組むための最良の方法について何か提案がありますか?