OpenResty在腾讯游戏营销技术中的应用和实践
下面就开始做压力测试,压力测试需要注意的是要尽量去模拟现网的真实环境和现网的处理流程去做,如果我们只是简单做一个echo测试的话,虽然这个性能数据很高,但不一定很真实,有参考价值。所以我们在腾讯内部的一个C1的机型上面,模拟真实现网流量和配置,大概测试出来的数据在18000 QPS。这个数据比之前采用了 PHP 的同步阻塞的传统的 CGI 的方式肯定是要高一个数量级的,但不一定就没有优化的空间了。 所以接下来我们继续去做瓶颈分析、性能分析。性能分析就用到了我们性能分析神器:火焰图,OpenResty社区的同学都非常熟悉火焰图 我们把 CPU 消耗前10的操作做一个归纳,归纳出来有这么几类操作,第一个是 JSON 的操作占了9.18%。第二是 L5 的操作占了4.74%(L5是腾讯内部的一个负载均衡服务的组件),另外一个就是正则表达式匹配占了 10.36%。其他的就是nginx的操作以及系统调用等。 接下来我们就对这三个方面的操作,看看是不是有优化的空间。首先我们看一下 L5 的这个操作有没有优化的空间,刚刚说 L5 是腾讯内部的一个负载均衡的组件,我们就把它也集成到 API 网关里面来了,他们的工作原理会跟本机的 L5agent 进行通讯,所以我们在做压力测试的时候要去看一下,在压力测试这么大流量的情况下,L5agent 是不是有 CPU 消耗,或者它有没有出错,接下来再看一下它的日志和出错情况是否正常的,然后再把这个用 FFI 的方式替换我们之前的Lua C/API的方式,看看有没有性能的提升。我们又再进一步去分析 L5 这个操作,发现它是用了阻塞的 UDP 的调用,所以这里是有风险的,它会影响到其他的协程的执行的,所以我们需要尽量地把它的超时时间设得更短一点,也尝试看看能否用 cosocket 的方式去实现 L5 的API,但发现协议没有开源等等,经过这一些列的尝试,最后放弃了这部分的优化。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |