Балансировка нагрузки IIS. Обслуживание изображений и простого HTML с одного сервера и страниц ASP.NET с другого - PullRequest
0 голосов
/ 05 августа 2009

мы используем сервер Windows 2003 с двумя ЦП, и IIS переполняется запросами и не может их обработать, но в то же время использует менее 20% ЦП и менее 40% оперативной памяти. Когда сервер не может обслуживать какие-либо запросы, он не только не может просматривать сайт, но и не обслуживает изображения, которые используются на других наших сайтах. Мы думаем об установке VMWare, чтобы иметь 2 сервера на этом компьютере и использовать один сервер для обслуживания страниц asp.net, а другой - для изображений и простых HTML-страниц. Ребята, вы знаете, как мы можем перенаправлять запросы изображений и html-страниц на один сервер и запросы aspx-страниц на другой?

Любые идеи приветствуются.

Спасибо, Denis

Ответы [ 3 ]

5 голосов
/ 05 августа 2009
  1. Каково состояние сети? 100 МБ на 100%?
  2. В IIS Вы ограничиваете количество соединения? Вы ограничиваете Пропускная способность
  3. Есть ли ошибки сервера в журнал событий сервера?
  4. Чем вы занимаетесь в базе данных? это есть база данных бутылочка веб-сервер?
  5. является ли использование сети БД очень высоким, как Что ж? разговаривать с БД и веб-сервером по той же сети? какая-то сеть на серверах есть 2 сетевые карты, дб и веб-сервер не должен делиться та же пропускная способность с внешним трафик, поставь внешний трафик на один сеть и внутренняя связь на «бэкэнд» сеть
  6. У вас есть ЛЮБОЕ кэширование? вывод, данные?

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

http://msdn.microsoft.com/en-us/library/ms972379.aspx

Вам следует попробовать использовать CDN (сеть доставки контента) или развернуть свой собственный сервер CR (репозиторий контента) с URL-адресами, отличными от вашего веб-сайта:

  • www.yoursite.com / index.aspx

все ваши изображения / css / js могут быть отправлены с сервера CR

  • www.yourcdn.com / изображения / bigImage.jpg

или

  • cdn.yoursite.com / изображения / bigImage.jpg

или

  • cr.yoursite.com / изображения / bigImage.jpg

Поскольку загрузка ЦП вашего веб-сервера слишком мала, попробуйте , добавив HTTP-сжатие , чтобы снизить нагрузку на сеть согласно хорошему комментарию Дэвида

4 голосов
/ 05 августа 2009

Если ваша сеть на 100%, а ваш ЦП на 40%, то увеличение вычислительной мощности и / или виртуализация машин не помогут. Вы можете либо увеличить пропускную способность (как это зависит от ситуации с хостингом), либо использовать CDN, как предлагает BigBlondeViking, либо уменьшить использование полосы пропускания в своем приложении (как именно это зависит от приложения). Самый простой вариант - это CDN в большинстве случаев.

Теперь, когда вы устраните это узкое место в полосе пропускания, у вас могут возникнуть проблемы с использованием ЦП, поскольку число запросов, которые вы можете обработать, резко возрастет.

1 голос
/ 05 августа 2009

BigBlondeViking имеет несколько хороших моментов.

Но я хочу добавить, что установка 2 ВМ на машину, вероятно, не сильно вам поможет. То, что мы делаем (и я бы порекомендовал всем), это 2 уровня серверов:

  • Веб-серверы, на которых работает Apache в DMZ
    • они служат для ваших изображений, CSS, JS и другого статического контента
    • делает ССЛ
    • также используется в качестве обратного прокси-сервера (с использованием mod_proxy)
  • Сервер (ы) приложений под управлением IIS
    • они служат для ваших страниц ASP.NET

Это помогает повысить уровень масштабируемости и безопасности вашего сайта.

Пример конфигурации Apache mod_proxy:

<VirtualHost 555.55.555.555:80>
ServerName domain.com
DocumentRoot c:/docroot

ProxyPass /img !
ProxyPass /js !
ProxyPass /css !
ProxyPass / http://serverA/vdir
ProxyPassReverse / http://serverA/vdir
</VirtualHost>

Это перенаправит все запросы к / и любым подкаталогам, кроме img, js и css, на сервер A / vdir

...