Настройка файлового сервера WCF - PullRequest
2 голосов
/ 11 ноября 2009

Я настраиваю сервер и нуждаюсь в руководстве. Этот сервер предоставляет следующие функции:

  1. страница ASPX с вызовом БД, которая загружается примерно каждые 3 минуты на несколько тысяч машин
  2. простой веб-сайт администратора ASP.NET, используемый небольшим количеством людей, но он должен быть высокодоступным
  3. служба WCF, которая обеспечивает синхронизацию файлов с несколькими тысячами клиентов с помощью сообщений BasicHttpBinding и Streamed.

Когда обновление доступно для клиентов синхронизации файлов (# 3), они нападают на сервер, требуя новых данных. Без агрессивного регулирования они поглощают все доступные рабочие потоки ASP.NET и приводят к зависанию №1 и №2. Это, как говорят дети, sux0rs.

Я воспроизвел эту проблему на сервере 4-proc. С тестовым клиентом, создающим 100 одновременных загрузок, я вижу, что одновременно выполняется 48 загрузок; в perfmon я вижу остаток в очереди в ASP.NET-> Запросы в очереди приложений. Это соответствует стандартной настройке «12 одновременных потоков на процессор», описанной в этой статье . Процессор и память выглядят нормально; это действительно просто перемещение байтов без обработки.

На мой взгляд, есть пара вещей, которые я мог бы сделать, возможно, на концерте.

  1. Увеличение maxIOThreads и maxWorkerThreads в machine.config
  2. Настройка веб-сада
  3. Повторите клиент, чтобы загрузки обрабатывались напрямую, а не через WCF (например, ссылка непосредственно на файл вместо потоковой передачи в сообщении).

Мои вопросы:

  • Помимо проб и ошибок, каковы хорошие рекомендации по увеличению количества потоков, учитывая, что каждый из них будет использоваться в течение довольно длительного времени при низком использовании ЦП / памяти? Если я пойду по этому пути, как мне обеспечить, чтобы переключение задач для увеличенного числа потоков не перегружало систему и не вызывало больше проблем?
  • Может ли веб-сад помочь в этой ситуации?
  • Увижу ли я гораздо лучшую производительность, если я получу загрузку из WCF и позволю IIS полностью ее обработать?

Best, roufamatic

1 Ответ

1 голос
/ 11 ноября 2009

Сделано правильно, WCF - лучший инструмент для работы. Если вы отправляете статический файл, я бы посоветовал изучить асинхронный сервис Impl (или асинхронный HttpHandler, если вы хотите сделать это в ASP.NET без WCF), который построен на FileStream с установленным флагом Asynchronous, и сделать клиент также пишет асинхронно. Это позволит вам гораздо более эффективно использовать рабочие потоки и переложить работу на ОС. Одновременная загрузка 1000 копий одного и того же файла не должна приводить к потере глаз вашего сервера, если все сделано правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...