3

当启动一个新的 ASP.NET 应用程序时,知道在未来的某个时候它必须扩展,最重要的设计决策是什么,可以在不进行大规模重构的情况下实现未来的可扩展性?

4

4 回答 4

3

我的前三个决定是

  1. 在数据库中禁用或存储会话状态。
  2. 在会话状态下尽可能少地存储。
  3. 良好的 N 层架构。分离业务逻辑并使用 Web 服务而不是直接访问 DLL,确保您可以横向扩展业务层和表示层。您的数据库可能能够处理您扔给它的任何东西,尽管如果需要,您也可以将其集群化。

您也可以查看数据库中的分区数据。

我不得不承认,不管网站是否需要扩展,我都会这样做。

于 2008-11-18T10:35:42.270 回答
3

这些是我们内部 ASP.Net 对大规模访问的 Web 应用程序的注意事项:

一般准则

  • 不要使用会话 - SessionState=Off
  • 完全禁用 ViewState - EnableViewState=False
  • 不要使用任何复杂的 ASP.Net UI 控件,坚持基本(DataGrid vs. Simple repeater)
  • 使用最快最短的数据访问机制(坚持使用前端站点的sqlreaders)

应用架构

  • 创建一个带有抽象层的缓存管理器。这将允许您在将来开始扩展应用程序时用更复杂的分布式缓存解决方案替换简单的 System.Web.Cache。
  • 创建一个具有抽象层的专用 I/O 管理器以支持未来的增长(S3 有人吗?)
  • 在您可以打开和关闭的主要管道中构建时间跟踪,这将允许您在发生这种情况时检测到瓶颈。
  • 使用后台处理机制并移动渲染当前页面不需要的任何内容以供其咀嚼。
  • 更好的是 - 考虑从您的应用程序向其他应用程序触发事件,以便他们可以完成异步工作。
  • 为数据库可扩展性做准备,放置您自己的层,以便您以后可以决定是否要对数据库进行分区,或者在主从场景中使用多个读取服务器。

最重要的是,从他人的成功和失败中学习并保持积极的态度。

于 2008-12-10T22:08:00.320 回答
1

确保您对瞬态/静态数据有可靠的缓存策略。数据库调用非常昂贵,尤其是使用单独的物理服务器时,因此请积极使用缓存。

于 2008-11-18T11:14:19.587 回答
1

考虑因素太多了,可以写一本关于这个主题的书。事实上,有一本很棒的书而且它是免费的。;-)

Microsoft 已将《提高 .NET 应用程序性能和可扩展性》作为 PDF 电子书发布。

如果您不介意滑稽的写作风格,那么值得一读。它不仅可以识别关键性能场景,还可以建立基准、衡量性能以及如何应用所学知识。

于 2008-11-18T20:42:01.560 回答