带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路

简介: 带你读《云原生架构白皮书2022新版》——网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路

网易云音乐曲库研发负责人谈音视频算法的 Serverless 探索之路


网易云音乐最初的音视频技术大多都应用在曲库的数据处理上,基于音视频算法服务化的经验,云音乐曲库团队与音

视频算法团队一起协作,一起共建了网易云音乐音视频算法处理平台,为整个云音乐提供统一的音视频算法处理平台。

本文将分享我们如何通过 Serverless 技术去优化我们整个音视频处理平台。


本文将从三个部分向大家介绍:

现状:音视频技术在网易云音乐的应用情况,引入 Serverless 技术之前遇到的问题;

选型:调研 Serverless 方案时的考虑点;

落地和展望:我们进行了哪些改造,最终的落地效果和未来规划。

1、现状

作为一家以音乐为主体的公司,音视频技术被广泛应用于网易云音乐的众多业务场景里,为了更形象的让大家感受到,

这里列举了 5 个常见的场景:

image.png


1、默认情况下,用户听到的是我们采用音频转码算法预先转好的标准化码率的音质,但由于流量有限或自身对于音

质更高的要求,想要切换到差一些或更好的音质。


2、用户可以使用云音乐 APP 里面的听歌识曲功能去识别环境中的音乐,这背后使用到了音频指纹提取及识别技术。


3、在平台上的一些 VIP 歌曲,为了能给用户更好的试听体验,我们会做副歌检测,让试听直接定位到高潮片段,这

里用到了副歌检测算法。


4、在云音乐的 K 歌场景里,我们需要对音频的音高进行展示并辅助打分,这里我们用到了音高生成算法去完善 K

歌的基础数据。


5、为了更好的满足云音乐平台上,小语种用户的听歌体验,我们为日语、粤语等提供了音译歌词,这里用到了自动

罗马音的算法。

从上面的场景可以看到,音视频技术被广泛应用于云音乐的不同场景里面,发挥了重要的作用。

从我们的音视频技术做一个简单划分,可以分为三大类:分析理解、加工处理、创作生产,这些一部分是以端上

SDK 的方式,在端上进行处理;而更多的部分,是通过算法工程化的方式,采用后端集群部署管理,以服务的形式

提供通用的音视频能力,而这部分是我们今天分享的重点。

音视频算法的服务化部署工作中,需要了解很多相关音视频算法的特点,如部署环境、执行时间、能否支持并发处理

等,随着我们落地算法的增加,我们总结了以下规律:


1、算法的执行时间长:执行时间往往与原始音频的时长成正比,云音乐很多场景下音频、视频的时长 Range 范围

是很大的,基于这个特点,我们在执行单元的设计上,往往都采用异步化的模式。


2、音视频算法具有多语言特性:云音乐的算法包括了 C++、Python 等语言,对接环境上下文会带来极大的困扰,

为了解决这个问题,我们采用标准化约定及镜像交付的方式,解耦各类环境准备的工作,所以后续对于能否支持镜像

部署,会成为我们技术选型的一个重点考察。


3、弹性的诉求正在变大:云音乐平台的歌曲,从我入职时候的 500w,到现在在线超过 6000w,增量 vs 存量的

gap 越来越大,当我们快速实施一个算法时,不仅要考虑增量的接入,更要考虑存量的快速处理,所以在系统设计中,会单独把执行单元的最小粒度剥离出来,便于快速的扩容。


基于我们对工程化的理解,及音视频算法处理的特点,云音乐的音视频处理平台的整体架构如下:


对于不同音视频算法处理的共同部分,我们做了统一的设计,包括算法处理的可视化、监控、快速试用和处理数据统

计等,对于资源的分配也设计了统一可配置的管理模式,让整个系统的公共部分可以尽可能抽象并复用。


整个音视频算法处理平台最关键的,也是今天的分享重点,是执行单元的交互与设计。云音乐通过统一的对接标准、

采用镜像交付的方式,解决了很多对接和部署上的效率问题。针对资源的使用,由于我们不断有新算法、存量 / 增量

服务的存在,在上云之前,用的是内部私有云云主机申请 / 回收、内容容器化的方式。


为了更好的描述云音乐执行单元的运行流程,我们将它更细化下,如下图所示:


通过消息队列去解耦了执行单元与其他系统的交互,在执行单元内部,我们通过控制消息队列的并发度去适配不同并

发性能的算法,尽量控制执行单元的主要工作仅用于算法的计算,这样最终在系统扩容的时候,我们能够做到最小粒

度的扩容。


在这个模式下,我们落地了 60 多种音视频算法,尤其是在近一年来,服务化的算法占到了一半,这些算法向云音乐

100+ 的业务场景提供了服务能力。但更复杂的算法、更多的业务场景,对我们的服务化效率、运维部署和弹性能力

都提出了更高的要求,在我们上云之前,在内部已经用到了 1000 台以上不同规格的云主机及物理机。


2、选型


随着业务场景和算法复杂度的增加,虽然通过了很多方式去简化了内部业务场景、算法等的对接,但越来越多夹杂存

量、增量处理的算法,不同流量的业务场景规模,以及不同业务场景可能会复用同一类算法的,让我们在处理机器资

源的时间,远比我们在开发的时间更多。


这个也促使我们开始去考虑更多的方式方法,去解决我们遇到的问题,最直接的有三个痛点。


第一个是存量和增量的差异变大,和新算法落地的增多,我们花在处理存量和增量的资源协调时间越来越多;其次是

随着算法复杂度的增高,我们在申请 / 采购机器的时候,需要关注机器的整体规格、利用率等;最后是,我们希望存

量的处理能够加快,在处理存量的时候有足够大的资源,在海量音视频数据处理时候,能够压缩存量与增量不一致的

时间。总的来讲,我们希望能够有足够大规模的弹性资源,让音视频算法服务不用再多去关注机器管理。


然而,实际改造不仅仅是关注最终服务能力,还需要综合考虑投入的 ROI。具体来看:

成本:包含两方面,改造的实施成本和计算资源的成本。前者可以结合具体方案进行评估,得到所需投入的

人日,此外,改造后在未来的灵活拓展性,也是我们需要考虑的点。后者可以通过云厂商官方给出的费用计

算模型,结合我们的执行数据,估算出来。我们在成本方面的选型关键是,在改造成本能够接受的情况下,

未来的 IT 成本不会大额的增加。


运行环境的支持:前面提到过,云音乐的运行环境比较多样化,是以镜像交付的方式进行部署的;团队内部

都有相对完善的 CICD 支持,这个要求未来的升级、部署事务,例如规格配置上,是否能够简化开发人员对

于机器等的关注。我们希望在改造后,不需要在此类事项上花费过多的时间和精力,更多的关注算法执行本身。

弹性能力:除了云厂商提供的计算资源池的规模,我们还会关注弹性算力的启动速度,是否能够对固定场景

进行实例预留,以及是否提供更符合业务诉求的灵活弹性能力,以更好的支持业务的发展。


这些其实都符合 Serverless 的定义,构建和运行应用程序都不需要对服务器进行管理、弹性能力出众等。综合以上

的考量,我们选择了公有云函数计算的方式,它能直观的映射我们目前的计算执行过程,同时也能满足后续想尝试通

过 Schema 进行算法的编排。下面我会重点分享下引入函数计算 FC 的过程。


3、落地


我们在一周内快速试用了函数计算 FC,然而一个完整的、高可靠的架构,需要考虑更多的因素。因此我们的改造重

点是只把算力任务通过函数计算 FC 弹出去,系统在整体的对外输入输出上仍保持不变,并且系统拥有流量控制能力,

能够在遇到特殊情况时,降级到私有云进行处理,保障系统的高可靠性,具体的架构改造如下图所示:


云音乐的开发环境与函数计算的适配是改造的重点,我们重点针对部署、监控和混合云支持进行了改造。部署上,我

们充分应用了函数计算在 CICD 上的支持及镜像部署的支持,实现了镜像的自动化拉取;在监控设计上,一方面利

用云上的监控报警功能,另一方面把它转化为我们内部已有监控系统的参数,让整体的开发运维处理能够维持一致性,最后是从代码设计上,考虑能够兼容混合云部署的实现,最终完成了我们音视频处理平台的 Serverless 改造。


从函数计算的计费策略上,我们可以看到,有三大因素在影响最终费用,内存的规格、触发计算的次数,以及公网出

流量的费用。直接从技术架构上看,大家可能更关注前两者,实际上流量费用也是一笔不小的费用,这个对于我们来

讲,也是关注的一个重点。


我们根据函数计算的费用特性,在存储体系仍然使用网易私有云的情况下,在第一阶段,首先选取的是公网出流量比

较少的音视频算法。关于公网出流量比较少,我举个例子,对音频进行特征提取,如一个音频进去,提取一个 256

维的数组,获取的结果就只是一个 256 维数组,它是远远小于音频自身的流量,因此出公网的流量费用会比较少。

在引入函数计算的第一阶段,特征提取类的算法得到了 10 倍速的提升;稀疏类的算法,可以理解为日常使用率很低

的算法,在成本上得到了极大的节约。除此之外,通过函数计算的镜像缓存加速能力,优化了我们节点的启动速度,

让所有的服务拉起可以在秒级完成。这些工作,降低了算法运维处理中大量的运维成本,让我们能够更聚焦关注在算

法及业务自身。


上方右边这幅图是云音乐其中一个算法的运行示例,可以看到,我们在弹性上的变化范围是非常大的,而函数计算很

好的满足了这个诉求。


未来,我们希望能够更进一步通过 Serverless 技术去解放我们在运维上的人力投入,并将从存储上进行尝试,进而

解决公网出流量的问题,让更多场景的音视频算法可以自然的实现;其次,随着算法复杂度的进一步提升,使得计算

资源上使用的更加复杂,希望通过 GPU 实例来优化计算过程;最后,在云音乐的业务场景中,实时音视频处理的场

景也越来越多,同样的,它也有明显的高峰、低谷的波动特点,我们希望沉淀更多的 Serverless 服务使用经验,最

终助力云音乐实时音视频技术的发展。


The Clou

11、

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
10月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
6月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
1622 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
11月前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
328 0
|
11月前
|
存储 运维 Serverless
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
1035 69
|
9月前
|
机器学习/深度学习 运维 监控
实时异常检测实战:Flink+PAI 算法模型服务化架构设计
本文深入探讨了基于 Apache Flink 与阿里云 PAI 构建的实时异常检测系统。内容涵盖技术演进、架构设计、核心模块实现及金融、工业等多领域实战案例,解析流处理、模型服务化、状态管理等关键技术,并提供性能优化与高可用方案,助力企业打造高效智能的实时异常检测平台。
842 1
|
11月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
584 12
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
AI训练师入行指南(三):机器学习算法和模型架构选择
从淘金到雕琢,将原始数据炼成智能珠宝!本文带您走进数字珠宝工坊,用算法工具打磨数据金砂。从基础的经典算法到精密的深度学习模型,结合电商、医疗、金融等场景实战,手把手教您选择合适工具,打造价值连城的智能应用。掌握AutoML改装套件与模型蒸馏术,让复杂问题迎刃而解。握紧算法刻刀,为数字世界雕刻文明!
435 6
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
2772 11
架构学习:7种负载均衡算法策略
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
4920 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现

热门文章

最新文章