asp.net – 通过MSMQ分离Web和数据库层是必要的还是过度的?

我正在整理一个简单的asp.net Web控件,由于ajax表单post将记录插入到Msql数据库中.

包含此控件的页面可能会在很短的时间内收到数千次点击,我担心打开数据库连接,插入记录然后关闭每个请求的连接的性能问题.

我遇到的一个解决方案是让Web控件将消息放入MSMQ队列,并让服务器上的Windows服务定期读取队列并执行批量插入.

考虑到Web和数据库服务器在同一台机器上运行,这听起来像是一种合理的架构.听起来有必要吗?

从我在数据库中看到的,使用MSMQ的大多数好处都与弹性而不是性能有关,所以我可能会咆哮错误的树.

非常感谢任何建议

非常感谢

皮特

解决方法

以这种方式脱机处理请求是处理大量请求时的常见模式.

您是否应该甚至可以做到这一点取决于许多因素.

主要因素是:您的呼叫者是否需要同步查看对其请求的响应?

我的意思是,如果数据库成功将其数据作为呼叫响应的一部分提交,则调用者必须立即并绝对确定地知道吗?如果是这样,那么离线请求处理实际上不是一种选择.

但是,如果可以接受呼叫者可以发送响应,表示他们的请求将被脱机处理(并且任何所需的响应也被脱机发送),那么使用队列肯定会使整个架构受益.

将受益的第一件事是前端可用性问题.

如果您在短时间内处理数千个请求,并且每个请求都由一个线程提供服务然后消失并将数据插入数据库,很可能会遇到没有可用的调度程序线程来处理传入请求的问题.

但是,通过减少IIS正在执行的后端工作量(写入本地队列相对于数据库调用而言非常便宜),您还可以降低基于可用性的故障的可能性.

其次,通过使用队列,您将有一种限制后端流量的方法,因为您可以控制后端处理的吞吐量.

例如,您可以拥有一个单线程队列读取器进程,该进程将请求降级并将其处理到数据库中.如果您发现队列中有消息,您可以通过托管更多的实例来扩展队列读取器服务.

这意味着您正在减少出现数据库争用问题的可能性,因为您可以在任何时候更好地控制数据库上访问线程的数量.

因此,通过使用排队,您可以减少故障并降低管理开销,这是编写良好的应用程序的标志.特别是当您考虑在Web服务器上托管数据库时!

此外,您应该阅读一个名为CQRS的架构模式,其中一个主要原则是脱机执行数据库写入.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....