1

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

4

1 回答 1

1

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

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

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

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

我会认真考虑将单个通道分成两个通道,并在两个不同的服务器上理想地运行它们。此外,我会将入站队列添加到考试结果通道。这将有很多好处:

  1. 由于您消除了同时处理考试结果的可能性,登录请求将不太可能超时。
  2. 考试结果请求的自然节流(通过队列)。
  3. 解耦两个服务之间的依赖关系。
  4. 更高的系统稳定性,更低的支持成本,更低的拥有成本。

因为您的服务是如此不同,这将使您更容易做到这一点。您应该能够毫不费力地分离代码库。您可以使用 MSMQ(可能通过 WCF netMsmqBinding)来处理请求的排队。

希望这对您有所帮助。

于 2012-12-27T09:07:16.640 回答