通过 MSMQ 解耦 Web 层和数据库层是必要的还是过度的?

2023-11-24

我正在组装一个简单的 asp.net Web 控件,作为 ajax 表单发布的结果,将一条记录插入到 MSQL 数据库中。

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

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

鉴于 Web 和数据库服务器在同一台计算机上运行,​​这听起来像是一个明智的架构吗?听起来有必要吗?

根据我在数据库上读到的内容,使用 MSMQ 的大部分好处与弹性有关,而不是与性能有关,因此我可能找错了方向。

任何建议将不胜感激

非常感谢

Pete


当您处理大量请求时,以这种方式离线处理请求是一种常见模式。

您是否应该甚至可以这样做取决于许多因素。

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

我的意思是,调用者是否必须立即且绝对确定地知道数据库是否成功地将其数据作为调用响应的一部分提交?如果是这样,那么离线处理请求并不是一个真正的选择。

但是,如果可以接受向调用者发送一个响应,说明他们的请求将被离线处理(并且任何所需的响应也会离线发送),那么使用队列肯定会对您的整体架构有利。

首先受益的是前端可用性问题。

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

然而,通过减少 IIS 正在执行的后端工作量(写入本地队列相对于数据库调用来说确实很便宜),您还可以减少基于可用性的故障的可能性。

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

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

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

因此,通过使用队列,您可以减少失败并降低管理开销,这是编写良好的应用程序的标志。尤其是当您考虑在网络服务器上托管数据库时!

另外,您应该阅读一种名为CQRS,其核心原则之一是离线写入数据库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 MSMQ 解耦 Web 层和数据库层是必要的还是过度的? 的相关文章

  • 正则表达式仅允许特定数字

    我正在寻找一个只允许输入特定数字的正则表达式 例如2 4 5 6 10 18 我尝试过类似的东西 2 4 5 6 10 18 我输入的任何内容都无法通过正则表达式 然后计算机用手指着我并大笑 我哪里出错了 单引号是不必要的 您正在寻找的正则
  • ASP.Net 异步 HTTP 文件上传处理程序

    我正在尝试在 C 中创建一个异步文件上传处理程序 并且可以通过 AJAX 异步请求提供有关文件进度的更新 基本上 如果请求是 POST 它会将一些信息加载到会话中 然后开始上传 如果请求是 GET 它会返回上传的当前状态 上传的字节数 总字
  • 将标签文本设置为 gridview 的总行数

    我使用 sql 数据库中的存储过程作为 aspx 页面上 SqlDataSourceControl 的数据源 然后 我使用 SqlDataSourceControl 作为页面上 gridview 的数据源 gridview 上的分页设置为
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • 是否有稳定的 ASP.NET 博客控件(设计用于集成到现有站点中)? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我看到了 dotnetblogengine net 并从论坛帖子中得到的印象是 将其集成到现有网站中并
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • 将文件写入 Web 服务器 - ASP.NET

    我只想将 TextBox 控件的内容写入 Web 服务器目录根目录中的文件 如何指定它 请记住 我正在本地测试这个 它不断地将文件写入我的程序文件 Visual Studio Common IDE目录而不是我的项目目录 这是我假设Web服务
  • 日期选择器无法与更新面板一起使用

    我的应用程序位于 asp net 3 5 中 其中我从更新面板内的日期选择器中选择日期 选择日期并单击提交按钮后 页面将被回发 发回后 当我再次尝试选择日期时 我看不到日期选择器 aspx页面上的代码
  • 在本地计算机中使用 Azure 存储模拟器时找不到上传的图像

    asp net 4 5 Web 表单 vs2013 身份 2 0 实体框架 6 0 我计划使用 Azure 存储 blob 来存储用户上传的图像 因此 我下载了 Azure 存储模拟器来在本地计算机上进行测试 看来容器已正确创建并且图像已正
  • 更新面板异常处理

    当我在正在构建的 ASP NET Web 应用程序中实现的 UpdatePanel 中发生异常时 它们会导致页面上出现 JavaScript 错误 并在警报中提供一些高级错误输出 这对于开发来说还可以 但是一旦系统投入生产 由于多种原因 这
  • Membership.ValidateUser() 的目的是什么

    我一直在学习有关MembershipProvider类 我认为Membership ValidateUser 方法应该用于登录用户 然而我刚刚了解到有一个FormsAuthentication Authenticate 目的是什么Valid
  • 保护 ASP.NET MVC 应用程序中的 ajax 调用的安全

    我有一个基于 ASP NET MVC 的应用程序 它允许根据用户进行不同级别的访问 当前的工作方式是 当用户访问页面时 会根据数据库进行检查以确定用户拥有的权限 然后根据用户拥有的访问级别选择视图 有些用户比其他用户看到更多数据并拥有更多可
  • 无法成功启动或连接到 MSBuild.exe 子进程。验证 MSBuild.exe

    我第一次遇到这种情况 运行构建并收到此错误 当我重建其他sln一切正常 错误 1 由于内部故障 构建意外停止 Microsoft Build Exceptions BuildAbortedException 构建已取消 无法成功启动或连接到
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • 如何强制控制器/操作使用 JsonValueProvider

    再会 我正在使用 ASP NET MVC 3 其中JsonValueProvider http haacked com archive 2010 04 15 sending json to an asp net mvc action met
  • EditorFor 的最小值和最大值

    我一直在尝试这段代码来设置我的最小值和最大值EditorFor
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr
  • 如何在asp.net中按下按钮后刷新Gridview

    我正在尝试制作一个简单的图书馆数据库 我在网格视图中列出搜索结果 然后有一个文本框和一个按钮 用户输入 isbn 并单击贷款按钮 然后 如果有足够数量的物品 itemNumber gt 0 则由用户借出 这是用户界面的屏幕截图 我的问题是
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep

随机推荐

  • 使用 Linq 连接类的属性列表[重复]

    这个问题在这里已经有答案了 我见过这个问题 使用 LINQ 连接字符串 适用于字符串 但是如果我想连接一个字符串列表 其中该字符串是类的属性 会发生什么情况 该问题中提出的方法不起作用 我已经尝试过 给定一个数组或人员 我想要一个包含他们姓
  • 带有 React 的外部链接

    我对 React 完全陌生 我面临着外部链接的问题 我想在每次点击图标时使用它重定向到 GitHub 但实际上新窗口没有显示 而是我有这个 URL http localhost 3000 https github com 我不知道为什么它不
  • Access-Control-Allow-Origin 不允许 Origin null

    我目前正在使用 SoundCloud API 希望在单击按钮时嵌入曲目 我收到两个错误 XMLHttpRequest 无法加载http soundcloud com oembed json url http 3A 2F 2Fapi soun
  • 按合同设计,编写测试友好的代码,对象构造和依赖注入将所有最佳实践结合在一起

    我一直在试图找出编写测试友好代码的最佳实践 但更具体地说是与对象构造相关的实践 在蓝皮书中 我们发现我们应该在创建对象时强制执行不变量 以避免实体 值对象等的损坏 考虑到这一点 契约式设计似乎是避免对象损坏的解决方案 但是当我们遵循这个 我
  • 一旦下一个模态呈现的视图控制器以模态方式出现,就关闭或删除上一个以模态方式呈现的视图控制器

    我的目标包括很多视图需要根据每个用户操作以模态方式呈现不同的视图 我想要做的是获得更清晰的视图层次结构和更好的用户体验 根视图控制器以模态方式呈现第一个视图控制器 当我单击第一个视图控制器上的按钮时 第二个视图控制器会以模态方式出现在其上方
  • 如何使用 Zend Framework 检查登录的在线用户

    我想知道如何使用 Zend Framework 获取当前在线或在网站上进行活动会话的用户数量 我尝试了读取会话保存路径的常用方法 但它无法使用 Zend 工作 这里任何人都可以建议我一个好方法来了解服务器上任何时刻有多少活动会话 最近就有这
  • 使用此方法将字符串转换为整数是否有任何副作用

    如果我将字符串转换为如下所示的数字 是否有任何副作用 var numb str 1 如果我检查下面的代码 它会说这是一个数字 var str 123 str str 1 if isNaN str alert Hello 如果使用此方法有任何
  • 使用Powershell或命令行启动/停止应用程序池IIS6.0

    我正在使用 IIS 6 0 并寻找一种停止 启动应用程序池的方法 我知道7 0中有一个用于powershell的stop appPool 但使用的是6 0 那么有人有一个 powershell 脚本或另一个命令行 exe 可以停止 启动应用
  • 单击 JButton Java 时更改字体样式

    如何更改STYLE of the Font当点击一个JButton 我试图让 3 个按钮分别更改样式PLAIN or BOLD or ITALIC 我读过font Class API但我没有什么比setStyle我们只能getStyle 我
  • 用于简单 iPhone 游戏的核心动画或 OpenGL

    我正在编写一个简单的游戏 可以在背景图像上快速制作球图像的动画 Core Animation Quartz 足以满足这种情况吗 如果 OpenGL ES 不能为这个一次性项目提供任何实质性的好处 我真的不想学习 OpenGL ES 这是一个
  • 使用 spring 数据保存嵌套对象 - 使用 id 作为参考

    假设您正在创建该类型的新实体User User 有嵌套对象Billing鉴于您知道Billing存在于 ID 1 中 是否有一种简单的方法可以在新的User以及现有的Billing 假设获取一个Billing将对象设置给用户是一项昂贵的操作
  • Objective-C 中的方法重载?

    据我所知 Objective C 不支持方法重载 在 Objective C 中可以用什么替代方案呢 或者我应该始终使用不同的方法名称 正确 objective C 不支持方法重载 因此您必须使用不同的方法名称 但请注意 方法名称 包括方法
  • 以前的兄弟姐妹不工作

    我想瞄准第一个 p 通过选择第二个在 div 内 p p 并使用previousSibling财产 但它不起作用 p div p test p p test p div document getElementById p2 previous
  • 使用开始时间和结束时间之间的时间过滤数组或 XML

    我有一个 API 调用 该调用返回 XML 我将 XML 转换为数组 然后使用 json encode 在 jsonp 调用中发回响应 我正在做的事情正在工作 但 API 不允许我按状态过滤 按开始和结束时间过滤 也不允许我确保房间可用 几
  • 使用 AJAX 登录时 Chrome 提示保存密码

    注意 这个问题在其原始版本的基础上进行了大量编辑 问题已大大简化 类似的问题以前已经以不同的形式被问过几次 例如 如何让浏览器提示保存密码 浏览器如何知道何时提示用户保存密码 然而 这个问题涉及的是 Chrome 功能的一个非常具体的方面
  • 在 PHP 中使用分块上传 1GB 文件

    我有一个 Web 应用程序 可接受最大 4 MB 的文件上传 服务器端脚本是 PHP Web 服务器是 NGINX 许多用户请求大幅增加此限制以允许上传视频等 然而 PHP 似乎没有简单的解决方案来解决这个问题 首先 在客户端 我正在寻找一
  • 如何通过 Spring Web 服务器将 HTTP 视频流代理到任意数量的客户端

    假设我有一个视频 HTTP 流在与我的 Spring Web 服务器位于同一网络的服务器上广播 例如在某些 url 中 例如 http localhost 9090 httpstream 如何使用 Spring 将此视频流代理给任意数量的客
  • 如何将 Numba 用于 Pytorch 张量?

    我是 Numba 新手 我需要使用 Numba 来加速一些 Pytorch 功能 但我发现即使是一个非常简单的功能也不起作用 import torch import numba numba njit def vec add odd pos
  • 多记录更新时更新触发器多久触发一次?

    我创建了一个on update扳机 如果我在一条语句中更新表中的 5 条记录 触发器将执行多少次 如果我有多个语句更新单个事务中的记录 它会改变吗 是执行 5 次 还是在所有事务完成后只执行一次 这完全取决于您使用的触发器类型 行级触发器将
  • 通过 MSMQ 解耦 Web 层和数据库层是必要的还是过度的?

    我正在组装一个简单的 asp net Web 控件 作为 ajax 表单发布的结果 将一条记录插入到 MSQL 数据库中 包含此控件的页面可能会在很短的时间内收到数千次点击 我担心打开数据库连接 插入记录然后关闭每个请求的连接的性能问题 我