
用Java语言开发出新一代广告推荐系统后,Pinterest工程团队面临下一阶段挑战,如何有效率的验证新系统各方面表现能够取代旧系统,并快速转换到新广告系统。
广告业务是Pinterest最大经济命脉。尽早淘汰高龄8岁的旧系统Mohawk、不影响现行广告业务,同时压低验证、系统并行、转换过程中的人力与IT资源成本,都是需要顾及的目标。
这个过程不只是边开飞机边换引擎,还要换上一台截然不同的型号的引擎。这不只会需要更加严谨、详细的验证过程,也会带来许多挑战,及需要避免的冲击。
新旧系统转换挑战多
新广告推荐系统转换,Pinterest主要想降低两大类冲击。首先,新系统上线前,採取旧系统并行。这会大幅增加Pinterest云端资源需求。他们希望尽可能降低并行运作期间的费时、并提升期间测试和转换效率,来压低支出。
Pinterest还希望降低对上百名工程师的干扰。系统并行运作期间,广告业务仍照常进行,如果要增减功能,需要同时在新旧系统部署,造成双倍开发和维运负担。
另外,验证实验的设计不良,也可能牵涉到不必要的系统模组,及负责的工程师。
新旧广告系统的技术特性,也为验证作业带来一系列技术挑战。
旧系统Mohawk与新系统AdMixer,使用不同语言撰写,数据处理也模式不同。这意味着,工程团队测试时,不能直接了当的比较新旧系统指标,还需要先打造一套数据转换机制、设定共同比较标準,并同时监控新旧系统与数据转换流程,才能确保验证结果可信,程序较为麻烦。
另一个挑战是,广告推荐系统对70个以上的外部系统有依赖性。这些外部系统的状态变动、随机性及系统异常,都会影响广告系统运作。
这意味着,就算Mohawk和AdMixer都如预期运作,仍可能产生不同输出,影响验证结果。验证时,还须同时考量到有相关外部系统,是否会影响输出?如何影响?并根据影响情况,来设计验证程序。
Pinterest工程团队必须先针对前述众多挑战和需求来规画因应方法,以增加实际执行时效率。
AdMixer验证期,循序渐进分三步骤
在验证新广告推荐系统表现的阶段,Pinterest採取新旧系统并行模式。这个期间,广告业务需要如常进行,自然也会持续在旧系统Mohawk中新增功能模组。不过,当工程人员开发新广告功能,只会先于熟悉可靠的Mohawk上开发,直到AdMixer各方面表现大致与Mohawk相同,才会转移到AdMixer重新开发。这是Pinterest工程团队降低人力负担与云端支出的做法。
Pinterest还将验证作业细分为3步骤:先个别验证模组功能正常,再整体验证系统指标达标,最后,将新旧系统同时投入生产环境,来验证新系统业务指标,也能与旧系统相当。
这3步骤尽可能限缩验证规模,直到工程团队十足把握,才进入影响範围更广的下一阶段。尤其最后一步,会直接影响到核心广告业务收入及云端成本支出,须兼顾谨慎与高效率,宛如小步伐的急行军。
步骤一:模组化验证系统输出值的正确性
验证AdMixer的第一步骤从个别模组开始。他们以Mohawk对应功能的模组为指标,同样资料输入新旧系统模组,新系统模组输出值若与旧系统相同,说明模组效果如设计预期。
验收新旧系统输出值一致时,Pinterest採取事后验收的方法,先储存许多笔输入输出旧系统Mohawk的数据,再输入同一批数据给新系统AdMixer,与Mohawk先前输出的数据相互比对。(图片来源/Pinterest)
具体做法是,先纪录Mohawk系统的输入与输出值,再用AdMixer执行相同输入值,对比输出值。这种事后验收法弹性较高,却会面临模组输出值受到外部系统影响的挑战。
Pinterest因应方法是,测试模组产出数据的流程是否一致。相同输入值,模组需产生同样的数据检索请求;接收同样的请求,就要回应相同的输出值。
反之,当外部系统对验证对象模组的输出情况没有影响,或者影响不大,即能直接比对新旧系统对应模组的输出值。多次输入、输出的纪录比对结果,相符程度需要高于99.9%
步骤二:端到端测试系统面指标符合预期水準
Pinterest工程团队确认每一个模组的功能如预期运作后,才会进入第二步,验证AdMixer整体系统指标,是否与Mohawk相同。
他们採取端对端的暗流量测试法(Dark traffic testing),複製实际生产环境的流量,输入到AdMixer系统,来测试整体系统运作情况。
期间,Pinterest工程团队会监控对外部请求的成功率、系统延迟等系统指标。不只如此,还会观察系统纪录和缓存等流程,是否会影响广告服务平台与其他下游系统之间的关係,例如广告成效追蹤系统等。
调整系统指标到符合标準后,Pinterest将AdMixer投入生产环境,与Mohawk进行A/B测试。此时,AdMixer进入实战阶段,即时接收部分正式环境的网路流量,从接收广告请求开始,一路处理各种资料存取、推荐、即时竞价到实际呈现广告给使用者。
Pinterest将新旧系统验证测试作业分为3步骤,先测试系统输出值正确,再确保系统效能指标不输旧系统,最后才上线到生产环境中A/B测试,验证新系统的业务指标也能与旧系统相符。(图片来源/Pinterest)
步骤三:投入实际广告业务,测试新系统业务面指标不输旧系统
第三步骤,上线实战的A/B测试期间,Pinterest会比较新旧系统的广告业务面,以及和即时服务相关的指标,例如广告营收、广告表现、用户反应、实际服务延迟等。
他们还会监控两个系统中,数据流上游的关键系统及商业指标,如对外部服务的请求成功率、快取命中率以及候选广告筛选情形等。
他们针对这些指标设置即时警报,使他们能迅速注意并修正异常,进一步缩短A/B测试花费的时间,甚至找到了不少只比较系统输出值难以发现的问题。甚至,这套即时警报和验收机制,后来Pinterest工程团队也将其用在其他专案中的除错作业。
终于,确认AdMixer在实际生产环境的业务指标与Mohawk相当后,验证阶段正式结束。Pinterest工程团队随即淘汰Mohawk,切换成AdMixer,作为正式广告推荐系统,支援未来5年的广告业务。
从设计到完全转换新系统,费时近两年。Pinterest成功于2023年Q4,一年中最忙、营收最高、流量最大的假日购物季,上线AdMixer。至今超过一年期间,历经两次假日购物季,都没有大型事故。
摆脱Mohawk 8年技术债后一年,参与广告推荐系统开发维运的团队规模,从100名工程师增加到近300名。他们更已经在AdMixer上推出多个新广告功能,来进一步拓展广告业务。