流量峰值时,队列和重试会让广告平台在时限过后才作答。在加服务器之前,先测量高峰,砍掉这些迟到的工作。
如果你的广告平台在流量峰值时出故障,能帮上忙的工程师,是那些在真实高峰期间测量它、然后按既定顺序修复的人。他们会停掉那些会在时限之后才完成的工作,限制重试和平台接收的流量,并把预算和频次计数器移出请求路径。然后,他们会在可预见的高峰到来之前增加容量。代码最后才重写,而且只重写测量结果指向的地方。
简短的答案:在实时竞价中,错过广告交易平台时限的出价就作废了。高峰时,队列、重试和共享的预算计数器会让更多出价错过时限。无论你雇谁,对方在提议加服务器或重写之前,都应该先向你要最忙那一分钟里按合作方统计的超时和按服务统计的队列深度。
流量峰值在广告平台的各个部分会表现出不同的症状:
超时和空白广告位在高峰期间就会显现。事件和预算方面的问题则可能一直藏着,直到延迟的事件进入报表和计费。
在 IAB Tech Lab 的实时竞价协议 OpenRTB 中,广告交易平台可以直接在请求里写明时限:“为避免超时,广告交易平台允许接收出价的最长时间(毫秒),包含互联网延迟”。Google Authorized Buyers 的文档说,这个时限通常在 80 到 1000 ms 之间。Google 要求从交易所在地看,85% 的响应在时限之内到达,并对无法稳定做到这一点的出价方限流。在高峰时变慢的出价方,会输掉那些迟到的竞价,之后还可能收到更少的流量。
接近容量上限时,服务开始让请求排队。Google 的《Site Reliability Engineering》(SRE)一书指出,“排队的请求会占用内存并增加延迟”,而服务器还会把资源花在那些反正要错过时限的请求上。除非代码检查时限,否则一个已经等了太久的请求仍会被完整处理,而它的回答随后被丢弃。
当对数据库、缓存或合作方的调用超时时,调用方会再试一次,而这些重试恰恰在系统最承受不起的时候涌来。SRE 一书给出了重试风暴的算术:“第一秒 100 QPS 的重试会导致 200 QPS,接着是 300 QPS,依此类推。”
广告交易平台或 SSP 会把每个请求发给许多出价方,而竞价要么等最慢的那个回答,要么不等它就关闭。Google 的 Jeffrey Dean 和 Luiz André Barroso 于 2013 年在《Communications of the ACM》上对此做了量化。在他们的例子里,每台服务器通常 10 ms 就能作答,但每一百个请求里有一个要花一秒。一个必须并行收齐 100 台这样的服务器回答的请求,于是有 63% 的概率耗时超过一秒。竞价不会等那么久。按同样的算法,如果 100 个出价方中的每一个都在每一百个请求里迟到一次,约 63% 的竞价会在至少缺一个回答的情况下关闭。
按负载做出反应的自动扩缩容,只有在测到负载之后才会给服务增加副本。例如,Kubernetes 的 Horizontal Pod Autoscaler 默认每 15 秒检查一次负载,并按有限的步幅增加新副本。每个新副本随后还得启动、通过检查、填充缓存,而 SRE 一书指出,进程刚启动时往往比稳定运行时更慢。一个以秒计的峰值,可能在新增容量承接真实流量之前就已经结束。
在一次真实高峰中最忙的那几分钟里,测量以下这些:
把你上一次大高峰的这些数字放在一页纸上。它既是给任何受雇方的任务说明,也是每一项修复的基线。
按这个顺序来:从停掉无用功的便宜改动,到增加容量或替换代码的昂贵改动,每一步之后都重新测量。
整体重写很少是正确的第一步。在新代码承接生产流量之前,它会一直把工程师从功能开发上拉走;而没有高峰期的测量数据,谁也说不清该重写哪一部分。等更便宜的修复做完之后,数字仍然反复指向某个组件,再重写这一个组件,比如一个最慢的响应都来自运行时停顿的出价方。在同一个接口后面替换它,并对比替换前后的同一组高峰数字。
流量峰值时出故障的广告平台,可以从五个地方获得帮助,每一方覆盖问题的不同部分:
签约之前先问这些问题。从回答中能看出一家公司是否做过这类工作:
amBrain是一家位于亚美尼亚埃里温的软件工程公司,用Rust构建低延迟交易平台、撮合引擎和实时竞价系统。
amBrain 诊断交易、博彩和广告技术领域的慢系统:对运行中的平台做端到端测量,报告会指明时间耗在了哪里。amBrain 接手在其他团队手里停滞的项目,并把它们推进到生产环境。
在 AdTech 领域,amBrain 从事 DSP 开发、实时竞价平台和广告交易平台工程方面的工作。
amBrain 为发布商构建供应方平台(SSP)。amBrain 构建广告服务器:定向、频次控制和报表。amBrain 为广告技术构建事件分析管道:展示和点击事件的采集、处理与报表。amBrain 在出价方内部构建 ML 推理:模型在竞价窗口之内决定出价。
amBrain 为一家客户开发了需求方平台 RTBBidder。amBrain 有三种合作方式:整体交付、专属团队,或工程师嵌入你的团队。客户拥有产品与代码的全部所有权,amBrain 的可复用组件除外。
本文不是案例研究。它并不声称 amBrain 修复过任何客户广告平台上的高峰流量故障,也不给出关于 RTBBidder 的任何数字,不给出价格或时间表。
如果你的平台在上一次高峰时出了故障,就从那次高峰的一页测量数据开始。把它发给你考虑的每一家公司,包括 amBrain,然后比较每一家打算怎么使用它。
带上您当前的架构和让您担心的故障场景,我们用半小时一起梳理。