我使用的是 IIS 7 和 .NET 4.0。我的理解是 IIS 接收请求并将其传递给 ASP.NET 工作线程。如果所有线程都在使用中,请求将进入队列,并在线程可用时进行处理。如果队列超过一定大小,所有新请求都会得到 503,直到队列中再次有空间。
有没有办法对排队请求的服务顺序进行优先排序?例如,我有消费者流量和基础设施流量进入同一台服务器。如果没有可用的线程,我希望首先满足消费者请求,即使它们在基础设施请求之后到达。基本上我想用优先级队列替换请求队列。这在 IIS 中可行吗?
答案1
可能涉及很多队列;我认为您的描述不完整。
IIS 允许您指定站点的特定部分在不同的应用程序池中运行,每个应用程序池都在单独的工作进程中运行。
每个应用程序池都有一个内核模式请求队列(默认为 1000 个请求),用于确保在回收 W3WP(工作进程)的情况下请求不会丢失,但这也成为给定时刻未完成请求的实际最大限制。
如果此队列已满,您将收到 503。
应用框架(如 .Net 或经典 ASP)也可能实现自己的用户模式请求队列,该队列在工作进程中运行。我认为不可能在框架内对不同的请求进行优先级排序(除非有我不熟悉的 ASP.Net 功能可以做到这一点)。
如果每个进程的线程池中的线程数量有限,则将应用程序分为(例如)静态内容和活动内容应用程序池可以帮助将基本工作从繁忙的应用程序进程的线程池中移开。(同样,添加更多线程(可以说)是一种合理的方法)。
答案2
我不这么认为,但你可以有两个站点,一个用于消费者流量,一个用于基础设施流量,然后他们各自都有自己的队列。