Показаны сообщения с ярлыком архитектура приложения. Показать все сообщения
Показаны сообщения с ярлыком архитектура приложения. Показать все сообщения

пятница, 10 июня 2016 г.

Немасштабируемый вэб сервер IIS - откуда он берется ?

Плохая архитектура


Представим себе что мы написали ASP.NET или WCF приложение без использования асинхронных операций - что произойдет ?

При попытке коннекта от клиента IIS создаст в ThreadPool новый поток, который создаст запрос к базе данных и ЗАБЛОКИРУЕТСЯ ожидая ответа ! В случае с высокой загрузкой сервера, когда блокировки будут возникать быстрее чем база данных отдавать ответы разблокируя поток - число заблокированных потоков будет расти.


Но что самое главное - у этого роста есть четкий предел: -лишь  определенное количество потоков поток ThreadPool сможет создать,  и наступит момент когда система выдаст OutOfMemory Exception ! И данное исключение не может быть обработано - так как исключение возникает в самом ThreadPool и наш код в этот момент находиться в стеке.

То есть что произойдет - процесс сервера будет уничтожен (TerminateProcess) вместе со всеми потоками, но как только первый же клиент создаст запрос - процесс создастся вновь автоматически, и все опять пойдет по кругу !

Возникает "магия" - вдруг ни с того ни с сего клиенты не получают ответов (периодически), но потом все работает как обычно ...