网易云音乐音视频算法的 Serverless 探索之路

简介: 网易云音乐最初的音视频技术大多都应用在曲库的数据处理上,基于音视频算法服务化的经验,云音乐曲库团队与音视频算法团队一起协作,一起共建了网易云音乐音视频算法处理平台,为整个云音乐提供统一的音视频算法处理平台。本文将分享我们如何通过 Serverless 技术去优化我们整个音视频处理平台。

作者:廖祥俐
策划:望宸

网易云音乐最初的音视频技术大多都应用在曲库的数据处理上,基于音视频算法服务化的经验,云音乐曲库团队与音视频算法团队一起协作,一起共建了网易云音乐音视频算法处理平台,为整个云音乐提供统一的音视频算法处理平台。本文将分享我们如何通过 Serverless 技术去优化我们整个音视频处理平台。

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

  • 现状:音视频技术在网易云音乐的应用情况,引入 Serverless 技术之前遇到的问题;
  • 选型:调研 Serverless 方案时的考虑点;
  • 落地和展望:我们进行了哪些改造,最终的落地效果和未来规划。

现状

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

1.png

  1. 默认情况下,用户听到的是我们采用音频转码算法预先转好的标准化码率的音质,但由于流量有限或自身对于音质更高的要求,想要切换到差一些或更好的音质。
     
  2. 用户可以使用云音乐 APP 里面的听歌识曲功能去识别环境中的音乐,这背后使用到了音频指纹提取及识别技术。
     
  3. 在平台上的一些 VIP 歌曲,为了能给用户更好的试听体验,我们会做副歌检测,让试听直接定位到高潮片段,这里用到了副歌检测算法。
     
  4. 在云音乐的 K 歌场景里,我们需要对音频的音高进行展示并辅助打分,这里我们用到了音高生成算法去完善 K 歌的基础数据。
     
  5. 为了更好的满足云音乐平台上,小语种用户的听歌体验,我们为日语、粤语等提供了音译歌词,这里用到了自动罗马音的算法。

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

从我们的音视频技术做一个简单划分,可以分为三大类:分析理解、加工处理、创作生产,这些一部分是以端上 SDK 的方式,在端上进行处理;而更多的部分,是通过算法工程化的方式,采用后端集群部署管理,以服务的形式提供通用的音视频能力,而这部分是我们今天分享的重点。

音视频算法的服务化部署工作中,需要了解很多相关音视频算法的特点,如部署环境、执行时间、能否支持并发处理等,随着我们落地算法的增加,我们总结了以下规律:

2.png

  1. 算法的执行时间长:执行时间往往与原始音频的时长成正比,云音乐很多场景下音频、视频的时长 Range 范围是很大的,基于这个特点,我们在执行单元的设计上,往往都采用异步化的模式。
     
  2. 音视频算法具有多语言特性:云音乐的算法包括了 C++、Python 等语言,对接环境上下文会带来极大的困扰,为了解决这个问题,我们采用标准化约定及镜像交付的方式,解耦各类环境准备的工作,所以后续对于能否支持镜像部署,会成为我们技术选型的一个重点考察。
     
  3. 弹性的诉求正在变大:云音乐平台的歌曲,从我入职时候的 500w,到现在在线超过 6000w,增量 vs 存量的 gap 越来越大,当我们快速实施一个算法时,不仅要考虑增量的接入,更要考虑存量的快速处理,所以在系统设计中,会单独把执行单元的最小粒度剥离出来,便于快速的扩容。

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

3.png

对于不同音视频算法处理的共同部分,我们做了统一的设计,包括算法处理的可视化、监控、快速试用和处理数据统计等,对于资源的分配也设计了统一可配置的管理模式,让整个系统的公共部分可以尽可能抽象并复用。

整个音视频算法处理平台最关键的,也是今天的分享重点,是执行单元的交互与设计。云音乐通过统一的对接标准、采用镜像交付的方式,解决了很多对接和部署上的效率问题。针对资源的使用,由于我们不断有新算法、存量/增量服务的存在,在上云之前,用的是内部私有云云主机申请/回收、内容容器化的方式。

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

4.png

通过消息队列去解耦了执行单元与其他系统的交互,在执行单元内部,我们通过控制消息队列的并发度去适配不同并发性能的算法,尽量控制执行单元的主要工作仅用于算法的计算,这样最终在系统扩容的时候,我们能够做到最小粒度的扩容。

在这个模式下,我们落地了 60 多种音视频算法,尤其是在近一年来,服务化的算法占到了一半,这些算法向云音乐 100+ 的业务场景提供了服务能力。但更复杂的算法、更多的业务场景,对我们的服务化效率、运维部署和弹性能力都提出了更高的要求,在我们上云之前,在内部已经用到了 1000 台以上不同规格的云主机及物理机。

选型

随着业务场景和算法复杂度的增加,虽然通过了很多方式去简化了内部业务场景、算法等的对接,但越来越多夹杂存量、增量处理的算法,不同流量的业务场景规模,以及不同业务场景可能会复用同一类算法的,让我们在处理机器资源的时间,远比我们在开发的时间更多。

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

5.png

第一个是存量和增量的差异变大,和新算法落地的增多,我们花在处理存量和增量的资源协调时间越来越多;其次是随着算法复杂度的增高,我们在申请/采购机器的时候,需要关注机器的整体规格、利用率等;最后是,我们希望存量的处理能够加快,在处理存量的时候有足够大的资源,在海量音视频数据处理时候,能够压缩存量与增量不一致的时间。总的来讲,我们希望能够有足够大规模的弹性资源,让音视频算法服务不用再多去关注机器管理。

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

  • 成本:包含两方面,改造的实施成本和计算资源的成本。前者可以结合具体方案进行评估,得到所需投入的人日,此外,改造后在未来的灵活拓展性,也是我们需要考虑的点。后者可以通过云厂商官方给出的费用计算模型,结合我们的执行数据,估算出来。我们在成本方面的选型关键是,在改造成本能够接受的情况下,未来的 IT 成本不会大额的增加。
  • 运行环境的支持:前面提到过,云音乐的运行环境比较多样化,是以镜像交付的方式进行部署的;团队内部都有相对完善的 CICD 支持,这个要求未来的升级、部署事务,例如规格配置上,是否能够简化开发人员对于机器等的关注。我们希望在改造后,不需要在此类事项上花费过多的时间和精力,更多的关注算法执行本身。
  • 弹性能力:除了云厂商提供的计算资源池的规模,我们还会关注弹性算力的启动速度,是否能够对固定场景进行实例预留,以及是否提供更符合业务诉求的灵活弹性能力,以更好的支持业务的发展。

这些其实都符合 Serverless 的定义,构建和运行应用程序都不需要对服务器进行管理、弹性能力出众等。综合以上的考量,我们选择了公有云函数计算的方式,它能直观的映射我们目前的计算执行过程,同时也能满足后续想尝试通过 Schema 进行算法的编排。下面我会重点分享下引入函数计算 FC 的过程。

落地

我们在一周内快速试用了函数计算 FC,然而一个完整的、高可靠的架构,需要考虑更多的因素。因此我们的改造重点是只把算力任务通过函数计算 FC 弹出去,系统在整体的对外输入输出上仍保持不变,并且系统拥有流量控制能力,能够在遇到特殊情况时,降级到私有云进行处理,保障系统的高可靠性,具体的架构改造如下图所示:

6.png

云音乐的开发环境与函数计算的适配是改造的重点,我们重点针对部署、监控和混合云支持进行了改造。部署上,我们充分应用了函数计算在 CICD 上的支持及镜像部署的支持,实现了镜像的自动化拉取;在监控设计上,一方面利用云上的监控报警功能,另一方面把它转化为我们内部已有监控系统的参数,让整体的开发运维处理能够维持一致性,最后是从代码设计上,考虑能够兼容混合云部署的实现,最终完成了我们音视频处理平台的 Serverless 改造。

从函数计算的计费策略上,我们可以看到,有三大因素在影响最终费用,内存的规格、触发计算的次数,以及公网出流量的费用。直接从技术架构上看,大家可能更关注前两者,实际上流量费用也是一笔不小的费用,这个对于我们来讲,也是关注的一个重点。

我们根据函数计算的费用特性,在存储体系仍然使用网易私有云的情况下,在第一阶段,首先选取的是公网出流量比较少的音视频算法。关于公网出流量比较少,我举个例子,对音频进行特征提取,如一个音频进去,提取一个 256 维的数组,获取的结果就只是一个 256 维数组,它是远远小于音频自身的流量,因此出公网的流量费用会比较少。

在引入函数计算的第一阶段,特征提取类的算法得到了 10 倍速的提升;稀疏类的算法,可以理解为日常使用率很低的算法,在成本上得到了极大的节约。除此之外,通过函数计算的镜像缓存加速能力,优化了我们节点的启动速度,让所有的服务拉起可以在秒级完成。这些工作,降低了算法运维处理中大量的运维成本,让我们能够更聚焦关注在算法及业务自身。

7.png

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

未来,我们希望能够更进一步通过 Serverless 技术去解放我们在运维上的人力投入,并将从存储上进行尝试,进而解决公网出流量的问题,让更多场景的音视频算法可以自然的实现;其次,随着算法复杂度的进一步提升,使得计算资源上使用的更加复杂,希望通过 GPU 实例来优化计算过程;最后,在云音乐的业务场景中,实时音视频处理的场景也越来越多,同样的,它也有明显的高峰、低谷的波动特点,我们希望沉淀更多的 Serverless 服务使用经验,最终助力云音乐实时音视频技术的发展。

作者:廖祥俐,2015年加入网易云音乐,云音乐曲库研发负责人。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小小的 likely 背后却大有玄机!

作者 | 张彦飞allen来源 | 开发内功修炼今天我给大家分享一个内核中常用的提升性能的小技巧。理解了它对你一定大有好处。在内核中很多地方都充斥着 likely、unlikely 这一对儿函数的使用。随便揪两处,比如在 TCP 连接建立的过程中的这两个函数。//file: net/ipv4/t…

阿里云马涛:因云进化的基础软件

简介: 基础软件的云原生化。 编者按:2021 年10 月20 日,在2021 云栖大会云计算产业升级峰会上,阿里云“因云而生”云原生心智大图正式发布,包含弹性计算、云网络、基础产品、基础设施、操作系统、云安全、开放平台等7个…

阿里云ECI如何6秒扩容3000容器实例?

简介: 2021年云栖大会现场,阿里云工程师演示了在6秒时间内成功启动3000个ECI,并全部进入到Running状态。本文将为你揭开阿里云ECI是如何做到极速扩容的。 引言 根据最新CNCF报告,有超过90%的用户在生产环境使用容器,…

matlab 轴承 压力分布 绘图,数值计算绘制动压轴承压力场分布图

动压轴承的压力场分布,要求求解雷诺方程的简化形式为:!!xh3!!px!"!!zh3!!pz!"6U"!h!x公式中参数的含义参见流体动力学。1编程求解雷诺方程采用有限差分的五点差分格式,120120网格点计算。采用C语言编写求解轴承压力分布的程序,可以大大提高运行速度,节省计算时间…

巧用友盟+U-APM 实现移动端性能优化—启动速度

简介: 移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 APP 怎么这么大?”、“怎么一直在 APP 封面图转悠,点不进去”、“进入详情效果有些卡”、“用 4G 使用你们的 APP&#xff…

第25版 OpenStack Yoga 已发布

OpenStack社区今日正式发布第25版-Yoga,该版本通过支持先进的硬件技术如SmartNIC DPUs,优化与云原生软件如Kubernetes、Prometheus等的集成以及减少技术债等方式来保持OpenStack内核的稳定性与可靠性。 OpenStack作为开源基础设施即服务(Iaa…

项目实战总结以及接入U-APM

简介: 导致 App 性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线、系统函数、编程范式、数据结构等导致的。即便是较有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”&#xf…

oracle redo 200mb,Oracle的redo log在各场景下的恢复

Oracle的redo log非常重要,redo log损坏将导致数据库开法开启或数据丢失,针对redo log在各种场景下如何打开或恢复数据库,特别模拟测试说明:各场景包括如下(共6个场景):场景一.非归档下inactive状态的redo 恢复场景二.非归档下act…

站在原地就是退步——除了死磕通道,云通讯服务商还该做些什么?

受访嘉宾:吴佳钊,杭州云片网络科技有限公司联合创始人、CTO 当前,全球通信云已经步入2.0时代,最大的变化在于通信形式的变革:传统短信语音的通信形式将逐步向包括即时通讯IM实时音视频RTC的互联网通信转变。尤其在5G时…

Cube 技术解读 | 详解「支付宝」全新的卡片技术栈

简介: 魔方卡片(Cube),让 App 首页实现敏捷更新。 CodeHub#7 正式落幕,来自蚂蚁集团的技术专家「京君」与掘金社区的开发者们分享了「支付宝」全新的卡片技术栈——魔方卡片(Cube)。 京君围绕 C…

庖丁解InnoDB之REDO LOG

简介: 数据库故障恢复机制的前世今生一文中提到,今生磁盘数据库为了在保证数据库的原子性(A, Atomic) 和持久性(D, Durability)的同时,还能以灵活的刷盘策略来充分利用磁盘顺序写的性能,会记录REDO和UNDO日志,即ARIES方…

oracle 取整点的数据,Oracle SQL语句操作数字:取整、四舍五入及格式化

用oracle sql对数字进行操作: 取上取整、向下取整、保留N位小数、四舍五入、数字格式化取整(向下取整):select floor(5.534) from dual;select trunc(5.534) from dual;上面两种用法都可以对数字5.534向下取整,结果为5.如果要向上取整 ,得到结…

Web 自动化神器,批量下载美图,可直接导入使用

‍‍作者 | 小碗汤来源 | 进击云原生今天为大家分享一款前端自动化操作神器: Automa。Automa介绍它是一款 Chrome 插件,即使你不会写代码,也能按照自己的需求,完成一系列自动化操作。利用它,你可以将一些重复性的任务实现自动化、…

RocketMQ 5.0 POP 消费模式探秘

简介: POP Consumer—使客户端无状态,更轻量! 作者:凯易&耘田 前言:随着 RocketMQ 5.0 preview 的发布,5.0 的重大特性逐步与大家见面。POP Consumer 作为 5.0 的一大特性,POP 消费模式展现…

oracle排列组合,sql实现排列组合

employe 表中的数据EMPNO ENAME JOB DEPTNO SAL101 实施一部员工1 部门领导 10 1205.775102 实施一部员工2 普通员工 10 1341.174103 实施一部员工3 普通员工 10 1195.74104 实施一部员工4 普通员工 10 1529.176105 实施一部员工5 普通员工 10 1901.084106 实施一部员工6 普通…

【ESSD技术解读-01】 云原生时代,阿里云块存储 ESSD 快照服务如何被企业级数据保护所集成?

简介: 本文描述了阿里云块存储快照服务基于高性能 ESSD 云盘提升快照服务性能,提供轻量、实时的用户体验及揭秘背后的技术原理。依据行业发展及云上数据保护场景,为企业用户及备份厂商提供基于快照高级特性的数据保护的技术方案,满…

一把王者的时间,我就学会了Nginx

作者 | 步尔斯特来源 | CSDN博客Nginx 简介Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx 网站用户有&…

【ESSD技术解读-02】企业级利器,阿里云 NVMe 盘和共享存储

简介: 当前 NVMe 云盘结合了业界最先进的软硬件技术,在云存储市场,首创性同时实现了 NVMe 协议 共享访问 IO Fencing 技术。它在 ESSD 之上获得了高可靠、高可用、高性能,同时基于 NVMe 协议实现了丰富的企业特性,如…

php数组json函数,php数组转json的函数是什么

php数组转json的函数是json_encode()。json_encode()函数可以对变量进行JSON编码,将其转换为json字符串数据,语法格式“json_encode (value)”。本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php数组如何转为json&#xff1…

使用友盟+的APM服务实现对移动端APP的性能监控

简介: 对于信息系统服务,一般我们的重点监控对象都是核心的后端服务,通常会采用一些主流的APM(Application Performance Management)框架进行监控、告警、分析。那么对于移动端的APP、小程序的运行时状态如何进行实时监控与分析呢&#xff1f…