就在昨天,腾讯云部分功能挂了,经查实广州机房的光缆被挖断导致。当时也影响到了我们视频云转拉这边的业务。有个例子是,一个小客户有个流没有拉起,但是收到了已经拉起的回包。经过我们的分析,原因如下:当转拉请求下发到服务器(内网之间的通信,使用的是内网IP),服务器能收到并处理该请求,所以正常回包。当请求处理程序启动ffmpeg进程时,ffmpeg会去和源站建连(使用外网IP),由于光缆断了,外网肯定是不通的,转拉自然也不会成功。正因此也引发了我们关于转拉灾备的一个思考。
解决方案说起来肯定是很简单的,既然机器外网不同,那很简单,以后的转拉请求不发给这台机器就ok了。那现在问题就变成了:怎样知道这台机器不行了?
对此我们充分利用了转拉模块的上游模块——状态中心。解决方案:
1,ffmpeg进程定期上报心跳包到状态中心(上报的字段至少包括两个:进程所在ip, 进程状态);
2,状态中心定期(比如1分钟)统计下各ffmpeg进程发过来的包,以ip为作为关键字分类,统计该ip下正常的ffmpeg进程和异常的进程(对于网络这个问题,异常就是ffmpeg报建立连接失败错误)的次数。
3,当异常情况的比例达到一定的阈值的时候,我们可以认为这台机器有些问题了,暂时到不可用ip列表中。
4,状态中心隔一段时间(比如1小时)扫描一次不可用ip列表。将存在超过一定时间阈值(同样可以是1小时)的ip解禁。因为ip放入到不可用列表后,该机器不会收到转拉请求,所以不知道机器所处的状态,故需要手动删除。如果此时故障还未修复(比如外网依然不通),该机器很快又会加入到不可用ip列表中。
阿里云挂完,腾讯云挂。像腾讯,阿里这样中国互联网超一流的公司,也偶尔会遇到因为容灾问题而导致的服务不可用问题。对于我们后台开发,很多服务经常会依赖于别人,除了指望别人做的可靠之外,也应该思考下如何从自身出发,加强程序的健壮性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。