广告商(和广告代理公司)通常会利用需求方平台(DSP)执行程序化的广告购买操作。DSP使广告商能够配置自己的广告活动,并为库存广告位(例如展示广告的网站上的可投放版面)出价。随着广告商出价行为和投放网站的广告库存量逐渐增加,处理出价过程,并将其与可用库存相匹配的工作也开始变得越来越复杂。
DSP系统需要借助性能良好、可扩展的云基础设施来处理广告活动和竞价。此外,这种基础设施内的每一环节都需要尽可能降低延迟。较低的延迟可使广告与发布者的网页一起快速加载。
本文简要介绍了一种DSP解决方案,该方案对关键基础设施组件(包括前端服务器和实时竞价(RTB)服务器)进行了分布式处理。通过将这些基础设施移动到更靠近用户的地方,再加上为广告库存和用户配置文件添加强大的缓存系统,即可解决广告服务所面临的一些重大挑战,包括低延迟要求和降低出口费用。
一、克服挑战
与其他几乎全部专业的生产级工作负载一样,分布式需求方平台也需要考虑独特的基础设施。我们总结了下列几项挑战,每项挑战都可以通过精心设计的架构加以缓解或降低其影响。
1.延迟敏感性
找出导致高延迟问题的源头,尽量减少这些组件对延迟的影响。
与许多其他系统相比,广告服务需要更低的延迟。毕竟广告需要尽快展示到最终用户面前。即便延迟的微小增加,也会对客户SLA(服务等级协议)和最终用户转化率产生巨大的负面影响。在许多情况下,集中式广告服务基础设施是造成高延迟的主要原因,但企业也应该仔细研究,看现有系统中是否还有其他会造成高延迟的组件。
与传统的集中式系统相比,该解决方案的分布式特性使关键组件更接近最终用户,从而减少了延迟。此外,该解决方案还能为每个区域提供快速故障切换能力,从而减少停机时间并将延迟造成的影响降至最低。
2.成本敏感性(低利润率)
找出导致基础设施成本居高不下的源头,并设法尽可能降低成本。
由于广告服务领域的利润空间相对较小,云基础设施成本会直接影响盈利能力。降低云成本在基础设施规划中起着至关重要的作用。
基础设施成本的一个主要来源是数据出口费用。相比其他超大规模公有云平台,通过将分布式广告服务系统托管在Akamai云计算平台,可以大幅降低甚至完全消除数据出口费用。本文所介绍的解决方案使一位客户成本降低了40%。
云成本和数据出口费用增加的另一个原因是流量过大。当分布式基础设施与集中式基础设施通信时,分散某些组件而不分散其他组件会增加跨区域流量。为了限制与这种流量相关的数据出口费用,应该在分布式系统上实施缓存。利用这种方法,本地实例可以同步关键数据(如广告库存和出价),从而减少与集中式云进行通信所产生的网络流量。此外,凭借着Akamai的全球网络以及Akamai与其他超大规模公有云平台的关系,在对集中存储在另一个超大规模平台上的数据进行传输时,也可消除或减少数据出口费用。
3.与集成和迁移有关的负担
考虑基础设施变更会带来的工作负担,并尽可能设计一种可减少工作负担的架构。
在重新构建应用程序时,设计和集成新系统的工作负担以及迁移到另一个提供商的工作负担都会带来巨大挑战。本文中介绍的解决方案,只需要将部分广告服务工作流程迁移到Akamai平台,这意味着许多集中式组件无需迁移。广告库存记录系统和其他关键数据库也可以保持不变。与其他同类解决方案相比,Akamai解决方案的工作量大幅减少。
二、基础设施架构图
下图展示了在Akamai云计算平台上实现的多区域DSP基础设施组件,其中还保留了原有的集中式数据系统。该解决方案可将请求路由到最靠近最终用户(广告商和广告代理公司)的区域,能在多个后端系统间对请求进行负载均衡,可缓存任何集中数据的副本,并能监控基础设施的停机时间等。
- 客户(广告商)与DSP交互,借此配置广告活动并竞标广告位库存。
- 广告商提交竞价,将其广告显示给最终用户。这一过程采用了HTTPS API请求。
-
该请求被路由到多个计算区域(数据中心)之一。由于这是一个分布式应用,因此请求会通过一个基于DNS的智能负载均衡解决方案(例如Akamai Global Traffic Manager,Akamai GTM)进行路由。GTM会决定哪个区域能最好地满足客户请求。这需要考虑到位置、性能和可用性等因素。像这样的负载均衡解决方案是降低延迟(提高广告展示速度)和提高弹性(确保一次故障不会影响所有广告)的理想方式。
- 本地负载均衡器(例如运行HAProxy的计算实例)会将请求路由到多个后端集群之一。为了实现冗余和扩展,一个区域内通常会使用多个集群。诸如LKE这样的编排平台可管理集群基础设施和运维任务。
- 前端API网关开始处理请求。这些系统在竞价服务器之前运行,这是为了降低数据出口费用和竞价处理成本。这些前端服务器通常能应用业务逻辑,与广告交易所、竞价服务器和集群上的其他微服务进行通信。
- 前端网关向竞价服务器发送竞价请求。在竞价过程中,竞价与本地广告库存进行匹配,并与使用DSP平台的其他广告商进行比较。
- 处理竞价时,会先查询本地缓存服务器。该缓存包括来自任何集中式基础设施的数据,如广告库存数据库、用户配置文件等。这就避免了每次请求时都要查询中央记录系统所带来的延迟。
- 本地缓存会定期更新。缓存中的数据会被刷新,从而确保系统会使用到最新信息。
- 将本地缓存中的信息发回竞价服务器。
- 竞价服务器处理竞价,即决定竞价是被接受(并将结果发送给广告交易平台或提供广告位的网站)还是被拒绝。
- DSP通过更新网页界面将竞价结果告知广告商。
三、涉及到的系统和组件
1.全局负载均衡器:Akamai Global Traffic Manager(GTM)可用于将传入请求路由到最靠近最终用户的区域。
2.本地负载均衡器:在每个区域内,使用负载均衡器来均衡多个后端集群之间的流量。为避免停机,该负载均衡器应具备冗余,并能优雅地故障切换到辅助负载均衡器。可选择的负载均衡解决方案包括NodeBalancers、NGINX和HAProxy。
3.DSP广告服务集群:广告服务集群在LKE等容器编排平台上运行,由多个计算实例组成,每个实例运行下列一个或多个组件。每个区域内应使用多个集群,以保持冗余并实现高可用性。
- 前端API网关:该网关会代理集群上托管的其他广告相关API的所有API请求。可选择的API网关包括Kong、NGINX、Tyk和Gravitee。
- 实时竞价服务器:托管了决定接受或拒绝哪些竞价的所有逻辑。可通过API访问,请求只能来自该集群的API网关。
- 缓存系统:每个集群都应包含一个本地缓存,缓存了与广告相关的重要集中式数据库,如广告库存和可能的用户配置文件。可选择的本地缓存系统包括Redis、Apache Ignite、Memcached和Couchbase。
4.监控系统:为监控该区域内负载均衡器和集群的状态,应配置监控和/或日志系统。可选择的监控解决方案包括Prometheus、Grafana和ThousandEyes。
相比传统的集中式DSP,这样的分布式DSP解决方案可有效降低延迟,提高可用性和性能,让广告商需要投放的广告用最快速度展示到全球任意地区最终用户的面前。