I don't understand what you mean I have
"As a result, I have 5 WPs that are OK and 1 that is busy (it serves a long running request to DB)"
Are you saying that all the complex requests are processed by 1 wp? Are you see
significant wait times? Obviously the CPU still has to do the work of the wp's
irrespect of how many there are.
Sorry if I was not clear. Let me explain it one more time:
Say, I have 3 worker processes, A, B and C.
I have a number of almost equal requests to my service. They are handled by IIS and are distributed between worker processes automatically. However, sometimes I get a complex request, that takes lots of time to be executed.
Say, worker process A recieved a complex request, that will take up 10 minutes to be executed. My service is configured in singletone/singlethreaded maneer (it is all because of COM component it is using - this is why I do not use multithreading instead of web gardens), so A is completely busy. It can not process any requests simultaneously.
The rest worker processes (B and C) are not busy at the same time. However, further requests are distributed by IIS equally. If 30 requests were recieved, 10 will go to A's queue, 10 - to B's queue and 10 to C's. However, A is not available to process requests, and its queue is growing.
As you can see, average queue size for B and C requests will be quite small. However, A's queue size will grow continuously.
So my questions are (with respect to renewed explanation of my problem):
- Does IIS 6 monitors worker process queue size while distributing requests among worker processes? Obviously, I expect it does, since it's quite a simple case. However, I do not feel it does (accordingly to my expirience). So, I want to know whether it is capable to more sophisticated load balancing than round robin. It might be connected to WCF nature of my application - so I need to know where to look for an answer. So, If you can confirm it works for usual web apps and services - it will be quite interesting point for me.
- If IIS 6 is not capable of such things, can I implement a kind of custom balancer for web gardens (I'm not going to rewrite it's native acceptor - I'm looking for something that could be implemented in 3-5 days)?
- If IIS 6 does not provide such features, what about IIS 7?