【问题标题】:What are the key factors that ensure successful ASP.NET application scalability?确保成功的 ASP.NET 应用程序可扩展性的关键因素是什么?
【发布时间】:2010-09-22 20:08:51
【问题描述】:

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

【问题讨论】:

    标签: asp.net architecture scalability


    【解决方案1】:

    我的前三个决定是

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

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

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

    【讨论】:

    • 这是大多数人忽略的重要方面。您应该设计每个应用程序以进行扩展。很多时候,人们认为它只是一个“丢弃”的应用程序。一旦你必须在某人的代码中改进几次可扩展性,你肯定会喜欢它!
    【解决方案2】:

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

    一般准则

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

    应用架构

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

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

    【讨论】:

    • 很好的答案,谢谢 - 您能否提供一些链接到您所谈论的架构点的示例?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      Microsoft 已将Improving .NET Application Performance and Scalability 发布为 PDF 电子书。

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

      【讨论】:

      • 我刚刚下载了那个。有了你的风格,MS 真的可以让一些真正会写作的人做 :)
      • 是的。当您让纯技术人员编写文档时,就会发生这种情况。技术作家是一种罕见的品种,他们了解我们的工作,但可以用不痛苦的方式来表达。
      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2012-03-14
      • 2013-07-07
      相关资源
      最近更新 更多