OpenResty在腾讯游戏营销技术中的应用和实践(4)
什么是实时竞价广告?以及实时竞价广告的流程是怎么样的?这里面有一个图。我们从最右边往左看,最右边就是我们的用户打开手机看内容,比如看头条里面的内容或者刷新闻。过程中会看到有广告位的,当刷到有广告的那个页面的时候,这个时候 APP 就会向 ADX (广告交易平台)服务器发一个广告请求。广告交易平台服务器收到这个广告请求之后,它会去把这个广告请求分发给下面的广告主的 DSP 服务器,当然DSP 服务器可能会有很多家,一般来说只有大型的广告主才会有自己的 DSP 服务器。 腾讯游戏作为一个比较大型的广告主,它也有自己的 DSP 服务器。它收到的广告请求之后会怎么做呢?它会把这个广告请求里面的流量到它的DMP(数据管理平台)数据库里面去做一个判断,怎么判断?就是这个用户是不是我需要的,如果是我需要的话,我应该给他评估一个怎样的价钱,就是说我愿意出多少钱给来获得这个用户的这个广告曝光机会。 这里面会涉及到一些机器学习的算法去评估这个出价,最终确定了出价之后,他会把这个出价原路返回给 ADX 服务器。ADX 服务器收到这个出价之后,它会等待其他广告主的 DSP服务器的出价,放在一起比较来最终选择最高出价的广告主的广告,然后把这次广告曝光的机会给到这个广告主,展示这个广告主的广告素材,这个就是一个比较简化的实时竞价广告的流程。 里面需要做的一个事情就是,在这个 ADX 和 DSP 服务器之间的交互是通过 OpenRTB 协议来做的,这里面有两个问题需要解决:
当然实时竞价广告技术方面有很多挑战,主要有这么几块的挑战。
这个是实时竞价广告系统在系统侧的一个架构简图,最上面是流量层,各ADX的广告请求流量会发到下面的接入层。接入层又包括两部分,一个是静态的 CDN,一个是动态的 RTB 网关,CDN 存放广告的素材,RTB 网关会做一件事情,就是进行 OpenRTB 协议的编解码,此外还会做一些安全和流量控制等操作。 在逻辑层包括竞价引擎,最下面的就是数据层包括 DMP 数据管理平台。这两个部分做的事情就是我们刚刚说的,一起来确定这个广告请求是不是我们需要的用户,如果是我们需要的用户的话,我们怎么样给它估算一个价钱。 这里面标了橙黄色字体的,就是我们用 OpenResty 进行过重构或者说优化过的地方,包括接入层的 RTB 网关,还有逻辑层竞价引擎,以及 DMP 的数据管理平台的一部分。 我们就一个个来看一下我们怎么样做重构和优化的:
其实我们可以简化一点,直接把这部分加密数据放到 RTB 网关里面来,当然也会遇到一个问题就是用户的加密标识信息非常大,大概会有十几亿条,另外一个设备标识加密后至少是32个字符串,如果全部存放到内存里面的话大概要十几个G,当然这还不包括查找索引额外的开销。 那我们就去寻找一个哈希算法,可以把一个固定长度的字符串直接转化为一个整型,然后我们把这个整型直接通过Bitmap直接映射到 512 兆的内存中的一个bit中去。这样就可以直接通过 512 兆的内存存放40亿的加密设备号,当然也会有不同的加密设备号映射到相同的比特位里面去了,但这个没有关系,我们还是继续走之前原来的路径,让它在最后面 DMP 里面再做一次判断。 经过这么一个简单的优化之后,我们在第一时间里面可以过滤掉大概80%以上的流量,所以对整个系统的性能也是有非常大的提升。 (编辑:ASP站长网) |