【发布时间】:2010-03-14 10:59:55
【问题描述】:
谁能帮助我解决有关 Web 服务和可扩展性的问题?我已经编写了一个 Web 服务作为我们文档管理系统的外观,并且需要考虑可伸缩性问题。我应该关注哪些方面来确保性能和可用性?
提前致谢
【问题讨论】:
-
你在考虑什么样的可扩展性?
标签: c# web-services scalability
谁能帮助我解决有关 Web 服务和可扩展性的问题?我已经编写了一个 Web 服务作为我们文档管理系统的外观,并且需要考虑可伸缩性问题。我应该关注哪些方面来确保性能和可用性?
提前致谢
【问题讨论】:
标签: c# web-services scalability
性能与可扩展性是分开的。可扩展性意味着您可以添加更多服务器以线性增加系统吞吐量(即更多客户端连接)。最好的开始方式是拥有无状态的 Web 服务。这样,任何客户端都可以在 n 台不同的机器上调用任何 n 个 web 服务实例。如果最后有一个共享数据库用于持久性,那最终将成为您的瓶颈。有一些方法可以通过数据分区和分片来减少这种情况,但前提是您达到了这一点。
【讨论】:
首先,确定您的网络服务可接受的行为。它应该能够应对什么 - 每秒 1000 个连接?每个连接的响应时间是多少?
然后您需要自动使用您的网络服务,以便您可以对系统进行压力测试。
当您每秒有 100 个请求时会发生什么? 1000? 10000?
然后您可以决定性能是否正常,可接受的行为是否过于严格,或者您是否需要根据实际的分析数据进行大量的性能调整。
【讨论】:
您应该希望在 IIS 中托管您的 WCF 服务。 IIS 内置了许多性能、可扩展性、安全性等机制,是避免您重新发明*的最佳起点。
【讨论】:
某些性能肯定是由于您自己的代码造成的,但我们假设它已经过优化。此时,额外的性能扩展问题涉及服务主机(例如 IIS)托管它的机器,以及它们的网络(内部/内部网)连接速度。您需要进行一些速度测试才能确定。
【讨论】:
这确实取决于您在 Web 服务中所做的事情,但您要找出答案的唯一方法是模拟大量用户并对其进行测量。
看看我对这个问题的回答:Measuring performance
当我们在这个庄园(Web 服务托管在 Windows 服务中)测试我们的代码时,我们发现瓶颈是在外观服务中对每个用户进行身份验证。特别是 Windows 组件 LSASS 正在使用大部分 CPU。 幸运的是,我们能够创建新机器,每台机器都有一个外观服务,然后调用我们的主要 Web 服务集。这使我们能够扩展到大量用户(在 100,000 名用户正常使用我们的软件的区域内)。
【讨论】: