【问题标题】:Scability of .NET webservices.NET Web 服务的可扩展性
【发布时间】:2010-03-14 10:59:55
【问题描述】:

谁能帮助我解决有关 Web 服务和可扩展性的问题?我已经编写了一个 Web 服务作为我们文档管理系统的外观,并且需要考虑可伸缩性问题。我应该关注哪些方面来确保性能和可用性?

提前致谢

【问题讨论】:

  • 你在考虑什么样的可扩展性?

标签: c# web-services scalability


【解决方案1】:

性能与可扩展性是分开的。可扩展性意味着您可以添加更多服务器以线性增加系统吞吐量(即更多客户端连接)。最好的开始方式是拥有无状态的 Web 服务。这样,任何客户端都可以在 n 台不同的机器上调用任何 n 个 web 服务实例。如果最后有一个共享数据库用于持久性,那最终将成为您的瓶颈。有一些方法可以通过数据分区和分片来减少这种情况,但前提是您达到了这一点。

【讨论】:

    【解决方案2】:

    首先,确定您的网络服务可接受的行为。它应该能够应对什么 - 每秒 1000 个连接?每个连接的响应时间是多少?

    然后您需要自动使用您的网络服务,以便您可以对系统进行压力测试。

    当您每秒有 100 个请求时会发生什么? 1000? 10000?

    然后您可以决定性能是否正常,可接受的行为是否过于严格,或者您是否需要根据实际的分析数据进行大量的性能调整。

    【讨论】:

      【解决方案3】:

      您应该希望在 IIS 中托管您的 WCF 服务。 IIS 内置了许多性能、可扩展性、安全性等机制,是避免您重新发明*的最佳起点。

      【讨论】:

      • 你以前做过吗?我在哪里可以找到有关它的信息?
      【解决方案4】:

      某些性能肯定是由于您自己的代码造成的,但我们假设它已经过优化。此时,额外的性能扩展问题涉及服务主机(例如 IIS)托管它的机器,以及它们的网络(内部/内部网)连接速度。您需要进行一些速度测试才能确定。

      【讨论】:

        【解决方案5】:

        这确实取决于您在 Web 服务中所做的事情,但您要找出答案的唯一方法是模拟大量用户并对其进行测量。

        看看我对这个问题的回答:Measuring performance

        当我们在这个庄园(Web 服务托管在 Windows 服务中)测试我们的代码时,我们发现瓶颈是在外观服务中对每个用户进行身份验证。特别是 Windows 组件 LSASS 正在使用大部分 CPU。 幸运的是,我们能够创建新机器,每台机器都有一个外观服务,然后调用我们的主要 Web 服务集。这使我们能够扩展到大量用户(在 100,000 名用户正常使用我们的软件的区域内)。

        【讨论】: