在传入Web服务之前排队Web请求

时间:2012-12-26 12:43:14

标签: asp.net multithreading c#-4.0 queue msmq

我有在线评估应用程序,在登录和提交测试期间大量点击,当CPU使用率为100%并且许多请求全部丢失时,服务器无法处理所有请求,我想将所有请求排队并发送一个请求一段时间内部,所以请求不应该丢失并处理服务器后端的所有请求

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您正在处理两种非常不同类型的请求 - 登录和检查结果,并且您正在尝试通过相同的渠道处理它们。

这两个请求具有非常不同的特征:

  • 登录请求很小
  • 考试成绩要求很高
  • 登录请求需要是实时的
  • 考试结果请求不需要实时处理
  • 登录请求处理用户和安全性(从业务角度来看)
  • 考试请求处理问题和答案(从业务角度来看)

从逻辑上讲,它们是如此不同,以至于您在单个频道中拥有的是两种不同的服务(即使目前它们捆绑在一起)。它们几乎没有任何共同之处。

我会认真考虑将单个频道拆分为两个频道,并在两个不同的服务器上理想地运行它们。另外,我会将入站排队添加到考试结果频道。这会带来很多好处:

  1. 登录请求不太可能超时,因为您已删除了同时处理考试结果的可能性。
  2. 自然限制考试结果请求(通过队列)。
  3. 解耦两个服务之间的依赖关系。
  4. 更高的系统稳定性,更低的支持成本,更低的拥有成本。
  5. 因为您的服务非常不同,所以这样做会更容易。您应该能够轻松地分离代码库。您可以使用MSMQ(可能通过WCF netMsmqBinding)来处理请求的排队。

    希望这会对你有所帮助。