阿里云函数计算助力高德 RTA 广告投放系统架构升级

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 阿里云函数计算助力高德RTA广告投放系统架构升级

赵庆杰(阿里云函数计算)、林雪清(阿里云函数计算)、杜玲玲(高德)、王壁成(高德)

导言

经历了三年的疫情后,国人的出行热情空前高涨:回家看看父母亲;心心念念的旅行终于可以成行了。按照高德的估计,2023年春节出行的峰值流量将比2022年同期和2022年十一都有相当大比例的增长。然而,就在不久前,受疫情的影响,系统的流量还在相对低位运行。

如何在短时间内快速完成春节出行的备战准备工作,保障系统在春节流量高峰下平稳运行,让民众出行所必需的导航等信息服务访问可以丝般顺滑,成为了摆在技术人员眼前的迫切事情。要在流量变化很大的情况下保障系统平稳运行,同时做到降本增效,怎么做到呢?

过去几年,高德一直在坚定、持续地推进应用的Serverless化。经过深入的研究和选型,最终选择阿里云函数计算(Aliyun FC)作为其应用的的Serverless计算平台。过去的一年,更是取得了长足的进展。

高德在Serverless上的远见帮助他们以更加敏捷、经济的方式应对不确定性以及强劲复苏的春节出行:不用费心考虑流量变化带来的资源变化,无需提前按照峰值流量准备大量的计算资源,不用担心资源是否足够,经济成本大幅下降、研发和运维效率明显提升。

基于之前的Serverless成果,高德相关业务快速完成了春节出行备战准备工作,春节保障顺畅完成。

我们一起来看一个典型的案例:在去年FC是如何助力高德RTA广告投放系统实现架构升级的。

业务背景

什么是RTA

RTA 是一种实时的广告程序接口,通过发挥媒体与广告主双方的数据、模型能力,实现实时的广告优选;RTA 是一种接口技术,更是一种策略导向的投放能力。


广告媒体通过高德的RTA接口,来询问是否要投广告,RTA的服务通过查询高德自己的人群信息,返回投放结果。这样媒体投放广告可以更精准。

原系统的架构&问题

原系统服务器占用较多,依赖链路较长,每次扩容,依赖服务也需相应扩容,造成资源占用较多。

技术选型

人群命中功能

人群命中功能,本质可以归结为 检索某个元素是否在一个集合中 的问题。

这类问题,业界常用bloom filter进行解决。bloom filter 的本质是一组hash算法和bitmap的组合。优点是查询效率高,占用空间小。Redis扩展版提供了bf(bloom filter)功能。由于读取是用golang,写入是用Java的写入,为了避免跨语言带来的库不一致,可能存在的bloom filter不同实现导致的命中不一致的问题,可以采用Redis扩展版的bf(bloom filter)功能,在Redis服务端实现bf功能,保证不同语言调用的数据一致性。

借助Redis来实现人群命中功能,就可以去掉算法网关,数据中台侧的很多资源也可以因此节省下来。

数据同步

目前圈人平台的数据更新有4种类型:在线、实时、离线单次和离线周期。

目前的圈人策略都是基于离线人群进行圈定。后续虽然有可能使用在线和实时的情况,不过由于RTA广告圈定的人群一般较大,实时人群的变化的比例较低,且媒体端均有缓存,实时性要求不高,使用实时在线人群和离线人群的效果区别不大,所以目前建议只使用离线人群作为主要圈人手段。如果对实时性要求较高,可以考虑离线周期为小时维度的更新(本质上实时性取决于UDF更新频率和触发方式)。综合考虑离线周期更新Redis的方式。

Serverless化

为什么要Serverless化

通过重新划分应用和平台的界面,Serverless使得业务可以专注自身业务逻辑,人人都可以快速开发出一个稳定、安全、弹性、可扩展的分布式应用成为可能。

如何实现Serverless化

新的技术选型里,引擎服务需要访问Redis。这是一个有着高频存储访问的系统如何Serverless化的问题。


一般认为Serverless就是FaaS+BaaS。FaaS:Function as a Service,函数即服务,一般是各种后端微服务。BaaS:Backend as a Service,就是不适合以FaaS形态存在的后端服务,比如存储服务。


Serverless化的系统架构对云存储提出很高的要求,在可扩展性、延迟和IOPS方面,云存储需要能够实现与应用同等/接近的自动扩缩容能力。


阿里云提供Redis企业版服务,集群架构版本提供多种实例规格,支持最高2G总带宽,6000万的QPS。支持调整实例的架构、规格等,以满足不同的性能和容量需求。可实现无感扩缩容。可以满足引擎服务Serverless化之后对存储的要求。


而FaaS是目前后端微服务Serverless化最常见的技术选型。阿里云函数计算是Forrester测评认定的全球领先的函数计算产品,在公有云和集团内都积累了丰富的应用Serverless化经验,是合适的选择。

高性能要求

RTA广告投放系统作为为外部媒体提供相关服务的系统,具有大流量,延迟要求高的特点,是典型的高性能要求场景。这样的场景里,客户端设置的超时时间一般都很短,一旦超时,接口调用就会失败。采用Serverless的架构之后,请求的流量会先打入FC的系统,然后转发到函数实例进行处理。在这个场景里,要求FC的多租户、大流量的情况下,将请求处理的系统耗时(不包括函数自身执行时间)的平均值、P99值控制在很低的水平,才能保证请求成功率SLA的要求。

落地方案

系统架构

新架构里,中台生成人群后,调用Redis的BF.INSERT 等指令,生成bf。 引擎侧拿到设备ID后,通过Redis的BF.EXISTS 指令,判断是否在对应的人群中。

特点:

  1. 去除网关,减少链路长度
  2. 设置缓存,离线系统和在线系统解耦,提升性能
  3. 数据压缩,减少内存占用
  4. 系统Serverless化,实现实时弹性和免运维,加快应用迭代速度

请求调度

前面我们提到高德RTA广告投放系统具有流量大,延迟要求高的特点,是典型的高性能要求场景。而FC是一个典型的多租系统,一个集群内不单单有高德RTA广告投放函数,还有非常多其它业务的函数。对FC的请求调度提出非常高要求

  • 单函数QPS无上限,大量长尾函数不消耗资源
  • 调度服务要保证高可用,单点故障对服务无影响
  • 请求处理所需的系统耗时要控制在平均值小于2ms,P99值小于10ms

我们来看看FC是怎么做到的。

为了实现实时弹性,当函数的请求到达函数计算的前端机之后,前端机会找调度节点(Partitionworker)要一个处理请求的实例,并将请求转发给它。调度节点接收到请求之后,如果有实例可用,则根据负载均衡策略获取一个实例并返回给前端机;如果没有,则实时创建一个,并返回给前端机。实例的创建时间可以达到百毫秒级别。

  • 为了保证高可用和横向可扩展,调度节点采用分区架构
  • 同一个用户/函数的请求映射在连续的分片区域内
  • 单函数请求可跨越多个分片,横向扩展
  • 调度节点(Partitionworker)通过心跳向分片管理器(Partitionmaster)汇报分片和节点状态
  • Partition master 通过移动/分裂/合并分片进行负载均衡
  • 调度 100 万函数,单函数最大峰值 20 万TPS,调度延时小于 1ms
  • 任何节点故障,请求会被路由到其他 Partitionworker 上,对可用性无影响

我们看到一个请求需要通过前端机和调度节点的处理之后,才转发给具体的函数实例。因此请求处理的系统耗时包括前端机的处理时间、调度节点的处理时间、前端机和调度节点的通信时间以及前端机和函数实例的通信时间,过去一年,我们对函数计算的前端机、调度系统针对性的做了很多的优化,保证了系统在超大流量的情况下,请求处理的请求处理所需的系统耗时要控制在平均值小于2ms,P99值小于10ms。

资源交付

Serverless的场景下,业务不再需要关心资源的管理了,平台负责资源的管理和调度。业务流量上涨了,平台需要有能力快速刚性交付业务需要的计算资源;而当流量下降之后,平台需要将空闲的资源自动释放掉。

为了保证包括高德RTA广告投放函数在内的函数的资源刚性交付,FC持续优化了资源管理的实现。

Serverless新底座:神龙裸金属+安全容器

一开始,FC采用Docker容器的形式来交付函数计算实例。因为Docker存在容器逃逸存等这样的安全问题,为了保证安全性,一台宿主机只会部署一个租户的函数。由于FC存在大量的长尾函数,函数实例的规格也往往比较小,比如只有128M/0.1核,这限制了资源利用率的提升。

为了解决这个问题,FC和相关团队合作,将资源底座全面升级到神龙裸金属+安全容器,借助神龙裸金属软硬一体化技术带来的虚拟化效率提升和安全容器安全性保障后实现的多租户高密混部,大幅提升了资源的利用率。

独立的资源管控

由于K8s集群的Pod产出效率很难满足Serverless每分钟几万个实例的创建需求,所以FC与相关团队合作,实现了Pod内的计算资源的进一步细分,由FC直接对Pod里面的容器进行管控,从而实现了高密部署,以及高频创建的能力。

毫秒级资源交付速度

相比较K8s分钟级以上的资源交付速度要求,Serverless的场景需要将资源的交付速度提升到秒级、毫秒级。为了解决K8s基础设施启动耗时和函数计算对极致弹性强烈诉求之间的矛盾,FC实现了Pod资源池化、镜像加速、镜像预热、计算实例Recycle等等技术,保证了极速的资源交付速度。

高可用

为了实现高可用,FC的资源在每个region不止分布在一个 K8s 集群,而是多个 K8s 集群,做到了任何一个 K8s 集群出现问题,会自动地切换到正常集群的能力。每个集群都有多种资源池类型:独占资源池、混跑资源池和可抢占资源池。FC根据业务的特点,进行统一调度,从而把成本进一步的降低。

交付SLA

在资源的交付总量方面,目前FC已经有了单函数交付几万个实例的案例,由于FC有资源池池化动态补充的能力,理论上,FC单函数可以交付的实例数远不止几万个实例。在资源的交付速度方面,FC可以做到百毫秒级别的实例创建速度。遇到burst的情况,FC从以下两个维度来控制资源交付速度:

  1. 突增实例数:可立即创建的实例数(默认300);
  2. 实例增长速度:超过突增实例数后每分钟可增加的实例数(默认每分钟300)。

以上参数为可调整。

下图展示了在一个调用量快速增长的场景下FC的流控行为:

多机房部署

系统采用三单元部署,保证外部媒体都可以就近访问,降低网络时延。

业务效果

系统架构升级后,节省了几千核的机器资源,实现了全面Serverless化,调用链路变短了,系统变得更加弹性、健壮和易于维护,取得了很好的业务效果。

展望

在过去的2022年,高德在 Serverless 领域中已经取得了长足的进展, 然而这不是终点,而只是刚刚开始,后续FC会和高德一起推进应用的全面 Serverless 化,期望帮助高德在更多的场景去使用 Serverless,吃透 Serverless 给带来的技术红利 !


相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
人工智能 Java Serverless
阿里云函数计算助力AI大模型快速部署
随着人工智能技术的快速发展,AI大模型已经成为企业数字化转型的重要工具。然而,对于许多业务人员、开发者以及企业来说,探索和利用AI大模型仍然面临诸多挑战。业务人员可能缺乏编程技能,难以快速上手AI模型;开发者可能受限于GPU资源,无法高效构建和部署AI应用;企业则希望简化技术门槛,以更低的成本和更高的效率利用AI大模型。
138 12
|
2天前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
158 88
|
1月前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
679 243
|
13天前
|
SQL 存储 缓存
EMR Serverless StarRocks 全面升级:重新定义实时湖仓分析
本文介绍了EMR Serverless StarRocks的发展路径及其架构演进。首先回顾了Serverless Spark在EMR中的发展,并指出2021年9月StarRocks开源后,OLAP引擎迅速向其靠拢。随后,EMR引入StarRocks并推出全托管产品,至2023年8月商业化,已有500家客户使用,覆盖20多个行业。 文章重点阐述了EMR Serverless StarRocks 1.0的存算一体架构,包括健康诊断、SQL调优和物化视图等核心功能。接着分析了存算一体架构的挑战,如湖访问不优雅、资源隔离不足及冷热数据分层困难等。
|
11天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
37 10
|
11天前
|
弹性计算 运维 网络协议
卓越效能,极简运维,Serverless高可用架构
本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。
|
1月前
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
27天前
|
弹性计算 Cloud Native Serverless
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品
阿里云 SAE 邀您参加 Serverless 高可用架构挑战赛,赢取精美礼品。
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。

相关产品

  • 函数计算