WCF - Стоимость сети - PullRequest
       1

WCF - Стоимость сети

2 голосов
/ 14 апреля 2010

У меня есть служба wcf, развернутая в IIS с basicHttpBinding и aspNetCompatibilityEnabled = true

У меня также есть тестовый клиент, который вызывает несколько сервисных функций одновременно. Чтобы проверить производительность сервисного вызова на клиенте и сервере, я рассчитал среднее время, необходимое для выполнения сервисного запроса на клиенте (в прокси-коде), а также на сервере.

после теста 8 часов (сервер и клиент были на одной машине) я узнал, что среднее время ответа на клиенте составляет около 34 мс, тогда как среднее время выполнения на сервере составляет около 3 мс, поэтому разница составляет 31 мс. 1005 *

Я хотел бы знать, почему каждый вызов занимает 31 мс, это оправдано? и как я могу уменьшить это?

РЕДАКТИРОВАТЬ: После ответа "Marc Gravell"

  1. SSL включен в IIS, никакой другой безопасности на уровне WCF
  2. Служба выполняет незначительную операцию с базой данных. Вы можете оценить стоимость операции, учитывая среднее время выполнения 3 мс. (если это то, что вы называете полезной нагрузкой)
  3. Нет ни BLOB, ни MTOM
  4. Отправка и получение сообщений небольшого размера могут составлять от 100 до 500 байт, простые сообщения
  5. Пожалуйста, дайте мне знать, если что-то еще требуется для диагностики этого
  6. На самом деле меня больше беспокоит стоимость установления TCP-соединения, если вы можете объяснить, как WCF выполняет работу TCP-соединения и есть ли какая-либо разница с доступными привязками

Ответы [ 3 ]

3 голосов
/ 19 апреля 2010

После долгих исследований и испытаний я пришел к выводу, что это происходит из-за времени вызова потока на сервере, поскольку WCF использует порты завершения ввода / вывода (эффективная модель потоков. Подробно здесь )

и вам необходимо установить минимальные требования к параллелизму при запуске вашего сервера, которые могут быть выполнены следующим образом

ThreadPool.SetMinThreads(100, 100);

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

Как я уменьшил талию 31 мс до 6 мс.

2 голосов
/ 14 апреля 2010

Какие операции вы выполняете? т.е. каков размер полезной нагрузки? Если вы выполняете огромное количество операций с очень маленькими полезными нагрузками, то вы, очевидно, будете больше страдать от задержек и т. Д .; однако bandwidth также может быть проблемой с нетривиальными полезными нагрузками. Если вы страдаете от этого, вы можете попробовать другой сериализатор. Дайте мне знать, если здесь возможна проблема с размером полезной нагрузки, поскольку там могут быть некоторые параметры.

Также; какие параметры безопасности / потоковой передачи / и т.д. вы используете? Безопасность на основе сообщений обходится дороже с обеих сторон (по сравнению с безопасностью транспорта), и IIRC блокирует потоковую передачу, поскольку все сообщение должно быть доступно для его проверки. Точно так же, если вы разбрасываете большие двоичные объекты, вам может быть полезно включить MTOM (что возможно по сравнению с basic-http) и использовать API потоковой передачи.

0 голосов
/ 14 апреля 2010

Здесь можно задать так много вопросов. Марк начал с серии хороших вопросов, но, в конечном счете, я думаю, что мы не сможем получить от вас достаточно информации о ваших программах, платформе и сети, чтобы дать вам полный ответ в Интернете.

Если бы я был в вашей ситуации, первое, что я хотел бы сделать, это провести небольшой анализ, чтобы понять, что происходит под одеялом. В частности, я бы использовал ProcMon для анализа системных операций, ведущих к передаче по сети и включающей ее, чтобы убедиться, что у меня есть точное время сети. Основываясь на этих выводах, я бы либо углубился в происходящее, либо использовал профилировщик производительности .NET, чтобы посмотреть, какие операции в стеке стоят вам наибольшее время.

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