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

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

发布时间:2019-04-10 08:07:12 所属栏目:建站 来源:顾小平
导读:大家上午好,我是来自腾讯的Shawn顾小平。先做一个简单的自我介绍。我在加入到腾讯之前一直在通讯行业里面从事通信软件的研发工作,包括在华为,还有UT斯达康。 2012年10月份我加入到腾讯,现在在腾讯互动娱乐事业群负责部分的营销技术相关的工作。我接触

另外 JSON 操作确实会消耗我们很多 CPU 的性能,我们一些同学也经常在 debug 里面去打印,想把这个 debug 日志里面去打印很多数据结构里面的内容(用json.encode来打印),然后放到生成环境上去,虽然这个 debug 操作是不会执行,但是这个函数,JSON encode操作是会执行的,这样的话会导致生产环境极大的性能损耗,等等这样类似的情况还是非常多的,所以我们在实际过程当中还是要去留意这样一些不好的编码的习惯。

正则表达式匹配的优化

第三个就是正则表达式匹配的优化。大家知道正则表达式匹配都是由正则表达式引擎来做的,常用的正则表达式引擎就是PCRE,于是我们就去考虑有没有更加高性能的正则表达式匹配的引擎呢?我们也去做了一些调研,正则表达式应用最多的领域其实是在安全领域里面,安全领域里面有这样的的IPS、IDS 这样的一些安全检测和防御性的产品里面会大量地使用正则表达式匹配的操作,它之前也是用 PCRE 来做正则表达式的匹配。后来就是在这两年的时候,都统一切换到了英特尔开源的 Hyperscan 这样的正则表达式引擎来了。

为什么它会去做这样的改变呢?Hyperscan 正则表达式引擎比这个PCRE有哪些优势呢?分析后发现它有这么几个方面的不一样或者说优点。

  • 第一个就是它不仅仅是支持块模式,还支持流模式。所谓的流模式就是跨不同的网络包去做一个匹配,这个对安全产品是非常有用的。
  • 第二个就是它一次可以编译多个规则,大家知道正则表达式最后都会编译成状态机到内部去做匹配的操作。
  • 第三个就是一个输入多个规则只匹配1次,它可以并行匹配多个规则,这个是很厉害的。它的性能可能会很高,所以我们接下来我们就去做了这样一个验证,就是把30万条http get 请求(包括 URL),写到一个文本里面去。然后每个参数都做一个正则表达式的匹配,用 PCRE 的代码和 Hyperscan 的代码去读这个文件,一条条读,然后匹配每一个规则。发现 Hyperscan 匹配正则表达式所以花费的时间确实比PCRE所花的时间低很多,大概只有后者的30%左右的样子。所以接下来我们就非常果断地把它引入到我们的 API 网关里面来,用火焰图继续验证, CPU 的消耗,从之前的10%+降低到7%只有了。

所以接下来是不是还有可以优化的空间?当然有,就是开启它的并性匹配度规则的操作,这个 Hyperscan 里面也是提供了回调,然后我们只需要把每个规则设置一个标志位,然后去匹配完之后检查这个标志位以后就OK了,就可以做得到了。

另外还有一件事情是什么呢?就是正则表达式规则编写难度的问题,我们不能要求业务开发同学每次都要去编写正则表达式,这个对他们来说也不一定编写得正确,也有一些学习的成本在里面。所以我们就去看了一下大部分的参数还是比较类似的,所以就把这些参数的正则表达式做一些归纳,然后用一些文字性的描述,做了一个模板,业务人员就可以直接去选择这些模板就OK了,也很好的解决了这个问题。

安全性方面的优化

第四个方面的优化就是安全性方面的优化。安全性方面的优化要做的一件事情就是,它需要把我们这个 API 网关的安全策略去和公司现有的一些安全的产品做结合。腾讯内部有这样的自己的安全产品,叫门神,所以我们在 http 请求进来post read阶段就去和安全产品做一个交互,让它去过滤流量。它过滤的流量没有问题之后,再进入到我们的安全策略里面。当然这个安全策略也相对会比较简单,包括有 API 白名单,配置到 API 的流量才可以进到里面来。然后还有基于用户过滤的黑白名单,还有登录校验,支持腾讯的手Q、微信等的多种校验方式,也都把它集成进来了。

另外去做参数校验,参数校验则用前面提到的正则表达式做非常严格的必选参数的校验。另外就是如果做了非常严格的正则表达式匹配的话,SQL 防注入等等这样的问题也不会有。这个就是安全性方面的优化。

可维护性方面的优化

最后就是可维护性方面的优化,我们也做了两点:

  • 第一是添加了一些日志和统计的功能。例如,把 4xx/5xx 等一些错误日志独立出来,另外就是添加基于某个用户id后者请求id的染色日志跟踪打印。
  • 第二个方面的优化不一定属于今天讲的内容里面的,就是我们也做了调用链跟踪系统。API 网关在这个调用链跟踪系统里面是作为起点,它会去生成Trace id,以及创建调用链的上下文,以及结束调用链,另外就是还可以控制调用链跟踪的采集的频率等。

那到这里就快速简单介绍了一下第一个应用案例,在易用性、可用性、性能,还有安全性以及可维护性这五点,我们的一些思考和优化的过程。

OpenResty 在腾讯游戏、广告投放系统中的应用案例

接下来进入到第二部分,就是 OpenResty 在腾讯游戏、广告投放系统中的应用案例。还是和之前的内容一样,我不会涉及到很多具体的 OpenResty 的技术的细节,主要是想跟大家分享一下案例,以及在这个案例里面一些优化的思想。

这个案例相对会比较大胆一点,因为大概腾讯游戏有好几个亿的营销费用都会通过这个系统投放出去。广告投放的形式有很多种,有包段广告位的、包段时间段的、包段流量的,还有普通竞价的,还有实时竞价的。今天我想跟大家分享的就是实时竞价的广告投放形式和我们 OpenResty 的一个结合,以及 OpenResty 在里面的优化。

(编辑:核心网)

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

热点阅读