众所周知,云服务器的性能是我们挑选云主机的最重要的指标,今天给大家介绍的就是优 豆云主机,优 豆云是提供免 费虚拟主机免 费云服务器的,希望大家不要错过了。

1、现网数据预估

现网数据预估是根据压力测试过程中的部分数据,对未来大量用户访问的情况机型预估。图中的横轴代表现网吞吐量,纵轴代表CPU压力。

图中绿色的部分代表当前的服务器压力,当收集一段时间数据之后,可以模拟一条曲线。假设对服务器的上线成本预估是80%,可以通过曲线拟合的方式推测出现网的能力是多少,也从而推断出最大上限是多少。

缺点:通常游戏服务器都是比较复杂的,这种方式只适合简单的服务器拟合,复杂服务器数据就不太准确。

2、真人压测

真人压测就是通过邀请一定数量的真实用户来玩游戏,从而对服务器达到一个测试效果。这种方式他最大特点在于用户的行为相对是最真实的,因为用户的使用完全不会受到限制,和线上一个真实用户一样。目前游戏上线过程中的“封测”,就可以被认为是一种真人压测,可以帮助开发者发现一些性能问题。

但是这种方式也存在着弊端:

●暴露出的性能问题有限

许多经过封测的游戏到上线还会产生问题,原因之一就是封测人数通常还是太少,虽然有几百或者几千用户在玩,但是并发并不够,不足以暴露服务端性能问题;

●不适合调优

服务器性能测试不光需要暴露服务器的问题,暴露问题之后还需要不断的回归调优,但是真人是无法完全重复这些行为方式的。


3、接口测试

服务器方面的接口测试与传统意义上的接口测试略有不同,当开发人员需要对一套服务器进行评估,但是又时间不足的情况下,我们可以考虑选择一些具有代表性的功能,以及一些高风险功能进行测试,通过以小见大的方式,来评估整套服务器性能。

当然这个方法的主要问题就是无法遍历整个服务器的接口,难以避免一些微小的问题。


4、录制回放

这里面包含两部分,“录制”就是通过抓取数据包的方式,来获取游戏时的协议,比如用户登录游戏时抓取登录包;“回放”即把这些捕获的协议重新发送给服务端,这样理论上就可以通过工具放大协议量级达到性能测试的目的,比如将之前录制的登入协议扩大1w倍给服务器,这样就模拟了1w人同时登入的情况。

这个方法存在的问题是,游戏的协议交互非常复杂,如果只是单纯的放大数据包,对于服务器是产生不了多大的压力的。这类方法比较适合固定输入输出服务类型的测试。


5、机器人模拟

机器人模拟测试是对以上各种测试做了一个平衡, 通过高还原真实玩家的用户行为,模拟高并发场景,从而得到类似很多人同时游戏的测试效果。机器人模拟有三个优势:

高还原游戏玩法,深度模拟真实用户行为:

1. 并发性不受限制,从1W到10W,压力能够自主设置;

2. 可以反复执行,便于性能调优回归;

3. 实现7*24小时不断监控,在开发提交代码之后,版本在自动编译之后就跑新的测试,这样每天都能进行性能监控,在调优方面,完全地进行一个重复性测试,可以不断的进行回归和调优。

这个方法的问题就在于机器人模拟需要专人开发,对测试者的开发能力,分析能力都有一个比较高的要求。


说到这里,我们对之前所有的服务器性能测试方法进行了一个总结:


我们可以发现,速度与准确性始终是对立的,如果游戏开发者队友服务器测试有一个明确的规划,对服务器压测有一定的时间预留,机器人模拟的效果是非常好的。

如何实现机器人模拟

那么我们到底是如何来开发一款进行服务器性能测试的机器人呢?

整个开发过程主要可以概括为三大步骤,建模, 分析, 开发。

第一步,建模。

建模是什么呢,建模是为了模拟真实玩家行为,分为两种方法:

1)探索典型玩家关键路径


通过大量玩家数据的支撑,选择最多的行为路径,设计机器人模拟的行为。

2)通过封测过程中的运营数据,生成专家视图


这个方法就是通过去测试服中搜集用户的协议数据,并对这些协议数据进行分析,确定各自是什么行为,把用户的这些协议数据还原成为用户行为的操作过程就像是把一块块散乱的拼图重新组织起来一样。

在这个过程中,最简单的是按比例组织,通过数据分析,发现用户登录,战斗各自占据多少比例,以这个比例来分配一定的人数进行登录和战斗。但是这个方式并不太适合游戏,对于游戏本身来说,一百个人不断的重复登录的行为,一百个人同时重复游戏的行为,显然是不符合逻辑的。

那么在分析的过程中,采用概率的方式,是更加贴近一个真实用户的行为的。当模拟一个真实用户登录之后,有一定的可能性会重新登录,还有一部分可能性就进行战斗,例如机器人有10%概率重新登入,50%概率进行战斗。 同时我们还需要考虑对角色身上的装备数据, Cache的命中,数据库容量等等,目的是让机器人更接近真实用户,更加符合一个真实用户的行为。

第二步,分析。

那么我们会对客户端进行行为交互和协议分析。一方面,为后续协议开发实现做准备;另外,在登入的过程中,会产生大量的协议,如果没有对客户端进行分析,可能只是调用了登录的协议,从实际的协议交互上来说,一次登录可能包含了很多其他的协议信息,那这时我们实现登入就不能仅仅是个简单的登录协议,可能还包含拉取邮件信息,拉取好友信息等协议,两者之间对登入的性能差异影响非常大。

第三步,代码开发。

主要包含两部分:

1)协议的开发,包括协议的实现,协议的解包等;

2) 业务逻辑的组织,主要对上述游戏模型进行实现。

服务器性能测试工具的使用

不过令人遗憾的是,对于游戏开发者的实际情况来说,充足的测试时间并不是每次都可以保证的,而且对于模拟机器人的开发过程本身又是一个很大的投入,对于一些通用场景,如果能够有通用的平台代码可以调用,相信对于游戏开发者是一种极大的解放。

对于服务器性能测试来说,好的测试要做到这样几点:

业务场景模拟。可编码解析任意协议,实现复杂业务场景。

发现瓶颈。支持使用场景中复杂的数据传输行为,比如“登录”“查看个人信息”等,更加真实的模拟用户行为,发现服务器问题;

持续压力。实现7*24小时一定量级的服务器压力;

触达极限。短时间内触达服务器的压力上限。

灵活自定义。对于类似游戏的复杂混合场景,可以结合在线代码开发IDE,实现对任何标准或自定义协议的通信。