腾讯云 Serverless 支撑「新东方」核心业务算力资源

2020-08-05 10:40:23 浏览数 (1)

谈起 Serverless 计算,在技术圈热度很高 —— 所有人都在说 Serverless,大家都声称在做 Serverless,但每个 Serverless 又不一样。我们不禁想问,Serverless 是不是只是一个炒热度的空洞热门词 ?

其实不然,Serverless 作为一种更易用、低成本、免运维的通用计算服务,已经在互联网核心业务中承担重要的算力角色,适用于各种计算应用场景。也正是因为其作为通用计算支撑,场景众多,业内使用 Serverless 计算的场景覆盖广泛,随处可见。

纵观国内 Serverless 领域,腾讯云 Serverless 已在众多互联网计算服务场景中发挥重要的作用。腾讯云 Serverless 技术已广泛应用于数百家企业,成为企业核心业务的支撑,是早已经成熟的技术。我们熟知的 58 短信、百视通、新东方、腾讯地图等企业的视频转码计算的业务,已经完全基于腾讯云 Serverless 计算服务支撑。

在新东方的核心业务 —— 课程视频转码计算的业务中,已经基于腾讯云 Serverless 计算服务落地。一般的业务场景对资源的需求通常有两类,一类是计算密集型,需要强大的计算力支持;一类是 I/O 密集型,偏重于网络和存储。对于新东方来说,随着在线教育行业的火热,线上教育正逐渐成为新东方的核心业务。而新东方的核心业务中的视频转码部分就是计算密集型业务,需要性能强大又经济耐用的算力解决方案。

背景

在视频应用、社交应用等场景下,用户上传的图片、音视频的总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。传统的容器服务,需要用户自己维护容器集群,弹性伸缩效率较低。

如果使用腾讯云 Serverless 云函数,当用户上传的视频短片,可以使用多个云函数对其分别处理,对应不同的清晰度,例如:1080p、720p 等,可以满足不同场景下用户的需求,同时,也满足移动网络带宽较小且不稳定的特性。

腾讯云 Serverless 云函数在视频应用、社交应用等场景下的核心价值:

  1. 高效整合:凭借云函数(SCF)的强大联动能力,将视频上传、视频处理、图片处理、存储场景有机地整合为一体。
  2. 灵活处理:用户可以自定义转码函数,帮助客户快速搭建定制化任务处理能力,弥补当前单独云服务的功能盲点。
  3. 平滑迁移:可以把 ffmpeg 业务方便地从物理机、云主机或容器中移植到云函数。
  4. 成本低廉:腾讯云首发 1 毫秒计费粒度,真正实现了按实际用量计费,相对传统计算服务,帮助用户获得显著的成本优势。

运行原理

使用云函数 ffmpeg 和 COS 联动做音视频转码的运行原理如下图:

对比优势(和传统容器服务)

如上图所示:在实现方面,两者差别不大;开发流程上,云函数更加简单高效;云函数自带能力较完善,如果需要对接自建平台,起 agent 不如容器方案简单。在运维方面,云函数更加易用和省心,在费用方面,云函数相比容器服务可节省费用 30% 以上。

使用腾讯云 Serverless 云函数实现音视频转码服务的优势:

  • 云函数提供标准运行环境,并且保障资源的高可用和弹性伸缩,无需专人维护;
  • 云函数基于实际业务消耗收费,不存在资源浪费;
  • 云函数的开发调试流程效率会更加高效,依赖和业务解耦,可以分别单独更新,支持实时热更新;
  • 运行环境隔离,单次请求失败不影响其他请求的正常执行。

当然,当现有业务引入云函数时,需要注意以下两点:

  • 云函数的引入,需要对接现有 CI/CD 流程,开发方式上有一定的转变;
  • 现有业务代码需要做一定的改造:主要在 ffmpeg 的编包上(云函数可以提供编包工具、提供相关)。

客户案例:新东方

下面以新东方为例,看看新东方是如何实现业务迁移,使用腾讯云 Serverless 云函数的。

背景:

在每年暑期的时候,都会有大量的学生在新东方的平台学习。以前新东方都是在自建的机房里基于服务器和 NFS 来实现音视频课程的存储和转码逻辑。但是由于暑期流量比较大,IDC 里的服务器不一定能满足计算需求,同时自建服务的硬件采购周期较长,于是期望寻找一种弹性的方法,既能够支持快速业务部署,又能高效的完成转码功能。

过程实现:

凭借腾讯云云函数 (SCF) 的强大联动能力,新东方将视频上传、视频处理、图片处理、存储场景有机地整合为一体。腾讯云Serverless 云函数支持自定义转码函数,帮助新东方快速搭建定制化任务处理能力,弥补当前单独云服务的功能盲点,把 ffmpeg 业务方便地从物理机、云主机或容器中移植到云函数。

技术方案上,在云上采用云函数 COS 的方式,可以支持弹性伸缩,即使把本地流量全部切到云上,也能全部承载。那么新的业务流程,加入任务调度模块,当业务流量过来的时候,可以自动或者手动把流量分别导入自研服务和云上服务,并在流程里加入了很多高可用的技术,比如通过任务 TraceID 进行全链路追踪、云端计算失败本地重新计算一次等。新的方案里,云端服务开发起来很简单,且不需要投入太多的运维精力。

最后,费用方面相对也很低,用多少付多少的云函数计费方式,帮助新东方节省了成本。

部署实践

下面通过一个简单的实践 Demo ,一起来体验一下吧!

前置条件

以广州地域为例:

  1. 提前在对象存储控制台上创建好 COS Bucket,Bucket 权限设置为公有读私有写。
  2. (可选)提前在文件存储控制台上开通 CFS 服务(当视频文件大于 500MB 时需要用到),用于扩展云函数的本地存储空间。
  3. 登录访问管理控制台,新建云函数的运行角色,授予该角色 COS 的读写权限、CFS 的读写权限,用于授权云函数访问相应服务。

参考文档

CFS 配置及使用文档可参考:挂载 CFS 文件系统 https://cloud.tencent.com/document/product/583/46199?from=10680。如果视频文件小于 500MB ,可以不用操作该步骤。

云函数运行角色使用说明可参考:创建函数运行角色 https://cloud.tencent.com/document/product/583/41755?from=10680

  1. 创建云函数

登录云函数控制台,选择地域后,新建函数,选择运行环境 Python3.6,搜索 “转码”,选中模板函数后,点击 “下一步”。

在页面末尾左下方,点击“高级设置”

配置环境变量,并启用运行角色。target_bucket:转码后的视频,上传到已创建好的对象存储 bucket 中。target_path: 转码后的视频,上传到 bucket 的指定目录中。运行角色:云函数在运行时,会使用运行角色换取临时秘钥,操作读取和写入 COS Bucket 的资源。

点击“完成”,完成函数创建。

  1. 创建 COS Bucket 触发器

在函数侧边栏【触发器管理】,创建 COS Bucket 触发器,如果用的同一个 Bucket 存储源视频和转码后的视频,一定要在触发器这里配置前缀过滤规则,如demo/。

  1. 配置 CFS 挂载(可选)

如果已经开通了 CFS 挂载服务,则可以在侧边栏「函数管理」->「函数配置」-> 编辑,同时启用私有网络和文件系统挂载能力。如果启用了 CFS 挂载,则需要在代码中修改文件上传路径,注释掉 76 行代码,添加 77 行,把 /tmp/new- 改成 /mnt/new-,如下所示:

测试功能

在 COS 控制台对应的 Bucket 目录下,上传视频文件,并到对应的转码目录下查看是否生成压缩的视频文件。

根据视频大小不同,压缩时间也不同,如果视频过大,压缩时间会比较久,需要较长的时间才能查看到新视频。

在云函数控制台查看函数运行日志,如下:

在函数控制台上还可以查看监控和配置告警,如下:

扩展能力

基于本 Demo,还可以扩展支持自动化 CDN 刷新/预热的能力,比如转码后的视频在回传 COS Bucket 时,还可以触发新函数执行 CDN 刷新/预热功能(该功能可以在 COS 控制台上一键开启https://cloud.tencent.com/document/product/436/45597?from=10680)。

ffmpeg 是非常强大的转码工具,除了转码、视频压缩等,还可以做视频切片等,通过修改代码里的命令参数,可以非常方便的实现该能力。甚至和云上的 AI 接口结合,实现视频加字幕等功能。

感兴趣的同学还可以借助云函数的高并发能力,实现快速转码或者切片功能。如函数 A 做任务调度,函数 B 做实际的转码/切片工作。这里可以借助 CFS 挂载能力,轻松实现跨函数的文件共享功能。

如果大家对今天介绍的腾讯云 Serverless 云函数 ffmpeg 实现音视频转码服务感兴趣,希望咨询相关业务的实现方案,可以在评论下方留言,会有专业同事联系您,为您解答。

腾讯云 Serverless 近期推出首月免费体验活动,最高领取 160 元无门槛代金券!

活动地址:https://cloud.tencent.com/act/pro/serverless-newuser?from=12792##

One More Thing

体验腾讯云 Serverless Demo 并领取新手代金券,请在 PC 端访问:

serverless.cloud.tencent.com/start?c=wx

0 人点赞