我应该如何对系统进行基准测试以确定整体最佳架构选择?

时间:2012-01-19 03:50:11

标签: mongodb architecture amazon-ec2 benchmarking backend

这是一个开放式的问题,但我正在寻找一个开放式的答案。我正在寻找能够帮助解释如何对不同系统进行基准测试的资源,更重要的是如何分析数据并根据结果做出明智的选择。

在我的具体情况下,我有一个4服务器设置,包括作为iOS游戏后端的mongo。所有服务器都运行Ubuntu 11.10。我读过很多文章,提出“如果CPU利用率很高,请进行此更改”之类的建议。作为后端架构的新角色,我没有“高CPU利用率”的概念。

我正在使用Mongo的监控服务(MMS),我正在收集有关它的一些信息,但我不知道如何做出选择或找出瓶颈。其他服务器提供从游戏客户端到mongo和back的请求,但我不太确定我应该如何对其进行基准测试或记录重要信息。我也使用亚马逊的EC2来托管我的所有实例,这也提供了一些信息。

所以,有些问题: 登录后端设置有哪些统计信息很重要? (CPU,RAM等)

监控这些统计数据的好方法是什么?

如何分析统计数据? (RAM使用率高/读取请求低等)

在尝试为我的架构创建压力测试或基准测试脚本之前,我应该了解哪些提示?

同样,如果有一个资源可以解答其中的许多问题,我不需要在这里解释,我只是无法自己找到。

如果有关我的设置的更多详细信息有帮助,我也可以提供。

谢谢!

1 个答案:

答案 0 :(得分:1)

我喜欢将性能测试视为一个小型项目,因为它有真实的需求。从要解决的问题开始:如果响应时间太慢,用户会担心游戏体验不佳吗?或者担心在不必要的服务器硬件上花费太多钱?

简而言之,是什么推动了性能测试的需求?这项练习有时被称为“确定要解决的问题”。这是关于要实现的目标 - 因为如果没有目标,为什么要经历测试性能的所有工作?确定要解决的问题最终会推动衡量标准和衡量标准。

问题确定后,下一组是写下必须回答的问题,以便在达到目标时知道。例如,如果目标是确保响应时间足够低以提供良好的游戏体验,那么我们会想到一些问题:

  • 游戏体验变得无法接受之前的最长响应时间是多少?
  • 与零无法区分的最长响应时间是多少?也就是说,如果200毫秒的响应时间对用户来说与1毫秒的响应时间相同,则响应时间的下限为200毫秒。
  • 必须考虑哪些客户端硬件?例如,如果游戏仅在iOS 5设备上运行,则不需要测试原始iPhone,因为原始iPhone无法运行iOS 5.

这些只是我提出的几个问题。一份完整,深思熟虑的清单可能看起来很不一样。

在写下问题后,下一步是确定哪些指标可以提供问题的答案。您可能已经遇到了很多指标:响应时间,每秒事务数,RAM使用率,CPU利用率等。

选择一些适当的指标后,编写一些测试方案。这些是测试的简单英文描述。例如,测试场景可能涉及与特定设备或特定版本的iOS同时模拟特定数量的游戏,以用于特定游戏级别的特定游戏设置组合。

编写方案后,请考虑为模拟服务器工作负载的任何工具编写测试脚本。然后运行脚本以为所选指标建立基线。

建立基线后,更改参数并绘制结果图表。例如,如果所选度量之一是CPU利用率与进入服务器的TCP数据包数量之后的第二个,请创建一个图表,以了解当数据包/秒从0变为10,000时利用率如何变化。

一般情况下,观察性能会发生什么变化,因为实验的自变量会被调整。使用此硬数据来回答过程中先前创建的问题。

我在Google上搜索了“软件性能测试方法”,并找到了几个很好的链接:

  1. 查看此白皮书Performance Testing Methodology by Johann du Plessis
  2. 查看此Wikipedia article的方法部分。