【发布时间】:2010-10-29 07:39:42
【问题描述】:
我目前正在用 c# 构建一个 ASP.NET MVC Web 应用程序。
我想确保构建此应用程序,以便将来可以横向扩展,而无需进行重大重构。
我非常热衷于使用某种队列将任何写入发布到我的数据库库,并有一个进程异步轮询该队列以执行更新。一旦这些数据被发送回数据库,客户端就需要使用新信息进行更新。这意味着根据服务器上执行的业务规则,将数据写回数据库的过程可能需要很短的时间。
我的问题是从客户端\浏览器的角度处理更新的最佳方式是什么。
我正在考虑将数据发送回服务器并将其添加到队列中并立即向客户端发送响应,然后以某种频率轮询以获取更新的数据。任何有关这方面的最佳实践或模式将不胜感激。
此外,在从数据库读取数据方面,您是否建议使用任何特定技术,或者根据我的情况直接从数据库读取就足够了。
更新 以为我会发布有关此的更新,因为它已经有一段时间了。我们实际上最终使用了 Windows Azure,但该解决方案适用于其他平台。
我们最终做的是使用 Windows Azure 队列来发布消息\命令。这是一个非常快速的过程并立即返回。然后我们有一个工作角色,它在另一个线程上处理这些消息。这使我们能够最大限度地减少网络角色上的任何数据库写入\更新,理论上使我们能够更轻松地扩展。
根据我们处理的数据类型,我们会通过电子邮件甚至静默方式通知用户。
【问题讨论】:
-
我的第一个问题是,如果您让用户等待写入结果,为什么还要让您的数据库异步写入?
-
我的问题是可能有一个业务规则在运行一段时间,类似于数据库触发器。虽然这对于少数用户来说可能没问题,但我认为这是一个瓶颈,可能会导致客户端上的用户请求超时,这是我想要避免的。
标签: c# asp.net asp.net-mvc queue scaling