作者
李汇波,腾讯业务运维高级工程师,目前就任于 TEG 云架构平台部 技术经营与品质核心,现负责微信、QQ 社交类业务的视频转码运维。
摘要
随着短视频衰亡和疾速倒退,对于视频转码解决的需要也越来越多。低码率高清晰,4K、超清、高清、标清适配不同终端和不同网络环境来晋升用户体验,以及水印、logo、裁剪、截图等多样化的用户需要。对于资源的多样化需要和弹性扩缩容也须要疾速响应,而随着公司自研上云我的项目的推动,设施的稳固行和多样性可提供更多抉择,来满足像朋友圈、视频号、广告、公众号等转码业务疾速、稳固、抗突发的资源需要。
服务场景
MTS(Media transcoding service)的定位是点播场景准实时(及离线)视频解决服务。为业务提供分钟级可实现的高清压缩、截图水印、简略剪辑等根本视频解决性能,同时具备向下集成定制画质减少,品质测评等深度性能的能力。
业务开发者定义批量解决模板,当内容生产方上传数据时,触发转码作业输入多规格压缩视频和视频封面,即可发表推送。
背景
微信侧和小视频平台承接着十分多视频文件,而这些视频根本都在转码平台依据业务需要进行解决,为了降低码率缩小老本,升高用户因网络而卡顿等性能。最早转码平台基本上是各个业务保护一个独立集群,集群繁多,集群之间资源也不能相互调度应用,并且单集群容量较小,申请量大的业务不得不部署多套集群撑持。
这给经营带来很大的挑战,须要一套容量下限更大,资源调度更灵便,经营更便捷的平台。而随着公司自研上云我的项目的推动和 TKE 容器化,转码平台须要能疾速对接 TKE 资源,利用公司海量计算资源来满足业务对视频转码的诉求。
建设思路和布局
视频接入和转码过程常常面临多业务突发,在保障业务品质前提下又须要晋升利用率,进步经营的效率。
平台能力建设 :单集群能力下限进步,业务频控隔离互不影响,资源调度灵便调整
资源管理建设 :围绕 TKE 容器平台充沛开掘闲暇碎片资源,通过 HPA 错开高下峰弹性扩缩容,晋升 CPU 利用率。与此同时,利用视频接入服务流量高、CPU 使用率低,转码服务流量低、CPU 使用率高特点,通过两种场景混部充分利用物理机资源,避免纯流量集群低负载
经营零碎建设 :适配业务场景,欠缺变更高低架流程,过程监控告警剔除,建设稳固保障平台
平台能力建设
架构降级
老转码平台架构:
- 为 master/slave 主从构造,容灾能力绝对较弱,而且受限 Master 性能,单集群大略治理 8000 台 worker
- 资源调度层面不能敌对辨别不同核数的 worker,导致有些负载高,有些负载低
-
不可能基于业务维度做频控,单业务突发影响整个集群
新转码平台架构:
- 合并 Master/Access 模块为 sched,sched 调度模块分布式部署,任一节点挂了可主动剔除掉
- worker 和 sched 建设心跳并且上报本身状态和 cpu 核数等信息,便于调度依据 worker 负载来分配任务,保障同一个集群部署不同规格 cpu worker 负载平衡
- 单集群治理能力 3w+ worker,满足节假日业务突增
- 业务合并到公共大集群,可对单业务进行频控,缩小业务间接的烦扰
架构的降级,平台不再受限单集群能力,日常和节假日顶峰可疾速满足需要,并且业务合并大集群错开高下峰,可资源利用
接入服务 svpapi 降级 DevOps 2.0
借助业务上 tke 东风,小视频平台接入服务 svpapi 实现标准化降级。重要改良包含:
- 整合原有多变更零碎、多监控零碎、多根底资源管理零碎到智研对立入口,具体包含研发测试、日常版本公布、资源弹性扩缩容、业务监控告警、业务日志检索剖析。通过 CICD 流程屏蔽间接对 TKEStack 操作,安全性更好
- 模块配置辨别应用场景托管于七彩石,并反对 1 分钟级业务开关切换,反对节假日期间灵便的流量调度和业务流控频控
- 下半年接入服务打算利用智研监控集群流量程度,联合 TKEStack 依据流量 HPA 能力,实际资源扩容无人值守能力
资源管理建设
具备平台能力后,下一步须要对不同容器规格的资源进行分类并平衡调度,这里次要的难点:
1、业务场景多样性:TKE 集群波及很多,性能规格也各不相同,从 6 核到 40 核都须要能应用
2、资源管理和经营须要思考:Dockerfile 镜像制作,适配 TApp 不同集群配置,容器高低架,运维变更标准等
梳理出 TKE 不同集群下容器配置
# 不同 cpu 规格适配不同环境变量
- name: MTS_DOCKER_CPU_CORE_NUM
value: "16"
- name: MTS_DOCKER_MEM_SIZE
value: "16"
# 算力平台亲和性设置,当负载超过 70%,则驱赶该 pod
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: max_vm_steal
operator: Lt
values:
- "70"
资源调度平衡
转码属于异步工作,解决的每个工作申请工夫是不一样的,并且有状态,所以无奈基于北极星去平衡调度工作,须要平台侧来设计调度策略
- 基于不同规格 CPU 机器 worker 性能,平衡分配任务
- 依据不同 worker 版本进行调度,反对小业务疾速版本迭代
在对不同规格容器,通过 Score 和版本来平衡调度
基于调度能力的在不同 CPU 规格上的工作平衡,C6 和 C12 利用率较相近,不会导致大规格容器资源节约
经营零碎建设
转码集群的 worker 资源怎么扩容到对应集群,这里减少了一层资源管理层,须要手动调用将指定的 worker 从集群高低架。对应平台侧开发业余 OSS 零碎,将集群的 sched/worker/ 工作做成页面便于经营,并且封装高低架的 API。而 TKE 跟转码平台其实无任何关联,为了实现解耦,运维侧开发对接 TKE 高低架的性能,制订流程,将 TKE 扩缩容的资源调用 OSS API 实现同步,具体逻辑如图:
TKE 反对北极星服务,将对应的 TApp 关联到北极星服务名,将北极星服务作为不同转码集群扩缩容 IP 的元数据管理,保障 TKE 和转码侧资源的一致性
过程监控
转码平台治理的 worker 有上万台,在运行过程或者新版本公布中不能及时监控容器过程状态是怎么样,通过批量扫描时间太长,不能疾速晓得过程异样状态,因而联合组内过程监控平台,建设转码容器的过程监控告警,异样 worker 通过机器人企业微信、电话告警及时告诉剔除,晋升服务质量
资源利用优化
转码业务目前根本是社交的自研业务,节假日效应突发比拟显著,而且资源需要较大,大部分还是准实时,对于转码耗时也比拟敏感。因而平时在保障速度外,会预留 30%~50 的 buff,而业务凌晨基本上是低峰,因而局部资源在凌晨是节约的。TKE 反对依据零碎指标主动伸缩,并且它计费模式也是依据一天内理论使用量免费,这里咱们基于 CPU 利用率指标,来配置弹性伸缩,低峰时缩容,顶峰时主动扩容,缩小资源的占用,从而缩小老本
弹性扩缩容
依据理论负载节点正本数在凌晨低峰缩容
Workloads CPU 理论应用占 request 百分比峰值可能达到 75% 以上,在保障业务稳固的状况下,晋升 CPU 利用率
成绩小结
目前转码平台从扩散小集群合并的三地大集群,经营能力的晋升 + 资源利用率晋升,正在致力晋升云原生成熟度,截止到 2021 年 5 月。
- 业务累计接入微信朋友圈、视频号、c2c、公众号、看一看、广告、QQ 空间等外部视频业务,每天视频转码解决 1 亿 +
- 日常放弃在 70% 左右 CPU 利用率,依据负载主动弹性扩缩容,业务成熟度显著进步
对于咱们
更多对于云原生的案例和常识,可关注同名【腾讯云原生】公众号~
福利:
①公众号后盾回复【手册】,可取得《腾讯云原生路线图手册》&《腾讯云原生最佳实际》~
②公众号后盾回复【系列】,可取得《15 个系列 100+ 篇超实用云原生原创干货合集》,蕴含 Kubernetes 降本增效、K8s 性能优化实际、最佳实际等系列。
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!