微信H5视频播放器在海量业务下的实践 F20170416pm qconbj guozhiwei

2020-03-01 76浏览

  • 1.微信H5视频播放器在海量业务下的实践 微信开放平台基础部 郭志伟 (raphealguo) 2017-04-16 mp.weixin.qq.com1 @微信公众平台
  • 2.业务背景 微信⽤用户8亿+ 图⽂文消息30亿+PV * 来⾃自腾讯2016年第三季度业绩报告 * 2015年公众号图⽂文消息⽇日均PV mp.weixin.qq.com @微信公众平台
  • 3.前端遇到什么问题 ⼩小bug容易 引起投诉 ⾼高 巨 本 成 宽 带 的 源 资 富 , ⼤大 量 访问 快速的产品迭代,导致代码难以维护 某些特定环境下发 ⽣生的⽤用户侧问题难 以 mp.weixin.qq.com @微信公众平台 排查
  • 4.关于这次演讲 1.技术⽅方案可控 2.监控和发现问题 通过灵活的技术⽅方案使 能够通过各种⼿手段发现 得系统可控 排查现⺴⽹网问题 mp.weixin.qq.com @微信公众平台
  • 5.Part1 通过合适的技术⽅方案让系统可控 来⾃自“微信H5播放器”的实践 mp.weixin.qq.com @微信公众平台
  • 6.微信H5播放器 mp.weixin.qq.com @微信公众平台
  • 7.公众号⽂文章访问情况 1. IOS & 安卓访问⽐比例达99% IOS & 99% 其他 1% 2. 安卓⾃自带X5内核Webview 结论:只需开发HTML5版本Video播放器 mp.weixin.qq.com @微信公众平台
  • 8.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 9.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 10.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 11.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 12.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 13.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 14.朴素版播放器状态机 mp.weixin.qq.com @微信公众平台
  • 15.朴素版播放器状态机 容易实现:解决兼容性+解决UI表现 mp.weixin.qq.com @微信公众平台
  • 16.还要实现播放器的扩展功能 mp.weixin.qq.com @微信公众平台
  • 17.播放器需求——前贴⽚片⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 18.播放器需求——前贴⽚片⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 19.播放器需求—优化带宽成本 mp.weixin.qq.com @微信公众平台
  • 20.播放器需求—优化带宽成本 mp.weixin.qq.com @微信公众平台
  • 21.播放器需求—优化带宽成本 成本⾼高,迫切需要优化带宽 mp.weixin.qq.com @微信公众平台
  • 22.节省带宽的⽅方案1 1.实时同步拖拽/播放/暂停状态到CDN节点 mp.weixin.qq.com @微信公众平台
  • 23.⽅方案1的缺点 • • 客户端服务器同步操作状态有延时 CDN服务复杂化,不再是纯粹分发资源 mp.weixin.qq.com @微信公众平台
  • 24.节省带宽的⽅方案2 2.采⽤用原⽣生播放器替代H5播放器 mp.weixin.qq.com @微信公众平台
  • 25.⽅方案2的缺点 • • 迭代速度受到客户端发版影响 原⽣生组件覆盖在Webview之上,需要解决滚动问题 mp.weixin.qq.com @微信公众平台
  • 26.思路:把远端的Server搬到本地——本地代理 mp.weixin.qq.com @微信公众平台
  • 27.最终⽅方案: 本地代理proxy mp.weixin.qq.com @微信公众平台
  • 28.最终⽅方案: 本地代理proxy mp.weixin.qq.com @微信公众平台
  • 29.最终⽅方案: 本地代理proxy mp.weixin.qq.com @微信公众平台
  • 30.最终⽅方案: 本地代理proxy mp.weixin.qq.com @微信公众平台
  • 31.最终⽅方案: 本地代理proxy mp.weixin.qq.com @微信公众平台
  • 32.最终⽅方案: 本地代理proxy 把server搬到本地:克服前⾯面⽅方案的缺点 mp.weixin.qq.com @微信公众平台
  • 33.播放器的状态机 mp.weixin.qq.com @微信公众平台
  • 34.播放器的状态机 mp.weixin.qq.com @微信公众平台
  • 35.播放器的状态机 mp.weixin.qq.com @微信公众平台
  • 36.播放器的状态机 状态过于复杂,不可⾏行 mp.weixin.qq.com @微信公众平台
  • 37.朴素版的缺点:系统不可控 • 状态极多,状态之间的跳转控制复杂 • 扩展能⼒力灰度控制很⿇麻烦 • 编写扩展能⼒力的时候,需要侵⼊入原播放器的流程 • 扩展间耦合过重,改动容易会引发bug mp.weixin.qq.com @微信公众平台
  • 38.我们的⺫⽬目标 • 主播放器和扩展解耦 • 扩展之间不知道对⽅方存在 mp.weixin.qq.com @微信公众平台
  • 39.“可热插拔”的思路 mp.weixin.qq.com @微信公众平台
  • 40.“可热插拔”的思路 mp.weixin.qq.com @微信公众平台
  • 41.“可热插拔”的思路 mp.weixin.qq.com @微信公众平台
  • 42.三个关键⾓角⾊色 mp.weixin.qq.com @微信公众平台
  • 43.状态调度器 mp.weixin.qq.com @微信公众平台
  • 44.状态调度器的作⽤用 mp.weixin.qq.com @微信公众平台
  • 45.状态调度器的作⽤用 mp.weixin.qq.com @微信公众平台
  • 46.状态调度器的作⽤用 mp.weixin.qq.com @微信公众平台
  • 47.状态调度器的作⽤用 mp.weixin.qq.com @微信公众平台
  • 48.状态调度器的作⽤用 mp.weixin.qq.com @微信公众平台
  • 49.这个状态调度器能否完成前边的需求? mp.weixin.qq.com @微信公众平台
  • 50.点击播放视频 点击播放 mp.weixin.qq.com @微信公众平台
  • 51.点击播放视频 点击播放 mp.weixin.qq.com @微信公众平台
  • 52.点击播放视频 点击播放 mp.weixin.qq.com @微信公众平台
  • 53.点击播放视频 点击播放 mp.weixin.qq.com @微信公众平台
  • 54.开始播放⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 55.开始播放⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 56.开始播放⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 57.⼲⼴广告结束 mp.weixin.qq.com @微信公众平台
  • 58.⼲⼴广告结束 mp.weixin.qq.com @微信公众平台
  • 59.⼲⼴广告结束 mp.weixin.qq.com @微信公众平台
  • 60.⼲⼴广告结束 mp.weixin.qq.com @微信公众平台
  • 61.⼲⼴广告结束 mp.weixin.qq.com @微信公众平台
  • 62.播放主视频 mp.weixin.qq.com @微信公众平台
  • 63.播放主视频 mp.weixin.qq.com @微信公众平台
  • 64.播放主视频 mp.weixin.qq.com @微信公众平台
  • 65.proxy换地址 mp.weixin.qq.com @微信公众平台
  • 66.proxy换地址 mp.weixin.qq.com @微信公众平台
  • 67.proxy换地址 mp.weixin.qq.com @微信公众平台
  • 68.proxy换地址 mp.weixin.qq.com @微信公众平台
  • 69.proxy同步状态 mp.weixin.qq.com @微信公众平台
  • 70.proxy同步状态 mp.weixin.qq.com @微信公众平台
  • 71.proxy同步状态 mp.weixin.qq.com @微信公众平台
  • 72.我们还可以完成更多可能的需求 mp.weixin.qq.com @微信公众平台
  • 73.脑洞1:浮层⼲⼴广告 mp.weixin.qq.com @微信公众平台
  • 74.脑洞2:弹幕 mp.weixin.qq.com @微信公众平台
  • 75.设计上存在⼩小问题 插件可以随意切换播放器状态,可能引起混乱 mp.weixin.qq.com @微信公众平台
  • 76.切换能⼒力收归到调度器 mp.weixin.qq.com @微信公众平台
  • 77.调度器内部切换状态 mp.weixin.qq.com @微信公众平台
  • 78.优点 • 可热插拔,可独⽴立灰度插件 • 可装载多个插件 • 每个插件只关注它内部时序,开发极简 • 分开监控,可控发布 • 定位问题容易 mp.weixin.qq.com @微信公众平台
  • 79.合适的技术⽅方案实现只是可控系统的其中⼀一个环节 在发布之后,我们还需要⽇日常运营保证系统的稳定性 mp.weixin.qq.com @微信公众平台
  • 80.Part2 ⽇日常运营如何保障系统的稳定性 mp.weixin.qq.com @微信公众平台
  • 81.难以排查的问题 ⽩白屏时间过⻓长 排版乱了 mp.weixin.qq.com @微信公众平台 图⽚片加载不出来
  • 82.⽆无从查起,难以解决 拉后台, 请求肯定 了 挂 N D C 们 你 S S C 出 不 ,拉 挂了,查 ⼀一下 上线系统把⽂文件搞错了,⼜又故障 这问题在我这没重 现,你⼿手机可能有 问题,重启看看 mp.weixin.qq.com @微信公众平台
  • 83.资源拉取的失败监控 Ajax⺴⽹网络超时 CDN图⽚片加载失败 CDN静态资源拉取失败 图⽚片加载失败率 mp.weixin.qq.com @微信公众平台
  • 84.各个阶段耗时监控 DNS耗时 收包耗时 TCP连接耗时 SSL连接耗时 mp.weixin.qq.com @微信公众平台
  • 85.监控脚本运⾏行时异常 错误地引⽤用空对象的⽅方法 mp.weixin.qq.com @微信公众平台
  • 86.监控脚本运⾏行时异常 资源回源机器没更新资源 mp.weixin.qq.com @微信公众平台
  • 87.监控脚本运⾏行时异常 后台某个CGI出现404 mp.weixin.qq.com @微信公众平台
  • 88.监控能帮助我们主动发现问题 但是⾯面对海量⽤用户,我们还是有很多难以定位的问题 mp.weixin.qq.com @微信公众平台
  • 89.棘⼿手的问题 ⽩白屏时间过⻓长 后台查看监控图表,服务正常 mp.weixin.qq.com @微信公众平台
  • 90.棘⼿手的问题 图⽚片加载不出来 CDN图⽚片服务正常 mp.weixin.qq.com @微信公众平台
  • 91.我们需要有能⼒力恢复⽤用户的现场 mp.weixin.qq.com @微信公众平台
  • 92.在客户端侧记录现场 1.⽇日志系统 把前端运⾏行⽇日志记录在微 信客户端log⽂文件,通过⽤用 户主动上传⽇日志分析现场 ⽤用户主动上传⽇日志 微信App JSAPI写log mp.weixin.qq.com @微信公众平台
  • 93.⽩白屏过久 ⽇日志⾥里边发现DNS解析过久,发现某个⼩小运营商路由问题 mp.weixin.qq.com @微信公众平台
  • 94.在客户端侧展⽰示现场 2.⼿手机端调试⾯面板vConsole 由于⼿手机端要远程调试⺴⽹网⻚页⼗十分困难,我们 开发了调试⾯面板,⽤用于远程定位现场问题 mp.weixin.qq.com @微信公众平台
  • 95.图⽚片⽆无法显⽰示 图⽚片显⽰示成⼀一像素 mp.weixin.qq.com @微信公众平台
  • 96.vConsole开源https://github.com/wechatfe/vconsolemp.weixin.qq.com @微信公众平台
  • 97.⼩小程序调试模式使⽤用vConsole mp.weixin.qq.com @微信公众平台
  • 98.总结 1.技术⽅方案可控 2.监控和发现问题 通过灵活的技术⽅方案使 能够通过各种⼿手段发现 得系统可控 排查现⺴⽹网问题 mp.weixin.qq.com @微信公众平台
  • 99.END Thanks for watching 微信开放平台基础部 郭志伟(raphealguo) 2017-04-16 mp.weixin.qq.com @微信公众平台