加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

OpenResty在腾讯游戏营销技术中的应用和实践

发布时间:2019-04-11 13:12:40 所属栏目:建站 来源:顾小平
导读:各人上午好,我是来自腾讯的Shawn顾小平。先做一个简朴的自我先容。我在插手到腾讯之前一向在通信行业内里从事通讯软件的研发事变,包罗在华为,尚有UT斯达康。 2012年10月份我插手到腾讯,此刻在腾讯互动娱乐奇迹群认真部门的营销技能相干的事变。我打仗

第二个方面就是设置节点的可用性的优化,设置节点存放设置信息,设置信息固然很小的,但也可以做一些简朴的优化,最简朴就是独立陈设 MySQL 可能是 Redis,把设置信息放到这些处所去,然后本身去担保mysql/redis的可用性。

第三个还可以用 MySQL 可能更轻量级的 sqlite 去存放这个设置的信息,由打点端本身去担保它的可用性,打点端每次添加新的 API 的时辰,同时去写入到这三个设置节点内里去,然后同时写入到 API 网关的共享内存内里去,这样输入粗暴,可是简朴省事,对我们快速上线的对象来嗣魅照旧可以用的。

最后一个要领就是用ETCD ,把设置信息存放到ETCD内里,操作ETCD去中心化的协议去做担保它的可用性,以及同等性。这个方案相对会较量美满一点,可是它有一个题目就是我们要去 API 网关内里编写新的代码监听 ETCD等操纵,我们也在慢慢地向这个方案过渡。

机能优化

第三个就是机能优化,一开始我们对orange 的机能做了一个起源的测试,发明Orange机能跟着它的法则数目增进,QPS 下矫魅照旧较量明明的,然后我们就去做火焰图的说明,说明之后发明 60% 的操纵城市耗损在 json 操纵和正则表达式的匹配操纵中去,而且 json 操纵占了大头。

对我们来说第一回响就是 json 操纵花了这么多时刻,我们是不是可以去用一个越发高机能的 json 的处理赏罚库去替代 orange 内里的 Cjson呢,对付腾讯的同窗来说,都较量认识的是RapidJSON,由于这是腾讯第一个开源的项目,很快就把 RapidJSON 替代掉 orange 内里的cJSON,发明结果还很是明明,一下子就晋升了 10%+ 的机能。

接下来是不是这样就 OK 了呢?我们继承问一下为什么要做这件工作,简朴阅读了下代码,缘故起因是还长短常简朴,就是orange 本身每一次 http 哀求的时辰,每一个 worker 收到哀求的时辰城市到共享内存内里去拉取设置信息,然后去做一个json反系列化操纵,酿成每个 worker 的数据布局,不管这个设置信息有没有更新,都去做这件工作,作者也许是为了本身的思量,有设置更新的时辰,这样及时能知道。

我们接下来再去问本身第二个题目,就是可否不做这件工作,对我们来说,捐躯一点及时性,一个设置更新过半分钟可能隔几秒钟获得这个设置最新信息,我们是可以接管的。以是我们很简朴就可以去掉上面频仍的系列化操纵,就是直接起一个 Timer 去过一段时刻 check 一下这个共享内存内里有没有设置信息的更新符号即可,很是简朴的这样一个优化就直接把这部门的 JSON 操纵直接去掉了。

以是这里有一个别会是最大的优化是不做可能是柔性的均衡,这种柔性均衡也许会包罗许多方面,捐躯一些其他的资源来获得机能,捐躯内存获得机能,可能捐躯一些及时性获得机能,还包罗捐躯一些产物的体验获得机能,这些都是柔性的均衡,也许必要我们花更多时刻去思索。

接下来我们就去做进一步的优化,因此我们做一个完备的机能测试,一个完备的机能测试首要会包罗这么七个环节,前面的三个环节都是为了第四个环节的压力测试做筹备的,包罗情形筹备、设置调优、静态搜查等等。

这内里环节虽然也有本身要去留意的工作,情形筹备固然很简朴,但也要思量一些题目,就是测试机的机能和压测器材的机能每每也会有题目内里。尚有测试机和被测试机的时延等等,都必要思量,不然会影响我们测试出来的真实性。

其他的话设置调优和静态搜查这两块参考一些通用总结的履历就可以去做了。

下面就开始做压力测试,压力测试必要留意的是要只管去模仿现网的真真相形和现网的处理赏罚流程去做,假如我们只是简朴做一个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,但发明协议没有开源等等,颠末这一些列的实行,最后放弃了这部门的优化。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读