2014-11-11 10 views
0

Мы работаем над приложением, которое обслуживает запрос 24 * 7, и ни один из запросов не должен быть упущен. Это приложение размещено в IIS в среде с балансировкой нагрузки. Первичная группа серверов P1 и C1, тогда как резервные серверы для первичных серверов - P2 и C2. Таким образом, запросы отправляются с балансировкой нагрузки на P1 и C1. Если оба P1 и C1 опускаются, P2 и C2 поднимаются. Мы пытаемся работать над стратегией, поэтому ни один из наших запросов не пропущен. План состоит в том, чтобы перенести первичные серверы P1 и C1, чтобы запросы были перенаправлены для резервного копирования. Затем доведите первичные серверы и работайте на резервных серверах. Мой вопрос в том, как обеспечить, чтобы рабочий процесс обслуживал последний запрос, который он получает, прежде чем мы приносим приложение для первичных серверов. Как упоминалось ранее, намерение состоит в том, чтобы не пропустить ни один из запросовУтилита для пула приложений

ответ

0

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

В любом случае для этого вам не нужно несколько серверов. IIS автоматически (по крайней мере по умолчанию), истощает запросы из старого экземпляра приложения при запуске нового и отправляет на него новые запросы (во время обновлений приложений). (Обратите внимание, однако, что любые запросы к новому пулу, скорее всего, остановятся на несколько секунд, потому что приложение загружается и инициализирует все в первый раз - это нормально и очень трудно избежать).

Если у вас действительно есть несколько серверов и вы хотите переключить обработку запросов с одного сервера на другой, у вас должна быть какая-то система балансировки нагрузки, либо балансировка нагрузки программного обеспечения, такая как балансировка сетевой нагрузки Microsoft, либо балансировщик оборудования, такой как F5 Big-IP. В обеих этих ситуациях вам нужно как-то сказать, что балансировщик нагрузки сливает соединения на старом приложении (или сервере) и направляет их на новый сервер. Это может быть сделано вручную через их графические интерфейсы или для системы автоматического развертывания, потребует интеграции с этими системами.

+0

У нас есть сервер с балансировкой нагрузки на месте. Это WCF-сервис, который мы размещаем в IIS, и он обслуживает каждый запрос в миллисекундах. Таким образом, нет проблем, таких как длительные запросы. Основной проблемой для нас является то, что, поскольку время отклика выполняется быстро, мы постоянно получаем запросы и должны гарантировать, что развертывание не повлияет на ответ. – vibhu

+0

Я проверял эту ссылку, чтобы иметь некоторую ясность - http://fullsocrates.wordpress.com/2012/07/25/iisreset-vs-recycling-application-pools/. Это говорит о IISRESET. Для пула приложений, возможно ли, что если я попытаюсь закрыть пул приложений (и не переработать его), будет ли IIS гарантировать, что рабочий процесс завершит все запросы до того, как пул будет полностью закрыт, и не будет отправлять ему какие-либо дальнейшие запросы, как только по получении запроса на закрытие пула приложений. – vibhu

+1

Если у вас есть внешний балансировщик нагрузки, ничто IIS не имеет значения. Просто сообщите платежному балансору, чтобы маршрутизировать новые входящие запросы на второй сервер - у него должен быть какой-то индикатор, когда существующие запросы были завершены для первого сервера, после чего вы можете безопасно выполнить обновление. Затем вы, вероятно, захотите что-то сделать для «подогревания» обновленного приложения (есть некоторые новые функции IIS, связанные с этим, но не на IIS 7, и я не заглянул в подробности). Затем скажите балансоукладчику вернуть первый сервер и запустить тот же процесс со вторым сервером. – James