最近遇到了一个BUG,但是它的出现又存在概率,所以挺有意思的。
BUG的现象是:视频在播放过程中(已播放进度<已加载进度),首先出现了缓冲的动画效果其次呈现雪花背景并且抛出异常"视频连接超时" 。或者首先出现了缓冲的动画效果其次视频返回从头播放。
定位到BUG的原因是:某1台服务器存在不稳定的因素,导致视频播放过程中出现了中断。(也就是外部原因)(不过外部原因对服务造成影响的大小是否可以在代码层面优化?可以补充和思考)
具体说说----
当我们访问1个视频网站,打开了某1个视频,那么接下来会有几个步骤:
[1] 解析XML文件
[2] 与视频源建立连接
[3] 视频开始播放
那么,这个BUG的原因是在第[2]个步骤,为啥会存在概率呢?
网站的视频源会存放在多台服务器上面,比如放在这3台服务器上:flv.bn.youtube.com | flv4.bn.youtube.com | flv5.bn.youtube.com
这样做的目的(1)是不会因为某1台服务器坏了就影响到用户看不了视频,目的(2)是分散用户访问对服务器的压力,
同时,程序员在代码内也事先配置了flv、flv4、flv5被访问的概率,
所以,用户有时候是从flv.bn.youtube.com获取视频源,有时候是从flv4.bn.youtube.com获取视频源,有时候也可能是从flv5.bn.youtube.com获取视频源,
当用户的某1次请求是与那台不稳定的服务器建立的(即:在不稳定的服务器上看视频,比如假设今天flv.bn.youtube.com不稳定),就会出现这个BUG了。BUG的表现形式虽然有所差别,那是受到网络环境和服务器配置等因素共同影响的了。
[ 2014-07-03 16:22:27 ] YoutubePlayer xx.xxxx
[ 2014-07-03 16:22:27 ] Chrome ooooo[ 2014-07-03 16:22:27 ] WIN ooooo[ 2014-07-03 16:22:27 ] sid:xxxxx[ 2014-07-03 16:22:27 ] vid:ooooo[ 2014-07-03 16:22:27 ] topicid:xxxxx[ 2014-07-03 16:22:27 ] pltype:ooooo[ 2014-07-03 16:22:27 ] iplimit:xxxxx[ 2014-07-03 16:22:27 ] videoadv:http://xxx.ooo.xxx.ooo.xml[ 2014-07-03 16:22:29 ] _m:1, _b:0[ 2014-07-03 16:22:29 ] ns.play(http://flv.bn.youtube.com/xxxxx.flv)[ 2014-07-03 16:22:29 ] false | NetStream.Play.Start[ 2014-07-03 16:22:29 ] duration:437.24[ 2014-07-03 16:22:30 ] ns.play(http://flv.bn.youtube.com/xxxxx.flv)[ 2014-07-03 16:22:30 ] true | NetStream.Play.Start[ 2014-07-03 16:22:30 ] ns.play(http://flv.bn.youtube.com/xxxxx.flv?start=2129&end=33031317)[ 2014-07-03 16:22:30 ] true | NetStream.Play.Start[ 2014-07-03 16:22:31 ] true | NetStream.Video.DimensionChange[ 2014-07-03 16:22:31 ] true | NetStream.Buffer.Full[ 2014-07-03 16:22:46 ] true | NetStream.Buffer.Flush[ 2014-07-03 16:22:48 ] true | NetStream.Play.Stop