代码之家  ›  专栏  ›  技术社区  ›  Yuval Adam

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

  •  4
  • Yuval Adam  · 技术社区  · 14 年前

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

    您如何决定部署哪种硬件?在决定你需要多少台机器时,有什么经验法则?

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

    关于这个问题的任何资源都会很有帮助…

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

    3 回复  |  直到 14 年前
        1
  •  3
  •   JoseK    14 年前

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

    理论

    第一步是确定业务需求:高峰使用需要多少用户?记住-这些数字通常有一定的误差。

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

    每分钟的点击率为417次,或者每秒7次。这只在前端。

    除此之外,还要添加内部事务的数量,如数据库操作、每个用户的任何文件I/O、可能在系统中运行的任何批处理作业、报表等。 对所有这些进行统计,得到系统需要支持的每秒、每分钟事务数等。

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

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

    但最终硬件的选择通常是一个商业决定。

    此外,您还需要在每个层至少保留两台服务器:web/app/even db,以进行故障转移群集。

    负载测试

    建议在整个项目生命周期和发布后都有一个单独的参考测试环境,这样您就可以回来在应用程序上运行专用的性能测试。将其扩展为生产的较小版本,因此如果prod有4个服务器,ref有1个,那么您可以测试25%的峰值事务等。

    调整和优化

    很多时候,人们会把一些昂贵的硬件放在一起,期望它们都能很好地工作。您需要针对各种参数(如TCP超时等)调整硬件和操作系统—这些参数是由软件供应商发布的,这些必须在软件完成后完成。在ref env上设置这些调整参数,测试,然后决定需要将哪些参数传递到生产环境。

        2
  •  0
  •   Romain Hippeau    14 年前

    确定你的预期负荷。 安装一台机器并使用负载测试工具对其运行一些测试。 如果您只完成了峰值负载的10%,并且有一定的误差,那么您知道您将需要一些负载平衡。设计并实现一个解决方案,并重新测试。确保您的解决方案足够灵活,可以进行缩放。

    试错差不多是一条路要走。这实际上取决于各个应用程序和使用模式。

        3
  •  0
  •   Luke404    14 年前

    使用示例加载测试应用程序,并测量性能和加载度量。数据库查询,磁盘命中,延迟,等等。

    然后在部署时获得预期负载的估计值(去问域专家)(您必须考虑平均负载和峰值)。

    把这两个相乘,再加上一些以确定。那是一个 真正地 大致了解你需要什么。

    然后实现它,记住通常不会线性缩放,也可能无法获得预期的负载;)