假设您有一个Web应用程序,没有特定的堆栈(Java / .NET / LAMP / Django / Rails,都很好)。
您如何决定部署它的硬件?在确定您需要多少台机器时,有哪些经验法则?
您如何制定参数,例如并发用户,同时连接,每日点击量和数据库读/写比率,以决定您需要多少以及哪些硬件?
关于这个问题的任何资源都会非常有用......
具体而言 - 来自现实世界经验和案例研究的任何硬数据都会很棒。
答案 0 :(得分:3)
容量规划是一个非常详细和广泛的领域。您需要接受具有“理论基线>负载测试>调整和优化”方法的迭代模型。
<强>理论强>
第一步是确定业务要求:峰值使用的用户数量是多少?请记住 - 这些数字通常是不准确的。
作为一个例子,我们假设所有高峰流量(在最坏的情况下)将超过一天的4小时。因此,如果该网站预计每天点击量达到100K,那么我们不会超过24小时,而是超过4小时。所以我的网站现在需要支持每小时25K点击量的峰值流量。
这分为每分钟417次点击,或每秒7次点击。这只是前端。
添加内部事务的数量,例如数据库操作,每个用户的任何文件i / o,可能在系统中运行的任何批处理作业,报告等。 计算所有这些以获得系统需要支持的每秒,每分钟等的事务数。
如果您有诸如“平均响应时间必须为3秒等”的要求,这意味着您必须计算网络延迟/防火墙/代理等,这会变得更加复杂
最后 - 在选择硬件时,请查看每个制造商(如Sun,HP,IBM,Windows等)发布的数据表。这些数据表详细说明了测试条件下每秒的最大事务数。我们通常在实际条件下接受50%的峰值:)
但最终硬件的选择通常是商业决定。
此外,您需要在每个层至少保留2台服务器:web / app / even db以进行故障转移群集。
负载测试
建议在整个项目生命周期和发布后都有一个单独的参考测试环境,以便您可以回来在应用程序上运行专门的性能测试。将其缩放为较小的生产版本,因此如果Prod有4个服务器且Ref有1,那么您将测试25%的峰值事务等。
调整&amp;优化强>
很多时候,人们会把一些昂贵的硬件放在一起,并期望它们能够很好地工作。您需要针对各种参数(例如TCP超时等)调整硬件和操作系统 - 这些参数由软件供应商发布,这些必须在软件最终确定后完成。在Ref env上设置这些调整参数,测试然后决定你需要将哪些结转到生产。
答案 1 :(得分:0)
确定您的预期负载。 使用负载测试工具设置机器并对其运行一些测试。 如果您只有10%的峰值负载并且有一定的误差,那么您有多接近,那么您就知道需要一些负载平衡。设计并实施解决方案并再次测试。确保您的解决方案足够灵活,可以扩展。
试验和错误几乎是要走的路。这实际上取决于个人应用和使用模式。
答案 2 :(得分:0)
使用示例加载测试您的应用并衡量效果和加载指标。数据库查询,磁盘命中,延迟等等。
然后估计部署时的预期负载(请询问领域专家)(您必须考虑平均负载和峰值)。
将两者相乘并添加一些以确定。这是真正粗略地了解您的需求。
然后实现它,记住你通常不会线性扩展,你可能不会得到预期的负载;)