asp.net – 通过MSMQ分离Web和数据库层是必要的还是过度的?
|
我正在整理一个简单的asp.net Web控件,由于ajax表单post将记录插入到MSQL数据库中. 包含此控件的页面可能会在很短的时间内收到数千次点击,我担心打开数据库连接,插入记录然后关闭每个请求的连接的性能问题. 我遇到的一个解决方案是让Web控件将消息放入MSMQ队列,并让服务器上的Windows服务定期读取队列并执行批量插入. 考虑到Web和数据库服务器在同一台机器上运行,这听起来像是一种合理的架构.听起来有必要吗? 从我在数据库中看到的,使用MSMQ的大多数好处都与弹性而不是性能有关,所以我可能会咆哮错误的树. 非常感谢任何建议 非常感谢 皮特 解决方法以这种方式脱机处理请求是处理大量请求时的常见模式.您是否应该甚至可以做到这一点取决于许多因素. 主要因素是:您的呼叫者是否需要同步查看对其请求的响应? 我的意思是,如果数据库成功将其数据作为呼叫响应的一部分提交,则调用者必须立即并绝对确定地知道吗?如果是这样,那么离线请求处理实际上不是一种选择. 但是,如果可以接受呼叫者可以发送响应,表示他们的请求将被脱机处理(并且任何所需的响应也被脱机发送),那么使用队列肯定会使整个架构受益. 将受益的第一件事是前端可用性问题. 如果您在短时间内处理数千个请求,并且每个请求都由一个线程提供服务然后消失并将数据插入数据库,很可能会遇到没有可用的调度程序线程来处理传入请求的问题. 但是,通过减少IIS正在执行的后端工作量(写入本地队列相对于数据库调用而言非常便宜),您还可以降低基于可用性的故障的可能性. 其次,通过使用队列,您将有一种限制后端流量的方法,因为您可以控制后端处理的吞吐量. 例如,您可以拥有一个单线程队列读取器进程,该进程将请求降级并将其处理到数据库中.如果您发现队列中有消息,您可以通过托管更多的实例来扩展队列读取器服务. 这意味着您正在减少出现数据库争用问题的可能性,因为您可以在任何时候更好地控制数据库上访问线程的数量. 因此,通过使用排队,您可以减少故障并降低管理开销,这是编写良好的应用程序的标志.特别是当您考虑在Web服务器上托管数据库时! 此外,您应该阅读一个名为CQRS的架构模式,其中一个主要原则是脱机执行数据库写入. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC:如何将文件上传和其他表单字段发布到一
- asp.net-mvc – 为什么Asp.NET MVC通过Asp.NET Web窗体
- asp.net-mvc-3 – StringLength属性行为
- 模型 – 视图 – 控制器 – ASP.NET MVC:使用SendAsync发送
- asp.net – 标签中的换行符
- asp.net – K运行时使用的.Net完整框架和.Net Core Framewo
- ASP.NET中下载文件的几种实例代码
- asp.net-core-2.1 – 如何在asp.net Core 2.1.1中为Identit
- asp.net-mvc – 如何在ASP.NET MVC4中使用具有唯一标识符UR
- asp.net-mvc – 所有请求获取HTTP错误401.2 – 未经授权的响
- asp.net – 脚本管理器和工具包脚本管理器之间的
- 如果您已实施ASP.NET路由,则ASP.NET中的PageMeth
- asp.net-mvc – 如何在没有其他操作匹配的情况下
- asp.net-mvc – ASP.Net Html.DropDownList未选择
- asp.net-mvc – NLog在所有aspnet布局渲染器上抛
- asp.net-mvc – 在ASP.NET MVC 3 Action方法中并
- asp.net-mvc – 如何通过URL传递日期,为我的Acti
- asp.net-mvc – 升级到MVC 3:CS0103:名称’视图
- 在ASP.NET中上传文件时运行病毒扫描
- asp.net-mvc-3 – 是否可以在Javascript文件中使
