Workflow架构在B站视频生产中的实践 唐君行

Razor

2019/10/20 发布于 技术 分类

文字内容
1. Workflow架构在bilibili视频生产中的实践 唐君行(Json) from bilibili Qcon2019上海 2019.10
2. 自我介绍
3. 自我介绍 • 唐君行 • 2016年加入bilibili • 视频云资深研发工程师 • 负责B站视频上传,处理流程,存储,CDN分发等业务 • 关注云计算,边缘计算,业务架构等领域
4. 目录 • 背景介绍,提出问题 • 简单介绍Workflow架构 • Workflow在我们稿件系统中的实践 • 技术选型 • 总结
5. 关于bilibili • 成立于2009年 • 弹幕 • 二次元 • 长视频 • 年轻人
6. UP主
7. 生产业务鸟瞰图
8. 重构前的稿件系统 1. 状态描述混乱 2. 上下游使用API串联调用 3. 耗时任务使用cron系统管理 4. 报警,监控缺乏 5. 故障恢复困难 6. 多业务重复工作,编码易出错,难升级
9. 复杂的产品需求 内部层面 1. 消息 2. 响应审核的结果 3. 超时的任务需要报警 用户层面 1. 稿件处理速度 2. 失败通知 3. 查询需求 工程层面 1. 2. 3. 4. 运维层面 1. 应对故障 2. 故障恢复 3. 报警,审计 实现业务逻辑 调整流程顺序 配置每个流程的重试和等待时间 查询任务
10. 最大的痛点 重构前的系统: 20%的稿件,因系统原因,流失
11. 思路? 1. 视频处理业务如何可追溯,可视化? 2. 分析业务处理耗时,故障报警 3. 多个业务流程如何减少重复代码
12. 目录 • 背景介绍,提出问题 • 简单介绍Workflow架构 • Workflow在我们稿件系统中的实践 • 技术选型 • 总结
13. 生活中的Workflow
14. 工程中的Workflow
15. Workflow架构的复杂性1 常见的无状态系统 1. 2. 3. 4. 多模块 服务间调用关系 异步任务保证执行 高并发
16. Workflow架构的复杂性2 Workflow系统难点 无状态系统的难点 + 1. 2. 3. 4. 监控 流程编排 故障恢复 任务跟踪
17. 目录 • 背景介绍,提出问题 • 简单介绍Workflow架构 • Workflow在我们稿件系统中的实践 • 技术选型 • 总结
18. 问题0:Workflow架构的核心 • 流程标识 • 上下文
19. 问题1:状态描述混乱 => 状态描述统一 • State:状态 • Executor:执行者 • Profile:编排脚本
20. 问题2:串行API调用 => 驱动器中心调度
21. 问题3:耗时任务 => 统一执行框架FOP 部分FOP功能 DASH转码 动态转封装 视频检测 音频转码 生成缩略图 • 直接在文件存储的地方计算 封面截图 • 减少网络,磁盘IO DRM加密 • 缓存运算结果,避免重复计算 获取视频元信息 ... ...
22. FOP的更多好处 • 减少程序员重复工作量 • 执行框架被多业务打磨,更加健壮
23. 问题4:监控报警缺乏 => 提供清晰的运行状态
24. 监控,报警 1.监控每个流程的任务数量趋势和平均消耗时间 2.配置阈值,报警
25. 问题5:故障恢复困难 • 任务可以设置重试,重试间隔,重试总次数 • 在故障排除后,任务可以手工RESET
26. 问题6:多条业务线 • 多条业务线只需要编写自己的Profile编排文件 • 减少重复工作量 • 工程师只需要关注业务代码即可
27. Profile配置,清晰 Profile UGC 部分Executor列表 检测 => 截取封面图 => 审核 => 提交 => 截取预览图 => 审核 => 转 码 => 写入数据库 => 分发 => 备份 PGC 提交 => 截取预览图 => 转码 => 分发 => 备份 DRM 提交 => 截取预览图 => 转码 => 分发 => 加密 音频 音频转码 广告视频 截取封面图 => 转码 批量转码 准备 => 转码 => 新版 => DASH => 发布
28. 解决性能问题:Driver - 驱动器 • 任务池中的任务过多,通过轮询的方式消耗过大 • 增加事件触发机制,提高任务流转速度 • Sharding到多台主机实现负载均衡 • 通过争抢锁实现高可用
29. 目录 • 背景介绍,提出问题 • 简单介绍Workflow架构 • Workflow在我们稿件系统中的实践 • 技术选型 • 总结
30. 组件选型 - OpenResty Lua OpenResty 高性能 Api 弱任务 Daemon Go Nodejs PHP Swoole Python Flask/Celery
31. 存储选型 - MongoDB MongoDB 扫描 KV 条件查询 消息 集群,高可用 大量数据 持久化 MySQL Redis
32. 目录 • 背景介绍,提出问题 • 简单介绍Workflow架构 • Workflow在我们稿件系统中的实践 • 技术选型 • 总结
33. 新老系统对比 老系统 重构后 状态机 无 清晰的状态机 编排 不可编排 可编排 故障恢复 手工调用API 方便RESET 扩展性 无 容纳所有业务
34. 成效 - 接入效率大幅提升 • 接入Profile-8个,执行者约 50个 • 新业务接入时间从数周下降 到2天 • 实习生也可以完成接入
35. 成效 - 稿件流失率下降 • 稿件流失率下降至0
36. TODO • 视频基础设施标准化:对象存储 / Workflow / CDN • 接入更多的服务 • 调优,迭代
37. 业务架构建议 • KISS:Keep It Stupid and Simple • 过早优化乃万恶之源 • 关键是:找到系统的稳定点,变更点 • 数据驱动研发
38. 引用 • Apache Airflow Documentation - https://airflow.apache.org/ • 《SRE Google运维解密》 • Harbor开源项目容器镜像远程复制的实现 • 8月《B站UP主影响力榜》来了,局座召忠夺冠!https://www.chinaz.com/2019/0930/1052012.shtml