为提高广告、素材、活动、插件等投放收益,这些流量入口都会对接算法,通过算法能力进行精准投放;对接算法则需要在业务系统引入算法TF模型(本地深度模型),算法系统会把对线上流量特征、收益等深度学习生成的TF模型加载到对应业务系统的NAS服务中,十分钟更新一次;业务系统从NAS读取算法TF模型存储到本地缓存,也需要十分钟读取一次做更新。在实际投放中,如活动推荐,业务系统会将用户流量信息(deviceId、ua、ip等)、活动候选集和本地缓存的TF模型传入算法接口,由算法退出一个最优活动,然后进行投放。
主要缺陷
模型更新,正在使用的线程因模型丢失而异常退出。
服务刚启动或模型更新后,加载速度非常慢,流量瞬间打入会出现大量超时而异常退出。
主要目的
加快投放响应,提升用户体验;提高算法接入质量,最大化收益
基本构思
利用队列将本地缓存的算法TF模型进行排序,队列大小设置成3(可同时缓存三个TF模型,一个待删除,一个在使用,一个预热),利用队列的先进先出特性对缓存的TF模型做删除操作,删除操作只在队列满时。模型更新后不直接使用,先利用配置或线上流量进行模型预热加载,预热完成后再使用。
具体实施例
服务启动初始化流程:
- 服务启动后,先从本地NAS服务中读取TF模型;
- 对取出的模型进行预热处理,
- 将预热好的TF模型插入队列并存入本地Guava缓存。
服务运行中预热与懒删除流程:
- 服务接受到活动的投放请求后,会先从本地的Guava缓存中获取模型;
- 若缓存未过期则取出TF模型直接使用推出活动并返回;
- 若缓存已过期,先使用过期的模型同时异步从队列的头部取出一个TF模型放入缓存;
- 接着从NAS服务中读取新的TF模型,进行预热处理;
- 从队列尾部删除一个TF模型(最旧的一个),并将更改预热的TF模型从头部插入队列,结束异步线程,任务完成。
主要优点
异步预热,提升投放链路响应,避免流量等待预热过期造成浪费;惰性删除,防止实时删除正在使用的模式导致投放失败。