胡凯,bilibili运维负责人,曾经就任于金山软件、金山网络、猎豹移动,负责运维相关工做。Bilibili是国内最大的年轻人潮流文化娱乐社区,银河系知名弹幕视频分享UGC平台。git
95后二次元新人类的追捧,让以视频弹幕、UP主闻名于世的bilibili(如下简称B站)愈发火爆,无数年轻人经过电脑、手机、电视等终端设备在B站上追番、看弹幕,特别是新番上线时的访问压力是很是大的,这就给B站的IT运维团队带来了巨大压力。胡凯在去年加入B站刚刚成立的运维部,人少事多,遇到了不少坑。github
本文根据做者在“监控与性能分享群”中的分享内容整理。后端
B站运维痛点主要有3个:人手不足、故障多、运维系统跟不上,针对这三个痛点,B站采用了三种方式进行破冰。浏览器
一、解放劳动力安全
目前B站的CDN主要是自建的,TB级带宽,视频存储也已达到N个PB,运维压力很是大。招人确实能够解决问题,但在上海这座魔都招聘合适的运维人员非一朝一夕可以完成的,人手不足怎么办?那就想办法把劳动力从繁杂的平常运维工做中释放出来。服务器
因为以前没有专门的运维部门,IT系统的权限都在开发手上,出问题了之后运维总得跟在开发后面查缘由,效率低不说,沟通每每容易出现问题。
因此咱们第1步作的就是:用Ansible + Jenkins搞定自动发布。Ansible是相对简单的批量管理工具,支持模板管理等高级功能。搞定了自动发布,开发的服务器需求已经明显降低,只要把代码提交到 Git主干,就会自动触发发布。网络
Git使用的是 GitLab,同时为了安全咱们作了一层LDAP代理,效果至关于“将军令”,操做机、Git和Jenkins用 OpenLDAP 作统一认证,后续用到的Redmine、Grafana、Zabbix 等都接入了OpenLDAP认证,每一个人都有个动态口令,每次验证都须要用到。app
二、一棒子监控告警系统运维
因为原始的监控不知足快速增加的业务,咱们部署了开源监控系统 Zabbix,虽然运维同事可以很好的使用Zabbix,但其余部门同事总以为易用性不高、并且不少定制化监控实现起来很麻烦。分布式
而后,咱们开始折腾监控系统——“一棒子监控”,为何这么说呢,由于要把监控细化,不是一两天的事情。而B站的几乎全部请求都要通过CDN,入口在手上,出问题想知道还难吗?因而,咱们在入口处作了监控,全部 5xx 的错误都打到ELK,那么不管是什么业务出问题了都会及时告警,让相关人员来处理,后续再细化。
另外,要把精力投入到最重要的事情上。咱们能够花很长的时间去搞好Zabbix、Open-Falcon,但结果多是 从80分 到 90分这种并不显著的效果,而不少监控并非 Zabbix、Open-Falcon擅长的,不如打个差别战。
上图中有个 StatsD推荐给你们,StatsD能够很是灵活的嵌入到代码里进行监控(Shell均可以),由于使用UDP协议,因此服务端性能和故障不会影响到调用的程序,能够实现业务级的 QPS、响应时间等统计类监控。
其中一个报警最终的效果以下:
B站是自建CDN的,在国内有覆盖全国的好几百个CDN节点,CDN的监控一直是个难点,当某1个链路出现问题,用传统的Zabbix、Open-Falcon监控很难发现问题。虽然咱们自研了Http-monitor监控,可用于网站的可用性监控告警,但考虑到独立资源和数据可靠性,还有用户端网络质量的检测,仍是同时使用了第三方监控宝的服务。监控宝使用简单,功能实用,监控点多,分布式监控能够及时发现网络上出现的问题,提供的快照功能能够快速定位问题和查看详细信息。并且监控宝属于第三方独立的,还能出具网站的SLA证书,做为B站内部工做考核的依据。
三、开源系统的爱与恨
B站技术氛围浓厚,爱开源、爱新技术,因此使用了大量的开源组件,包括SheepDog(丢过数据)和GlusterFS(卡成翔),其中最大的坑是 SD卡 + Ceph存储。Ceph自己的设计很是好,可是姿式不对也会死很惨。好比B站的某套服务器集群用 SD卡来跑系统,结果 SD卡跪了致使系统也跪了,全部虚拟机的磁盘io都卡顿甚至死机,通过不断调优终于仍是稳定了。Ceph给我最大的安慰是:它没有丢数据,没有丢!
此外,Redis3.0、Codis、Twemproxy等开源系统都在B站获得了使用,最后咱们自研了 BiliTW(已开源),主要缘由是 Codis如今没更新了,Twemproxy的性能比较差,特别是后端Redis多的状况下(并且它和Redis同样、只吃单核)。BiliTW最大的改进是支持多核,增长了一些易于运维的功能。
最后总结一下B站运维团队的成长过程:
因为人手不足,因此事情得挑着作;因为故障多,得先抓入口、抓大的;因为运维系统跟不上,得先拿开源的顶着;因为用了大量开源系统,因此踩了不少坑。
问:请问动态口令是怎么作的,本身开发仍是开源auth?
答:用的是谷歌动态口令,开源的Google身份验证器。
问:Ceph部署到线上须要什么特别的处理吗?都遇到什么问题了?
答:Ceph要注意版本,必定要用稳定版,要用大厂用过的版本。另外 Ceph很是耗资源,B站所有用的SSD,Ceph的内部交换是独立的万兆网络。Ceph遇到最大的问题就是感受Ceph成了分布式单点存储,都是几个节点、几个副本,大的kvm块存储集群有64节点的集群,数据3副本,解决起来很复杂,须要有爱研究,能看懂代码的人。
问:B站运维团队多少人?
答:去年是从0开始,目前20多人,包含应用、研发、安全、信息等。
问:GlusterFS这个存储用起来卡吗?
答:GlusterFS 我认为只适合作大文件的冷存储。
问:为何不用Docker而用kvm
答:咱们也用Docker,Docker一直有关注,但实际用的人很少,能用起来的都是投了不少资源进去的大公司。在 Docker 1.9.0 开始,咱们把核心SLB跑在Docker上了,用Host方式。今年下半年,咱们的一个大目标就是Docker接入其它线上业务。目前使用的Mesos Macvlan方式已经在踩水过程当中。
问:Hadoop 相关的运维须要作吗
答:大数据也作,暂无专职人员。技术研究这块因为缺乏专人,我都是给每一个应用运维分任务。大数据就分给了一个应用运维在搞,和开发一块儿学习。
问:大家服务器网卡作绑定了吗?
答:咱们所有作了双网卡的绑定,万兆bond0。
问:故障多,这种麻烦如何快速解决?
答:这个很难,一方面须要了解业务,二方面须要有数据和手段。刚开始咱们查问题很是慢,后来逐步改进,好比完善监控,加故障锚点,故障总结。最近在作 Drapper 连接追踪,好多公司也都有作,实际上就是在请求的连接各个环节加标记,而后选择性作实时分析。Drapper最终实现的效果就像浏览器的审查元素同样,哪里慢一下就看到了。
问:mode0模式的话总带宽仍是一个网卡的吧?我在测试mode=4,结合交换机的动态聚合,遇到的问题是服务器相互传输的话,带宽是一个网卡的速度。
答:Mode 0 最好在交换机上作下配置,带宽是跑2张网卡的,既能冗余,也能上量。咱们自建CDN带宽很高,单台机器带宽就按20G准备。在猎豹用的是Mode4,也挺好的,Mode6不须要特殊配置,但有一个方向不均衡。以前测试Mode4效果最好,但公司最后用了Mode6,由于易维护。
关于带宽的问题,必须2个客户端向一个服务端同时传输才能达到双网卡带宽,之前测试mode0的时候遇到过跑不满的现象,后来就用了mode6。不过是好多年前的事情了,当时应该是CentOS5或6,如今B站用的是 Debian 8,Mode 0 并无发现问题。
问:大家的Redis集群3.0稳定吗?
答:Redis 3.0 挺稳定的,它的 Java客户端会好些,其它语言可能得本身开发。这边语言不少,有些业务仍是用 Proxy的方式在跑。咱们正在开发一个Cache管理系统,最终会兼容各类方式,将来会开源。
问:BiliTW是 https://github.com/anewhuahua/bilitw 吗?
答:不是,这个是前同事作的,是基于Twemproxy 改的多进程版本。将来会重构一个新的,放在 https://github.com/bilibili 下面。
问:B站的云用的多吗?
答:内部至关因而私有云了,游戏业务用公有云多些。
欢迎你们投搞:lily.qi@cloudwise.com