Чем больше сайт и количество подключений, тем сложнее серверу справляться с обработкой всех запросов. Грамотно реализованное приложение может использовать различные кэширующие механизмы, сервер может быть достаточно производительным, но однажды может наступить момент когда всего этого уже недостаточно. Есть несколько способов решить эту проблему:
- Поставить ещё более мощный сервер.
- Распараллелить web приложение.
- Распараллелить чтоб аж Google «завидовал» - построить Web Farm.
2-й способ является наиболее оптимальным, потому что просто более мощный сервер может решить проблему лишь на некоторое время, а построить Web Farm - уже слишком дорого покупать несколько серверов. К тому же 2-й способ является очень простым и не требует дополнительных ресурсов и растрат.
Web Garden (веб-сад) это web приложение в котором количество рабочих процессов больше 1. Этот механизм появился в IIS 6, в котором также появилась возможность создавать N пулов под N сайтов (max 2000 pools). Каждый пул в IIS по умолчанию работает в режиме isolation mode, это значит, что каждый пул будет иметь свою память, свой контекст и свои границы приложения. Также это значит, что если сайт «упадёт», то упадёт только этот пул, с сайтами которые в нём существуют, но не весь сервер, как было раньше в IIS 5). Поскольку пул может работать изолированно, мы можем дать ему возможность создавать ещё процессы для того, чтобы приложение могло выдерживать больше подключений. Тем самым мы его распараллеливаем, снижая блокировки на ресурсы, используемые приложением. Все запросы, которые приходят в конкретный пул, разделяются между процессами web сада. Таким образом, используя Web Garden на Blackball.LV удалось решить проблему постоянного перезапуска IIS 7.0 Application Pool из-за чрезмерно высокой нагрузки.
Примущества Web Garden:
- Легко настраивается;
- Надежная и устойчивая обработка запросов. Если один из процессов в пуле будет работать не стабильно или «упадёт» по неизвестным причинам, то его сразу подменит другой процесс из пула;
- Меньше блокировок на ресурсы. Когда web garden доходит до состоянии «сейчас лопну», то каждое новое подключение к серверу распределяется между процессами по карусельному принципу.