如何决定部署 Web 应用程序的硬件

Yuv*_*dam 5 performance web-applications

假设您有一个 Web 应用程序,没有特定的堆栈(Java/.NET/LAMP/Django/Rails,都很好)。

您将如何决定部署哪个硬件?在确定需要多少台机器时存在哪些经验法则?

您将如何制定并发用户、同时连接、每日点击率和数据库读/写比率等参数来决定您需要多少硬件以及哪些硬件?

关于这个问题的任何资源都会非常有帮助......

具体来说,任何来自现实世界经验和案例研究的硬数据都会很棒。

Jos*_*seK 4

容量规划是一个非常详细且广泛的领域。您需要接受具有“理论基线 > 负载测试 > 调整和优化”方法的迭代模型。

理论

第一步是确定业务需求:高峰使用时预计有多少用户?请记住 - 这些数字通常有一定程度的不准确。

举例来说,我们假设所有高峰流量(最坏情况下)都将超过一天中的 4 小时。因此,如果网站预计每天有 10 万次点击,我们不会将其划分为 24 小时,而是划分为 4 小时以上。所以我的网站现在需要支持每小时 25K 次点击的峰值流量。

这可细分为每分钟 417 次点击,或每秒 7 次点击。这仅在前端。

添加内部事务的数量,例如数据库操作、每个用户的任何文件 I/O、可能在系统内运行的任何批处理作业、报告等。将所有这些相加即可获得每秒、每分钟等的事务数您的系统需要支持。

当您有诸如“平均响应时间必须为 3 秒等”之类的要求时,这会变得更加复杂,这意味着您必须考虑网络延迟/防火墙/代理等

最后 - 在选择硬件时,请查看各个制造商(例如 Sun、HP、IBM、Windows 等)发布的数据表。这些详细说明了测试条件下每秒的最大事务数。在实际条件下,我们通常接受 50% 的峰值:)

但最终硬件的选择通常是商业决策。

此外,您还需要在每一层保留至少 2 台服务器:Web/应用程序/甚至数据库以进行故障转移集群。

负载测试

建议在整个项目生命周期和启动后拥有单独的参考测试环境,以便您可以回来对应用程序运行专门的性能测试。将其扩展为较小的生产版本,因此如果 Prod 有 4 台服务器,Ref 有 1 台服务器,那么您可以测试 25% 的峰值事务等。

调整和优化

人们常常将一些昂贵的硬件组合在一起,并期望它们能够完美地工作。您需要针对各种参数(例如 TCP 超时等)调整硬件和操作系统 - 这些参数由软件供应商发布,并且必须在软件最终确定后完成。在参考环境中设置这些调整参数,进行测试,然后决定需要将哪些参数转移到生产环境中。