【问题标题】:What happens when a live site has too many users?当实时站点有太多用户时会发生什么?
【发布时间】:2009-10-11 03:02:21
【问题描述】:

我是生产级 Web 开发的新手,如果这很明显,我很抱歉。我的网站有可能突然激增(永久)用户,我想知道如果在短时间内有太多用户注册会发生什么,导致网站运行缓慢。由于开发需要时间,是否只是向服务器添加更多盒子的情况,还是必须关闭站点以改进代码? 谢谢

【问题讨论】:

  • 谢谢大家的回复。我只能将一个标记为答案,但所有答案都很有用。谢谢!

标签: sql-server scalability


【解决方案1】:

不用担心,即使是非常受欢迎的网站也会遇到这种情况。编码好总是一个优点,但有时即使这样也不够。 Twitter 是一个理想的例子,他们开始使用 Ruby 进行消息传递,但随着它们变得越来越流行,不得不转向 Scala。

既然你说你是新手,我能建议你熟悉一下缓存查询和缓存静态内容吗?了解 SQL Server 上良好的索引实践也应该有助于处理大量涌入的用户。

【讨论】:

  • 这是个好建议;在缓存方面,你应该看看 memcache。
  • Ehcache 和 JBoss 也是其他可行的选择。
【解决方案2】:

除了代码改进之外,两者都是首要目标。编写可扩展的代码将最大程度地帮助您。您可以在幕后投入更多的服务器,但使用专为可扩展性而设计的架构良好的代码,您需要做的事情更少。

【讨论】:

    【解决方案3】:

    取决于您使用的技术以及您编写的代码的编写方式。

    由于您标记了 sql-server,当涉及到数据库时,您通常会受到锁定策略和复制架构的限制。如何设计数据库并将其投入生产有很大的影响。必须以任何类型的串行方式发生的事情都是瓶颈。检查你的执行计划,观察和管理你的索引,如果可以的话,复制和分发你的系统。

    了解可扩展性限制的最佳方法是通过负载测试和适当的 QA。

    如果你做得不对,当你开始 503ing 或超时时,你的用户肯定会不高兴。 :-)

    【讨论】:

    • 我正在使用 Linq to SQL 和 SQL Server 2005。我正在尝试使我的项目尽可能具有可扩展性,但是对于这个领域的新手来说会很棘手。软件方面执行负载测试的最佳方法是什么?谢谢
    • Linq to SQL 并不容易让您随时了解发生了什么。分层方法在这里很好。有关该主题的整本书。您可以自动化您的 UI 以从高级别测试事物。如果您将数据库代码写入业务层,则针对该代码编写单元测试并启动线程以同时调用事物。还要检查您使用 Linq-to-SQL 生成的 SQL 并分析该查询的执行计划以查看您的所有锁,并查看您是否需要一些索引来摆脱任何繁重的全扫描。
    【解决方案4】:

    如果网站的开发方式可以让您拥有多个服务器/数据访问层,那么可伸缩性应该不是问题。

    创建应用程序以便您可以根据需要进行加载,并尽可能保持代码的灵活性。

    但是根据过去的经验。需要时进行性能调整。编写易于理解和维护的代码,并在发生时修复性能问题。

    【讨论】:

      【解决方案5】:

      我能给出的最佳建议是在您上线之前测试您的应用和服务器,然后您就可以了解何时可能会遇到问题以及问题的严重程度。

      说“它会变慢”是一回事,但是一旦超过某个点,您的应用可能会崩溃或随机给用户错误 500 页。

      使用自动脚本工具进行测试,以对网站施加压力并模拟注册和随机用户访问随机页面。

      如果您有 SSL,请确保您的工具模拟许多不同的 SSL 连接,而不仅仅是不同的 HTTP 请求(SSL 握手需要额外的资源)

      【讨论】:

        猜你喜欢
        • 2019-06-19
        • 1970-01-01
        • 2015-06-27
        • 1970-01-01
        • 2015-06-19
        • 2020-03-17
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        相关资源
        最近更新 更多