asp.net-mvc - 扩展asp.net-mvc网站时,在优先级方面要重点关注的是什么?

标签 asp.net-mvc iis scalability

我问了有关网站可伸缩性的服务器故障的问题,但我的重点是硬件配置,增加的内存等。因此,我想我会在这里提出问题,而且我的问题还有更多的开发方面。

根据问题,我有一个使用SQL Server后端并使用nhibernate和syscache 2级缓存的完美工作良好的asp.net-mvc网站,并且我有一个将用户群从1000个增加到7000个的请求,并且我试图弄清楚在这里,我应该将精力集中在目前可以正常运行但会引起大规模问题的事物上。我已经做了大量的阅读,到目前为止,从编码的角度来看,似乎感兴趣的事情是;

  • Asyncronous Controllers
  • Output caching(对我来说并不是真正的事,因为我的大多数页面都是动态的,并且用户权限特定于
  • 其他吗?

  • 我的SQL Server今天是4GB,就数据而言,我希望其中一些表的大小会线性增长(例如,从1000行增加到7000行的人员表),但随着用户的增加,但大多数其他表格(引用数据等)应仅略有增长(位置等表格可能会翻倍)

    最佳答案

    您描述的体系结构不可扩展。但是根据您提供的数字,可能根本就不需要扩展性吗?在设计可伸缩性之前要务实。除非您需要,否则不要参与其中。

    无论如何,如果您要这样做,则需要按如下所示进行缩放。

    首先,区分commands and queries。命令修改数据,查询检索数据。

    对于命令,您可以使用消息代理(例如Rabbit MQ)或服务总线(例如NServiceBus)。想法是Web服务器可以快速将命令放在队列中,并将响应返回给用户。可扩展性是通过扩展命令处理程序的数量而不接触Web服务器来实现的。显然,如果您想通知用户,则需要使用诸如SignalR之类的技术。

    对于查询,您需要了解它们不像命令那样擅长扩展。因此,您需要在这些方面发挥创造力。

  • 缓存数据。这考虑了过时的数据以及数据刷新策略。
  • 当您有许多数据库服务器时,分布数据(sharding),每个数据库服务器仅保存数据的子集。 Web服务器向服务器发出并行请求,每个服务器查询该子集(很小又很快)并返回,然后Web服务器将用户的所有数据块放在一起。如今,大多数NoSQL数据库都内置有分片和分布式查询。
  • 重新设计用户流程以将查询视为命令。例如接受用户的请求,让用户继续浏览。在后台收集所有必需的数据(通常使用与命令相同的技术),并在完成时通知用户。当用户转到结果页面时,检索预先生成的数据(通常从本地数据库中检索数据要快于检索)。
  • Async and await keywords in C#。只要 Controller /您在等待完成时会阻塞线程,就不仅适用于 Controller ,还适用于 Controller 调用的其他方法。使用async和await将释放请求的线程,以便其他并行请求可以同时使用这些线程。请记住,这不会缩短用户的实际请求,只会释放Web服务器的资源,以实现最佳使用。
  • 关于asp.net-mvc - 扩展asp.net-mvc网站时,在优先级方面要重点关注的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41037129/

    相关文章:

    javascript - 基于另一个列值禁用 jqgrid 中的超链接

    php - 在 IIS PHP 站点中获取随机 404 错误

    iis - 允许与 Google PageSpeed 服务建立 SSL 连接需要哪些步骤?

    database - 万维网最大的网站运行在哪些数据库上?

    database - 极端分片 : One SQLite Database Per User

    asp.net-mvc - _ViewStart.cshtml中定义的访问函数

    c# - 在 asp.net mvc 中执行 Powershell 和 Powercli 命令时如何设置超时

    asp.net-mvc - 设置 MVC3 DateTime 的 DataFormatString

    asp.net - Application_Error 在不同线程上触发

    内存中的 MongoDB 索引与分片