V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scf10cent
V2EX  ›  推广

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

  •  
  •   scf10cent · 2020-08-11 19:35:32 +08:00 · 1876 次点击
    这是一个创建于 1326 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    Serverless Demo 体验 👉 serverless/start

    其实不然,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 的读写权限,用于授权云函数访问相应服务。

    参考文档

    1. 创建云函数

    登录云函数控制台,选择地域后,新建函数,选择运行环境 Python 3.6,搜索「转码」,选中模板函数后,点击「下一步」。

    在页面末尾左下方,点击「高级设置」

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

    点击「完成」,完成函数创建。

    2. 创建 COS Bucket 触发器

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

    3. 配置 CFS 挂载(可选)

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

    测试功能

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

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

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

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

    扩展能力

    基于本 Demo,还可以扩展支持自动化 CDN 刷新 /预热的能力,比如转码后的视频在回传 COS Bucket 时,还可以触发新函数执行 CDN 刷新 /预热功能,该功能可以在 COS 控制台上一键开启

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

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


    欢迎访问:Serverless 中文网

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2759 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:57 · PVG 19:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.