3

如何给GS做压测

 3 years ago
source link: https://wudaijun.com/2019/09/gs-pressure-test/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

简单谈谈我们最近是如何给GS做压测的。

1. 压测机器人

压测机器人需要满足如下几个条件:

  1. 异步请求: 异步才能模拟真实的客户端请求和压力
  2. 数据同步: 像客户端一样缓存和处理服务器响应数据,这样才能做好有效请求和可重入
  3. 可重入: 机器人应该可以在任何时候关闭/重启,而不应该假设初始状态(比如只有注册的时候能跑)
  4. 随机性: 机器人行为尽可能随机分布,并且每次重启重新初始化随机种子

2. 压测用例

压测用例可以从这几个方面来考虑:

  1. 服务器比较耗时的API: 如寻路,战斗等
  2. 玩家越多越耗时的逻辑: 如视野同步,消息广播等
  3. 玩家日常操作频繁的行为: 如城建升级,联盟加入退出,以尽可能覆盖如任务,BUFF,排行榜等支撑系统

3. 压测统计

在做压测中,我们会从如下几个方面来获取性能指标:

  1. 函数级分析: go prof简单易用,参考go pprof性能分析
  2. 消息级统计: 统计每个逻辑Actor(如地图,玩家)对单次请求的处理时间(最大/平均/次数),消息是Actor之间交互的最小单位,每个消息处理过程是一条函数调用链
  3. 服务器请求统计: 统计每条客户端请求从网关层收到请求到网关层发出响应的时间差(最大/平均/次数),相比消息级统计,服务器请求统计包含了多个Actor处理请求相关若干消息的时间,以及Actor之间的路由和通信开销
  4. 客户端请求统计: 统计从请求发出到收到响应的处理时间(最大/平均/次数),相比服务器消息统计,多了网络层的时延和机器人本身的处理时间,这是最接近客户端实际体验的指标

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK