虎牙直播运维负责人张观石

本文是根据虎牙直播运维负责人张观石10月20日在msup携手魅族、Flyme、百度云主办的第十三期魅族开放日《虎牙直播平台SRE实践》演讲中的分享内容整理而成。

张观石,拥有10余年网站开发、架构、运维经验;目前关注互联网服务可靠性系统工程、运维平台的规划建设、网站高可用架构等方面;在音视频传输质量评估、微服务运维方面积累了丰富的经验。

目录

一、 直播平台的架构及运维挑战

(一) 音视频传输流程及挑战

(二) 一个直播间的流程

(三) 直播平台的运维挑战

二、 我们的思考和运维实践

(一) Google SRE介绍

• SRE是什么

• Google SRE方法论

(二) 我们的思考:运维的六种能力

(三) 我们的运维实践

1. 运维可靠性管理

2. 感知能力

3. 修复能力

4. 反脆弱能力

5. 保障能力

6. 安全能力

虎牙直播介绍

虎牙直播是以游戏为主要内容,涵盖娱乐、综艺、教育、户外、体育等多种内容的直播平台,2018年5月在纽交所上市。

虎牙算是整个直播行业比较重视技术的一家公司,大家可以对比下几家平台观看体验,我们应该是最好的一家了。英雄联盟S8 是全球最大的电子竞技赛事,目前正在如火如荼进行,从今天开始进入了总决赛的淘汰赛阶段了。这会正在进行的是IG对KT队,IG是中国的队伍,今年共有3只中国对进入了8强,是历年最好的成绩,比赛很精彩,如果不来今天的分享,我可能在家看比赛,或是去公司值班了。欢迎大家到虎牙直播平台观看直播,为LPL加油!(发布此稿时,中国队IG已经获得了总决赛冠军,虎牙平台观众数也突破了历史新高,直播过程无较大故障发生)。

今天的分享正好会讲到关于这次赛事的运维保障的技术。

一般网站比如电商类网站用户是卖家+买家, 卖家先编辑商品信息,发布后买家刷新后再看到,是异步的,卖家可以慢慢改,错了可以慢慢调。直播平台上,一个主播开播出现在摄像头面前,可能有成千上万的人同时观看,主播不能有任何小动作,不能离开,重新开播代价太大了,10分钟不能播观众就跑了。要是互动不流畅,土豪也就不想看你了。主播更不可能停播配合我们运维人员做一些技术上的调整。如此看来,直播平台相对于传统网站还是有区别的。所以,这对运维的挑战就更大。

直播平台技术是比较复杂的,首先是音视频处理本身有很多高深的技术,其实是大规模的观众和主播,还要对实时性要求特别高。

今年英雄联盟总决赛S8是从韩国现场传送回国,传输路径也比较复杂。

一 直播平台的架构及运维挑战

(一)音视频传输流程及挑战

音频流程是指平台从开播到观看一系列的流程。

①开播主播多

同时开播的主播数量非常多。

②上行选择多

图中,中间蓝色部分的线是可以支持上行的线路,每一个主播都可以到任何一条线路上,虎牙有自动调度,运维人员也可以进行调度,主播上行哪里。

③ 转推路径多

确定一条上行线路后,还要互相转推到其他线路上,观众可以在任何一条线路看到主播的直播。

④观众线路多

观众有很大的选择权,比如选择不同的清晰度、不同的线路,包括H5技术等,播放技术和观众选择不一样。

⑤转码档位多

⑥实时要求高

今年,虎牙运维研究团队又做了P2P技术,架构又比以前复杂了很多。

(二)一个直播间的流程

上图是一个虎牙主播直播的流程。首先,主播可以选择一个开播方式(进程开播、桌面直播、摄像头开播、手游投屏、手游桌面、OBS、导播系统、VR直播、第三方推流等)进行直播,经过4种推流方式(HUYA、UDP、 YY、 RTMP、CDN),直推到某条线路上,转推多家CDN,从CDN边缘到中心,然后再选择转码率,最后分发到不同省、市的运营商,之后就到观众的客户端。

(三)直播平台的运维挑战

因为音视频本身的复杂度,加上业务的实时性,对运维造成很大的挑战。传统的运维可以对开源组件做部署、配置、优化、高可用部署等。而音视频技术变化很快,自成一个体系,主播端和观众端的逻辑性强,由于中间传输路线多,运维人员很难参与其中,所以我们必须换一种工作方式。

google的SRE 给了我们很大的启发,我们在SRE的方法论指导下,比较深入地参与到了音视频传输业务中,虽然我们不叫SRE,还是叫业务运维,不过做法吸收了SRE的很多思路。

今天要分享的也是这方面的内容,希望对大家有些启发。

二 我们的思考和运维实践

(一)Google SRE介绍

• SRE是什么

S是Site/Service/Software,运维的对象,网站业务服务线上的服务

R是reliability,关注可靠性,质量,理解为对外部最终用户的质量和价值

E是Engineer工程师、Engineering工程化。

运维的本质是人和机器参与的一项系统性工程,这种工程跟软件工程不太一样的是,我们是负责业务上线后稳定运营,可靠性、质量、成本等。有人比喻业务研发和运维的关系就像是:生孩子与养孩子,哪个更难哪个更容易呢?

• Google SRE方法论:

•关注研发工作,减少琐事

•保障SLO&度量风险

•做好监控及黄金指标

•应急事件处理

•变更管理

•需求预测和容量规划

•资源部署

•效率与性能

(二)我们的思考:运维的六种能力

常有人问我们运维是做什么的,我们说是做质量、效率、成本 ,具体怎么做,要怎么做呢,几句话很难讲清楚。《SRE Google运维解密》这本书强调实践方法论,能落地,但不够体系,可能是由不同的人写不同的章节。我有机会顺着可靠性这条路径,找到了传统行业的可靠性研究,发现了另外一片世界。大家都以为SRE是google提出来的,其实传统行业的SRE已经存在了几十年了,已经成为了一门学科。我个人研究之后,认为这门学科讲得更体系更完整,于是希望能套到互联网的服务中来。我参照照传统行业一些可靠性的理论、对框架做了一些迁移,将自己的思考转化成了一个运维的思考框架,叫做运维的六种能力,将其分为以下6点:

SER眼中的可靠性:规定条件规定时间内完成规定功

可靠性的两个故事:

二战时某次美军近半飞机无法起飞,发现是某些电子管不可靠引起的。

朝鲜战争中美军电子设备不可靠,维修成本比制造成本高了几倍。从而诞生了可靠性这门学科。

①可靠性管理

首先要分析目标业务的可靠性模型,然后画出可靠性逻辑框图,评估每个环节和总体的可靠性性,进行度量和评价,可以是定性的,也可以是定量的。

②感知能力

在业务上线、建立连接之后,学会如何感知其状态、变化及问题。

③修复能力

当可靠性在设计阶段不够完善时,修复能力可以帮助我们在用户没有感知的状态下修复故障。

④反脆弱能力

业务运行在一定内部或外部环境里,寻找脆弱点和风险点,然后对它的脆弱点进行分析,并设计出反脆弱的能力,最终推动业务研发修改技术架构。

⑤保障能力

很多业务需要具备保障能力,建立保障性的设计,实现快速交付资源和快速能力到位。

⑥安全能力

如何保证我们业务安全、数据安全。

(三)我们的运维实践

我们主要关注所负责业务的核心服务的核心指标,我们将每一条端到端链路都看做是一个服务,那么服务指标可以是成功率、延迟或其他,将指标能达到某个程度作为目标;研发和运维团队会对这个服务画出部署构架图、可靠性逻辑框图(见下图);建立业务的可靠性模型,同时还会做一些FMECA;分析失败模式及其带来的影响,以及讨论设计解决方案;对一些关键的服务,要把故障树画出来,度量风险,选择优先风险,推动解决;可靠性是管理出来,是运维出来的,但首先是设计出来的,可靠性设计的方法包括避错、改错、容错等。

下图是我们负责运维的同学画的P2P技术架构流程图。

下图是主播上行经过的环节,这对运维人员做监控时有指导意义。逻辑框图越画越细,每个点都会分析、统计它的可靠性。

1.可靠性管理的要点

①如何识别风险

从以从几个方面判断:

复杂度;技术成熟度;重要程度;环境严酷程度

如何验证可靠性水平

开发阶段前性能测试;上线压测;容量模型;改进测试;模拟故障测试等

③实践

建立可靠性指标大盘;黄金指标&SLO;主播上行APM;全链路的可靠性;多维度的析评估体系;日报,月报,实时可靠性等。

2.感知能力

什么是感知力,包括但不限于监控的覆盖度,告警的实时性,准确性,触达率,问题定位能力,趋势预测能力 。

①监控、状态感知能力

以监控数据作为基础,提高人工感知能力和机器感知能力,监控是感知的基础,监控指标多了,不能说就有了感知力,这远远不够。

②故障感知能力

帮助运维人员感知业务的状态、变化和其他问题

④AIOps大多是加强运维感知能力

大数据;智能告警

自动化测试、压力测试

拨测、APM

日志trace可阅读,可分析

3.修复能力  

SRE是与故障做斗争的系统工程。程序写得再好,也很难达到完全不出故障。

衡量修复能力-MTTR:

对于大部分的故障,都应该知道它的故障模式,根据故障模式就可以制定故障预案(规定条件规定时间规定人进行修复),根据预案做出一些修复工具,即人工修复或智能自愈。当发生一些考虑不到的情况出现时,需要维修和技术保养,进行扩容或者优化。根据平均修复时间和最大修复时间进行修复评价。

虎牙的一些实践:

主播上行切换:从早期主播重新开播修复上行问题,到后台手工切换,到主播端自动切换。修复时间(MTTR)从半个小时缩短到5分钟,到秒级。

观众调度系统:基于主播端,观众端调度,小运营商调度、无缝切换,按协议调度等,机房一键上下线。

故障修复更高一级是自愈,这也是故障修复能力转化为软件架构设计的高度。

4.反脆弱能力

反脆弱的设计:

保证服务在脆弱条件下的保持容忍范围内的健壮性。

软件总是在不同环境运行、不同条件下运行,这个条件就是可靠性中“规定的条件”。环境总是有很多脆弱点,要做脆弱性分析、反脆弱设计,最后评估评审。互联网常见的脆弱性因素,有机房、运营商、网络、单机故障,业务突发事件负载高、流量大,也可能微服务请求超时。健壮性设计,容灾性设计、高可用的设计、资源冗余等。这也是google SRE种说的拥抱风险、度量风险、评估风险容忍能力。

S8源流的反脆弱性设计

5.保障能力 

软件架构设计特性和计划的保障资源,能快速满足使用要求的能力。

可靠性保障的设计,要做到无状态,可切换,可调度,可重试等,比如说我们怎么样实现替换一台故障机器,且要求在10分钟内提供业务服务。

做可靠性保障要做一个闭环,分析目标、风险、脆弱性;设计SLO-感知还有保障、修复、演练。感知SLI的变化以及相关的子SLI的变化,尽快修复SLI退化情况,在设计时尽量考虑到各种脆弱条件,做出反脆弱的保障方案。

我们的一些实践:

•带宽资源保障:

能分钟级实现带宽调度,能1分钟内实现切流

•服务器保障:

3分钟能拿到多个机房服务器

3分钟能把核心服务部署起来

保障能力需要架构设计、接口的设计

我们在直播间的做了一些特殊设计

保障能力是多方面能力的综合体现:

•考验的是自动化的程度,要有支撑系统的保障,要有自动化工具的保障

•要做人力和人员的规划,考验故障时人员到位时间

•要做硬件、软件资源的供应保障

•是对软件架构的要求,是否支持平滑扩容

•要有演练,确保能执行

6.安全能力

安全是最基本的能力,也是最大的风险之一。

数据安全:层出不穷的数据泄露事件,用户信息涉密事件。

业务安全:优惠券被刷,支付漏洞,主播言行、登录风控等。

用户安全,比如滴滴的安全事件。

以上内容来自张观石老师的分享。

由msup主办的第七届TOP100全球软件案例研究峰会将于11月30日至12月3日在北京国家会议中心举行,张观石老师将作为大会讲师为大家带来《直播平台的运维保障实践》话题。

案例目标

相对于Web服务,直播音视频的运维更特殊,业界没有很好的参考的经验,刚接手时,这方面运维的挑战比较大。

(1)虎牙直播目前是异构多云的架构,从整个链路看,任何观众都可以看到任何线路上任何主播的情况,复杂度高;

(2)研发人员以及各个团队会比较关注自己环节上的事情,所以在虎牙运维团队引入了多CDN以后,不仅技术和管理复杂性大幅提高,而且视频流路径在这么复杂的场景下,必须深入音视频运维工作,这对运维质量和运维人员技能提出了更高的要求。

成功(或教训)要点

直播音视频的传输质量评估体系,音视频质量数据的全链路监控,以及对于互联网服务可靠性系统工程的思考。

案例重点

运维效率的提升,直播质量的提升。

案例启示

由于直播平台不同以往任何架构的特殊性,以及当时视频板块技术的有限性,促使我们必须尽快找到运维的着力点。后来,我们接轨了近年来一直倡导的DevOps和SRE解决了这一困局。

点击“阅读原文“或识别图中二维码,即可查看更多运维案例!

虎牙直播运维负责人张观石 | SRE实践指南的更多相关文章

  1. 《开源安全运维平台:OSSIM最佳实践》内容简介

    <开源安全运维平台:OSSIM最佳实践 > 李晨光 著 清华大学出版社出版 内 容 简 介在传统的异构网络环境中,运维人员往往利用各种复杂的监管工具来管理网络,由于缺乏一种集成安全运维平台 ...

  2. Python自动化运维:技术与最佳实践 PDF高清完整版|网盘下载内附地址提取码|

    内容简介: <Python自动化运维:技术与最佳实践>一书在中国运维领域将有“划时代”的重要意义:一方面,这是国内第一本从纵.深和实践角度探讨Python在运维领域应用的著作:一方面本书的 ...

  3. 自动化运维工具Ansible之LNMP实践环境部署

    Ansible-实战指南-LNMP环境部署,并使用zabbix监控 主机规划 系统初始化:必要的系统初始化 基础组件包括:zabbix监控,mariadb(用于存放zabbix监控信息) 业务组件包括 ...

  4. 《Ansible自动化运维:技术与佳实践》第一章读书笔记

    Ansible 架构及特点 第一章主要讲的是 Ansible 架构及特点,主要包含以下内容: Ansible 软件 Ansible 架构模式 Ansible 特性 Ansible 软件 Ansible ...

  5. 《Ansible自动化运维:技术与佳实践》第二章读书笔记

    Ansible 安装与配置 本章主要讲的是 Ansible 安装与基本配置,主要包含以下内容: Ansible 环境准备 安装 Ansible 配置运行环境 Ansible 环境准备 从 GitHub ...

  6. 《Ansible自动化运维:技术与最佳实践》第三章读书笔记

    Ansible 组件介绍 本章主要通过对 Ansible 经常使用的组件进行讲解,使对 Ansible 有一个更全面的了解,主要包含以下内容: Ansible Inventory Ansible Ad ...

  7. B站运维团队成长的血泪史

    胡凯,bilibili运维负责人,曾经就职于金山软件.金山网络.猎豹移动,负责运维相关工作.Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台.   95后二次元新人 ...

  8. Oracle运维服务的四根救命稻草

    企业信息化系统建设按生命周期可分为IT规划阶段.IT建设阶段和IT运维阶段,其中,IT运维阶段的时间最长,IT运维管理关乎着IT运维的质量.成本和速度,更关乎着IT系统的安全.连续和可用.大数据云计算 ...

  9. GOPS2017全球运维大会深圳站 出席嘉宾盘点!

    去年,GOPS全球运维大会在深圳出发,当时门票提前几周收盘,2017年,承载着运维人的期望,GOPS全球运维大会再次来到了深圳.第六届GOPS2017全球运维大会深圳站(本次)将于2017年4月21日 ...

随机推荐

  1. Qt编译错误“GL/gl.h:No such file or directory”的解决方法

    备注:1)操作系统:Ubuntu-14.04或12.042)Linux用户:root3)Qt版本:qt-linux-opensource-5.2.0-x86 为了迎接Qt的新纪元(从诺基亚移居到芬兰公 ...

  2. VTK拾取网格模型上的可见点

    消隐与Z-Buffer 使用缓冲器记录物体表面在屏幕上投影所覆盖范围内的全部像素的深度值,依次访问屏幕范围内物体表面所覆盖的每一像素,用深度小(深度用z值表示,z值小表示离视点近)的像素点颜色替代深度 ...

  3. SpringCloud Stream生产者配置RabbitMq的动态路由键

    在写这个文章前不得不吐槽目前国内一些blog的文章,尽是些复制粘贴的文章,提到点上但没任何的深入和例子.......... 经过测试下来总结一下RabbitMQ的Exchange的特性: 1.dire ...

  4. 在Asp.Net中操作PDF – iTextSharp - 操作图片

    iTextSharp支持所有主流的图片格式,比如:jpg, tif, gif, bmp, png和wmf.在iTextSharp中使用Image.GetInstance()方法创建图片有很多种方式,或 ...

  5. zookeeper的可视化web界面

    转载一篇我心中大神有关zookeeper  WEB的文章 以前写过一篇zookeeper集群搭建的文章<烂泥:zookeeper集群搭建>,最近在使用activemq集群过程中碰到了一些有 ...

  6. Flink source task 源码分析

    http://vinoyang.com/2016/05/05/flink-stream-source/ http://vinoyang.com/2016/12/28/flink-runtime-com ...

  7. 十大高明的Google搜索技巧

    WHY 对于google检索,有时需要技巧会得到更好的检索结果,不用简单输入关键字检索后,一个个去浏览.对于这些技巧,基本都知道,但是如果不经常用,总是忘了,又得重新搜索下具体使用方法,这里就把它放到 ...

  8. 用OpenGL实现动态的立体时钟

    (在学期末做的图形学课程设计,特将学习心得整理如下) 一.设计思路 1,设计一个平面的时钟: 按照 钟面——>中心点——>刻度——>时针——>分针——>秒针 的顺序绘制. ...

  9. Ubuntu 实践

    Ubuntu 安装中文支持 开始装的是Ubuntu Server,后来需要某些图形工具,所以装了个Gnome,没想到无论如何都显示不了中文,按照网上的方法试了一堆,装了Synaptic,KDE和GNO ...

  10. Git服务器环境搭建(打造属于自己的存储库)

    Git服务器搭建之CentOs7-阿里云搭建 首先使用连接工具连接到远程的阿里云服务器CentOs7上. 1.安装Git及创建用户 # 安装Git $ yum install git # 创建一个gi ...