asp.net – 通过MSMQ分离Web和数据库层是必要的还是过度的?
我正在整理一个简单的asp.net Web控件,由于ajax表单post将记录插入到MSQL数据库中.
包含此控件的页面可能会在很短的时间内收到数千次点击,我担心打开数据库连接,插入记录然后关闭每个请求的连接的性能问题. 我遇到的一个解决方案是让Web控件将消息放入MSMQ队列,并让服务器上的Windows服务定期读取队列并执行批量插入. 考虑到Web和数据库服务器在同一台机器上运行,这听起来像是一种合理的架构.听起来有必要吗? 从我在数据库中看到的,使用MSMQ的大多数好处都与弹性而不是性能有关,所以我可能会咆哮错误的树. 非常感谢任何建议 非常感谢 皮特 解决方法
以这种方式脱机处理请求是处理大量请求时的常见模式.
您是否应该甚至可以做到这一点取决于许多因素. 主要因素是:您的呼叫者是否需要同步查看对其请求的响应? 我的意思是,如果数据库成功将其数据作为呼叫响应的一部分提交,则调用者必须立即并绝对确定地知道吗?如果是这样,那么离线请求处理实际上不是一种选择. 但是,如果可以接受呼叫者可以发送响应,表示他们的请求将被脱机处理(并且任何所需的响应也被脱机发送),那么使用队列肯定会使整个架构受益. 将受益的第一件事是前端可用性问题. 如果您在短时间内处理数千个请求,并且每个请求都由一个线程提供服务然后消失并将数据插入数据库,很可能会遇到没有可用的调度程序线程来处理传入请求的问题. 但是,通过减少IIS正在执行的后端工作量(写入本地队列相对于数据库调用而言非常便宜),您还可以降低基于可用性的故障的可能性. 其次,通过使用队列,您将有一种限制后端流量的方法,因为您可以控制后端处理的吞吐量. 例如,您可以拥有一个单线程队列读取器进程,该进程将请求降级并将其处理到数据库中.如果您发现队列中有消息,您可以通过托管更多的实例来扩展队列读取器服务. 这意味着您正在减少出现数据库争用问题的可能性,因为您可以在任何时候更好地控制数据库上访问线程的数量. 因此,通过使用排队,您可以减少故障并降低管理开销,这是编写良好的应用程序的标志.特别是当您考虑在Web服务器上托管数据库时! 此外,您应该阅读一个名为CQRS的架构模式,其中一个主要原则是脱机执行数据库写入. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC模型状态
- 为什么我的ASP.Net站点在IIS7下运行需要很长时间才能在一段
- asp.net – 尝试通过方法’HttpConfiguration..ctor(HttpRo
- asp-classic – 在ASP Classic应用程序中获取根目录
- asp.net – 命名空间“Microsoft”错误中不存在类型或命名空
- 在ASP.Net中使用自定义RoleProvider时,如何允许多个角色查看
- asp.net – http 304和404之间的任何性能差异?
- asp.net-mvc – MVC Kendo Grid超链接专栏
- 在ASP.NET MVC 3中上载大于2GB的文件
- ASP.NET WEB API入门实例
- .net – 如何获取客户端DotNetOpenAuth.OAuth2返
- asp.net-mvc – MVC3如何在ViewModel中将多个复选
- razor – 没有布局参考的ASP.NET默认MVC4应用程序
- 当我尝试调试ASP.NET程序时,为什么Internet Expl
- asp.net-mvc-3 – 复杂类型的可选[必需]
- 身份验证 – 错误“Membership.Provider”属性必
- asp.net – 如何保护我的通用处理程序调用?
- asp.net-mvc-3 – 使用Razor视图抛出有关DotNetO
- ASP.NET C#5异步Web应用程序使用异步和等待
- asp.net-web-api – System.Web.Routing.RouteCo