現在、ロードバランサーを実装しようとしていますが、少しスピードバンプにぶつかっています。状況は次のとおりです(簡略化)。
- worker_aによって処理されるリクエストqueue_aのキューがあります
- worker_bによって処理されるリクエストqueue_bの 2 番目のキューがあります。
- そして、いずれかのワーカーに送信できる3 番目のリクエスト キューqueue_cがあります。
この種のセットアップの理由は、各ワーカーにはそのワーカーだけが処理できる固有の要求があるためですが、誰でも処理できる一般的な要求もあります。
基本的に、 C5 IntervalHeapの 3 つのインスタンスを使用してこれを実装するつもりでした。各ワーカーは、そのローカル キューと、その一部である共有キューにアクセスできます (たとえば、worker_a は queue_a と queue_c を見ることができます)。
この考え方の問題点は、ローカル キューに要求があり、共有キューに同じ優先度の要求がある場合、どちらを最初に処理する必要があるかを判断できないことです (通常、IntervalHeap は先着順です)。その場合は先着順)。
編集: IntervalHeap が同じ優先度の要求を持つ先着順サーバーではないように見えることを発見しました!
比較的高いスループットと時間に敏感になるため、キュー全体のロックを最小限に抑えたいと考えていますが、現時点で私が考えることができる唯一の方法は、3 番目のキューが削除され、共有リクエストが両方に配置されるという、より多くの複雑さを伴います。 queue_a と queue_b。リクエストが吸い上げられると、それが共有リクエストであることがわかり、他のキューから削除する必要があります。
それが十分に明確に説明されていることを願っています!