2010-12-28 5 views
2

Существует многопоточная программа пакетной обработки, которая создает несколько рабочих потоков для обработки каждого пакетного процесса.Пакетная обработка на нескольких серверах

Теперь, чтобы масштабировать приложение для обработки 100 миллионов записей, нам нужно использовать ферму серверов для обработки каждого пакетного процесса. Есть ли встроенная поддержка на C# для обработки запросов, запущенных на ферме серверов? Любые мысли о том, как настроить исполняемый файл C# для работы с этой настройкой?

ответ

2

Вы можете создать менеджера, который распространяет работу, например, как сказал fejesjoco, или вы можете сделать ваши приложения достаточно умными, чтобы захватить определенное количество единиц работы для обработки. Когда они завершат обработку этих блоков, попросите их связаться с сервером db, чтобы получить следующую партию. Промыть и повторить до завершения.

В качестве примечания наиболее распределенных систем рабочих в ведении:

  1. Работы находятся в очереди на сервере партий
  2. Рабочих процессов проверить с сервером, чтобы получить партию, чтобы работать дальше, доступная партия помечаются как обрабатывается этим работником.
  3. (необязательно) Рабочие процессы проверяются на сервере с отчетом о состоянии (то есть: 10% сделано, выполнено 20% и т. Д.)
  4. Рабочий процесс завершает работу и отправляет результаты.
  5. Перейти к шагу 2.

Другим вариантом является 3 рабочих обрабатывать один и тот же набор данных. Это позволит сравнить результаты. Если 2 или более одинаковых результатов, вы принимаете эти результаты. Если все 3 имеют разные результаты, то вы знаете, что есть проблема, и вам нужно проверить данные/код. Обычно это происходит только тогда, когда рабочие находятся вне вашего контроля (например, SETI), или вы выполняете массивные вычисления и хотите исправить возможные проблемы с оборудованием.

Иногда есть приложение управления, которое отображает текущее количество работников и прогресс со всем набором. Если вы знаете, сколько времени занимает отдельная партия, вы можете обнаружить, когда работник умер, и позволить новому процессу получить ту же самую партию.

Это позволяет добавлять или удалять как можно больше индивидуальных работников, не перерабатывая ничего.

1

Я не думаю, что есть встроенная поддержка кластеризации. В самом простом случае вы можете попробовать создать простое приложение-менеджер, которое делит входные данные между серверами, и ваши процессы не обязательно будут знать друг о друге, поэтому не нужно переписывать что-либо.

0

Почему бы не развернуть приложение, используя распределенную инфраструктуру? Я бы рекомендовал CloudIQ Platform Вы можете использовать платформу для распространения кода на любое количество серверов. Он также обрабатывает балансировку нагрузки, поэтому вам нужно будет только отправить свои задания в фреймворк, и он будет обрабатывать распределение заданий на отдельных машинах. Он также контролирует выполнение приложения, поэтому, если одна из машин терпит сбой, выполняемые там задания будут перезапущены на другой машине в группе.

Оформить заявку на бесплатную доставку, форумы и т. Д. Community

Смежные вопросы