【问题标题】:Running a Asp.net website with MS SQL server - When should i worry about scalability?使用 MS SQL 服务器运行 Asp.net 网站 - 我什么时候应该担心可伸缩性?
【发布时间】:2009-07-26 05:38:04
【问题描述】:

我在 ASP.net 平台上运行一个中型网站,并使用 MS SQL 服务器来存储数据。

我目前的网站统计数据是:

~ 每天 6000 次页面浏览量 ~ SQL 服务器中有 10 个表,每个表大约 1000 行 ~ 每页服务 4 个查询 主机有 1GB 内存

我预计到 2009 年底会出现:

~ 20,000 次页面浏览量 ~ 10 张桌子,每张桌子大约 4000 行 ~ 每页服务 5 个查询

我的问题是我现在应该计划可扩展性吗?机器是否能保持到今年年底的预期统计数据。

我知道我的描述是非常高级的,并没有提供对查询类型等的深入了解。但只是想知道你的直觉告诉你什么?

谢谢!

【问题讨论】:

    标签: asp.net sql-server-2005 scalability


    【解决方案1】:

    您应该始终计划可扩展性。何时投入资源进行实际扩展通常是一个艰难的猜测。

    机器会坚持到最后吗 年度最佳

    回答这个问题的信息太少了。如果由于通过每页四个查询与遗留企业应用程序进行大量交互而需要 30 CPU 秒来处理页面请求 - 那么就没有办法了。如果提供存储在缓存中的一些静态内容只需要几分之一秒,并且您的查询仅每半小时执行一次以刷新内容 - 那么按照您所描述的流量增长速度,您在 2020 年之前都很好。

    我的猜测是你离后一种情况更近了。每天 20,000 次页面点击并不是真正的大量流量,但您需要在某个时候对页面和服务器性能进行基准测试,以便进行所需的计算。

    在适当的时候扩展您的网站需要注意的事项:

    • 输出缓存
    • 优化视图状态
    • 在适当的情况下使用 Ajax
    • 会话优化
    • 请求、脚本、css 和 html 缩小

    两年前,我看到一台相对较新的(两年前)笔记本电脑运行 IIS,每秒处理 1100 到 1200 个简单的动态页面请求。它是由一家咨询公司设立的,该公司的业务是优化 ASP.Net 网站,但它向您展示了您可以做多少。

    【讨论】:

      【解决方案2】:

      基本上,到 2009 年底,您预计每天执行 100,000 个 SQL 查询。这大约是每秒 1.157 次查询。

      我假设您的配置是“正常的”(即您没有做一些时髦的事情,这些都是非常简单的 SELECT、UPDATE、INSERT 等),并且您的服务器正在运行 RAID 磁盘。

      每个表有 4,000 行,这对 SQL Server 来说没什么。你应该没事的。如果您想积极主动,请在服务器中再放一块 RAM 并使其至少达到 2GB,这样 IIS 和 SQL 就有足够的内存(SQL 肯定会利用它)。

      【讨论】:

        【解决方案3】:

        主机?这是否意味着您将 IIS 和 SQL 安装在同一个机器上或主机上的 IIS 与您的托管公司提供的专用 SQL Server?无论哪种方式,我都建议您开始研究如何实现缓存层以最大限度地减少对数据库的命中(在可能的情况下)。一旦计划好(不一定要实现),我就会开始研究如何围绕输出构建缓存层(在 ASP.NET 中构建的东西)。如果您看到了构建缓存层的清晰简单路径……那么这是一种快速简便的方法,可以开始最大限度地减少对数据库的请求并在您的 Web 服务器上工作。我建议这个缓存层是灵活的......请不要使用.NET提供的任何东西!目前我仍然建议使用 MemCached Win32。您可以轻松地将其安装在一个托管的本地机器上,并将缓存层配置为使用本地资源(添加内存...1gb 是不够的)。然后,如果你发现你真的需要从你的系统中榨取每一点性能......挥霍第二个盒子。在您当前的盒子...和新盒子之间分割您的缓存(允许您在缓存中保留更多)。这会给你一些成长的空间(和时间)。卸载到更多缓存应该有助于解决任何未来的峰值......并且使用第二个框,您现在还可以专注于使您的站点在农场环境中工作。如果您正在使用本地会话..将其推送到您的缓存层,以便来自一个或另一个框的请求无关紧要(标准会话对于它所管理的框是本地的)。

        这是一个巨大的主题......所以如果没有真实的细节,这当然都是猜测!您可能正好适合在现有安装中添加更好、更多的硬件。

        【讨论】:

        • “我建议这个缓存层是灵活的......请不要使用.NET提供的任何东西!” - Andrew 你能给我们一些论据吗?
        • 我使用 MemCache(基于 linux 的服务器)已经有一段时间了,它支持缓存场概念(集群中需要的服务器数量可用于跨多个服务器的基于 ram 的缓存)。然后几年又发布了一个 MemCache Win32 产品,它是一个基于 Windows 的服务器。看到这种技术的成功和必要性......微软现在提供 Velocity 产品,该产品具有大量强大的功能,同时支持农场风格的缓存。
        【解决方案4】:

        您是否尝试过使用示例数据设置快速性能测试? 20,000 次页面浏览量少于每秒一次(假设均匀分布超过 8 小时),考虑到您的小桌子,这非常少。假设您没有在每次页面视图中发送大量数据(即一个数据表包含您的一个表中的所有 1000 行),那么您可能没问题。

        您可能需要增加 RAM,但除了运行性能测试之外,我现在不会太担心性能。

        【讨论】:

          【解决方案5】:

          我认为您所描述的负载对于大多数机器来说都不是太大的问题。当然,它不仅仅取决于您概述的几个指标,还取决于查询复杂性、页面大小和其他一些东西。

          如果您担心可伸缩性,请进行一些负载测试并查看您的网站如何处理,例如每小时 10000 次页面浏览量(大约每秒 3 次浏览量)。只要您为可能的情况做好计划,提前计划总是好的。

          【讨论】:

            【解决方案6】:

            Guts 说:给定 10 个表,每个表有 4000 行,假设每行大约 2KB 的数据,那么整个数据库只有 80MB。轻松缓存在可用内存中。假设应用程序的其他一切都同样简单,您应该能够轻松地每秒处理数百个页面。

            工程师说:如果您想知道,请对您的应用程序进行压力测试。

            【讨论】:

              猜你喜欢
              • 2011-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-01
              • 2011-04-03
              相关资源
              最近更新 更多