То, что вы описываете, как раз и предназначено для балансировщиков нагрузки - они пытаются распределить входящие запросы по пулу доступных серверов.
Многие хостинговые компании предлагают планы хостинга с несколькими серверами, которые вы можете выбрать для балансировки нагрузки входящих запросов.
Например: Rackspace предлагает балансировку нагрузки в качестве дополнительной функции некоторых из своих планов хостинга.
Если вы размещаете сайт с более чем одним экземпляром веб-роли в облаке Microsoft Azure, ваш сайт автоматически сбалансирован для вас. Вы также можете создать свой сайт таким образом, чтобы он был динамически сбалансирован по нагрузке в нескольких географических регионах, а также чтобы запросы, исходящие, например, из Азии, направлялись в центр обработки данных в Азии, что снижает задержки и пропускную способность внутри центра обработки данных.
Кроме того, рассмотрите возможность организации очереди / шины сообщений между вашим интерфейсным веб-сайтом и внутренней обработкой пакетной / интенсивной рабочей нагрузки. Таким образом, вы можете независимо масштабировать переднюю и заднюю части вашей системы.
Сказав все вышесказанное, не перегружайте свое решение - сосредоточьтесь на создании стабильной, надежной, эффективной и эффективной системы, затем следите и измеряйте ее производительность и настраивайте ее, где это необходимо. В противном случае вы могли бы потратить драгоценное время и усилия на реализацию функций / настроек, которые на самом деле не приносят пользы сайту или пользователю!
Обновление 2012-01-31 на основе комментариев ОП:
Если вы хотите, чтобы ваши рабочие роли выполняли одну задачу за раз и возвращались к другой части работы, когда они больше не заняты, я предлагаю вам перевернуть вашу архитектуру:
Вместо того, чтобы использовать какой-либо интерфейсный сервер, попробуйте выяснить, кто из рабочих «занят» и распределить работу соответствующим образом, подумайте о том, чтобы ваш интерфейсный сервер помещал в очередь входящие сообщения во «входящую» очередь.
Рабочие "вытягивают" новый рабочий элемент из внешнего интерфейса, выполняют все необходимые работы, а затем информируют внешний интерфейс о завершении работы и запрашивают другой рабочий элемент.
Прелесть этого подхода в том, что он может масштабироваться линейно и может быть НАИБОЛЕЕ устойчивым.
Когда работник «вытягивает» новый рабочий элемент, интерфейсная метка времени отправляет сообщение и перемещает его во вторичную «ожидающую» очередь. Рабочие сообщают клиенту о завершении работы с рабочим элементом; внешний интерфейс перемещает завершенные элементы в «завершенную» очередь (или удаляет их, если это не имеет значения).
Затем клиент может выполнить периодическое сканирование «ожидающей» очереди, отыскивая сообщения, которые ожидали слишком долго, и может вернуть эти сообщения во «входящую» очередь, если они ожидают слишком долго.
Очереди могут доставлять массу удовольствия :) Однако создание такой системы массового обслуживания может быть сложным, а обеспечение ее подлинной надежности может быть трудоемким и дорогостоящим.
К счастью, вы можете воспользоваться некоторыми очень эффективными реализациями шины сообщений, которые обеспечат вам 90% того, что вам нужно для этого! Мой фаворит - облачная Microsoft Azure Message Bus , которая предоставляет вам пуленепробиваемую инфраструктуру для длительных сообщений, пабов и очередей, которая идеально подходит для вашего сценария.
НТН.