线上服务的有效监控和数据收集,一直是后端服务离不开的话题。直播 CDN 做为一种经典的分布式系统,监控以及数据收集更是必不可少的工做。如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务。不得不说是一个值得无止境讨论和优化的事情。前端
做为分布式集群,物理层上的最小单位天然是机器。对于一台机器而言,常规性能指标天然就是 CPU、内存、网卡的使用状况。这些性能有不少方式去获取,而视频云采用的是网易的哨兵系统。哨兵系统是网易的监控系统,提供了很是详细和即时的性能指标。算法
借由哨兵这个强大的轮子,咱们能很是方便的在机器级别上,作出有效的监控。例如当网卡流量或者 CPU 异常的时候,能够快速的报警采起处理。固然,不光光能够监控机器是否能正常运行,也能够监控是否被恶意攻击,这个暂且不谈。后端
固然,只有机器级的数据,是远远不够的。俗话说,不与业务贴合的数据,不是好数据。做为直播 CDN 服务,最常规的参数,天然是音视频码率和延迟。服务器
细心的看官们可能发现了几个比较特殊的统计。
为何统计了总码率也统计了音视频单独的码率?
这是由于在真实的场景中,总码率并不必定能还原出咱们须要的场景,有不少状况会须要单独的分析音视频码率,例如用户主动关闭了视频输出或者机器采样性能不足致使的视频卡顿,这个时候只须要配合帧率的统计,就能够快速还原场景。固然,视频码率自己也不是一个固定的数值。视频云也针对弱网提供
QoS(便可变码率)的功能。微信
推送延迟 push_delay 是什么?
推送延迟,是一个衡量 C/S 之间网络状况的参数。当这个参数发生波动的时候,则说明C端的包到达 S 的时间比预计要长。可以反映出网络的抖动状况。若是计算这个数值呢?简单来讲,是使用了 RTMP 包头部的时间戳。若是非要用一个公式解释一下,我以为应该是:网络
计算每一个包到达服务器所消耗时间的差别值,用于表明网络的抖动。固然,还须要作其余不少事情,例如加权和 jitter 算法来减小偏差和避免。架构
为何还有 send_kbps?
其实这也挺好理解,由于 CDN 自己是分布式系统,在节点和节点间须要作路径选择,而后从节点到节点传输,从而实现加速。Send_kbps 其实就是前一个节点向后一个节点的发送码率。那么这就涉及到了一个问题,若是去 trace 某一条流的数据呢?对于每一条流,咱们会给予一个惟一的标记,在节点间传递的时候,咱们会给流添加一个自增的标记 Hops。经过这个标记,能够精准的找到这条流在节点件的走向,从而把各个节点的数据聚合在一块儿
其余,咱们还会抓取一些相似源 IP,用户设备等客户端的信息。这些信息能帮忙咱们走进大数据时代(笑。运维
分布式系统中,每个节点都会产生大量的统计和性能数据。因此在视频云,有一个完整的统计架构来做出支持。从最前端的数据采集、传输,到汇总,而后到计算集群,最后输出。每个服务都各司其职。让咱们来看看总体架构。分布式
对于每个区域,会有一个数据汇聚的服务器,负责从流媒体服务器收集数据。最初的元数据,通过数据汇聚服务器汇总、过滤和压缩之后。统一上报到中心集群中的统计服务器。统计服务器会将全部的统计数据,逐一落库,储存在数据仓库中。其他的数据计算集群,会从数据仓库中定时进行读取计算。具体的计算间隔,会根据业务类型不一样而不一样。例如运维平台会主要读取一些机器级别的数据,进行分析和报警。大数据计算集群则会对数据进行计算,得出优化方向,此处咱们稍后再聊。业务数据展现平台则是会实时的输出数据(例如码率和延迟),用于提供给用户和技术支持查询。固然,还有其余各类各样的数据处理服务,这里就再也不一一介绍。性能
最后,咱们聊一聊数据。在这个大数据时代,有了数据却不作事情,等同于浪费。那么,有了这些数据之后,咱们作了什么事情呢?固然,最显而易见的,就是调整调度策略,增设布点。例如,上图的大数据的运算结果,南京电信的网络权重比较差,这就说明南京电信地区须要进行排查。而南京移动的用户量较大,也说明南京地区应该增设服务点。
此外,数据和性能指标的上报,也会被用于均衡负载调度。例如某一个节点压力较大的时候,或者性能不稳定的时候,这个节点的调度优先级就会被下降(即不太会被优先分配给用户)。
还有更多干货,欢迎关注网易 MC 官方微信公众号: