文 | UPYUN 运维总监 邵海杨

大家好,我是UPYUN的运维总监。从 2005 年 UPYUN 开始创业,我处理过的第一台较新型的服务器,那时候的网卡还是 Marvell 的芯片,通过自定义内核和驱动源代码做了编译才驱动使用起来。如今,UPYUN 已经走过 10 个风雨年头。这次演讲,我会把 UPYUN 以前走过的路、踩过的坑以及现阶段的状况,给大家做一个分享。当然,整个 PPT 的内容和经验都来自于 UPYUN 整个团队的凝聚。

运维人的野蛮生长

image.png

1998 至 2002 年,我在大学里学习 Linux,也是因为同学的表哥从美国回来旅游,他跟我们说 Linux 在美国很火,所以我们就玩起来了。算是一不小心入了 Linux 这一行。经过十多年的个人发展和磨炼,又是一不小心站在前沿技术的前列。所以说,当你没有方向的时候,多出去走走,多请教一些高人和智者,会给你不小的收获。

从 1998 年开始玩 Linux,2002 至 2004 年,整个国家要的是复合型人才,所以,一个人会身兼数职,如系统管理员、网络管理员甚至饮水机和打印机都是我修的。而且,当时的IT行业并不太发达,2002 年的时候,我在广州 IDC 的时候,每个月可以看到新增交换机和服务器也就十多台的规模,远没有现在火爆。

2004 至 2010 年,是我人生和技术上的一次提升。2004 年,我跟现在 UPYUN 的创始人在一家公司呆过,但不到一年我就去了台湾威盛,做嵌入式 Linux。以前大家认为 Linux 就是一张光盘或是几个 G 的 DVD 这么大。后来进去以后才发现 Linux 可以做得很小,车载系统中使用的 Linux 可以做到 12MB,电子盘都从台湾采购过来,适合高温高压低温低压的工业环境下都可以运行。

我在里面呆了近六年,把 Linux 玩得非常透,但随着时间推移和 IT 行业的飞速发展,Linux 作为数据中心的操作系统变得越来越流行,但是车载 Linux 要求稳定放第一,对并发量和创新技术如内核升级,消息队列,Nginx 之类的没有要求,而从 2008 年开始以淘宝为代表的互联网行业一直非常快速的在发展,这是你无论做了多少套车载系统都感觉不到内心激动的感觉,因为威盛有自己的主板、CPU、网络芯片,甚至还有自己的声卡和显卡,它的基因就是稳定压倒一切。

2010 年出来了加入了一家做在线客服,因为之前第一套架构也是我做的,他们随着业务的增长开始简单粗暴的做加法,最后大概堆了 70 多台服务器,我去了以后主要做架构的减法和运维优化,包括内核、系统优化的一些调整等,最终服务器缩减到 30 台,然后就有时间喝喝咖啡和看看监控,这个时候你会发现你的技术或者运维能力是超越了公司的现阶段的发展水平,虽然你的架构做得很好,但是业务却无法增长。

2012 年加入 UPYUN,挑战很大,那时 UPYUN 在全国已经有 30+ 个机房,120+ 台服务器。从 2013 年至今扩大到 127+个节点,1600+台服务器。运维人员从一个人到现在的三个人,都可以维护全国的 CDN。互联网是高可用、快响应。器多活多,大家现在熟知的分布式、消息队列,逐渐从银行、证券慢慢进入互联网的架构里。互联网与运维越来越重要。

运维的艺术

image.png

我认为运维的艺术是弹性。第一,从零到有,这非常重要。感谢 UPYUN 开创了一个新的时代,把 CDN 的产品做出来。无论运维做得多厉害,只是前面的一之后,加上多少零。人从无到有很困难,但这个目标是可以实现的,全力以赴去做,增长会很迅猛。在这里我要对 UPYUN 的创始人表示感谢,一系列的运维操作,干的活越多,用的技术越高明,证明以前的方法越 Low。但在那种时候,也许只能用那种方法。

运维有几条线,一是部署,由少到多,这是一种机器的控制方法;二是从小到大,当一台机器监控或是一个显示屏可以看到机器,有多少屏都看不完的时候,监控的手段非常重要。这时候有一种是白盒运维;三是性能,精益运维。一家公司从小到大,不可能一口吃成胖子。第一阶段是可用,第二阶段把现有的技术用好,第三阶段让它变得更好用。

UPYUN 从 2010 至 2013 年没怎么造轮子,站在巨人的肩膀上,把开源的软件想办法用好。随着业务增长越来越快,客户的要求越来越高。在我们的架构里面有非常深入的应用,做了二次开发。当服务器数量越来越多,运维自动化越来越快的时候,如果监控做不上去,很容易失控。我认为运维的技术弹性可控,是很好的方式。架构是计划出来的,不是设计出来的,在不同的时间和阶段,用不同的方法实现目标。并不是跑得越快越好,要接地气。

运维的法宝

image.png

运维的法宝是三位一体,一是运维自动化和流程化,方法有很多种,原来我做的是车载,既然要做到 12 兆,里面不可能有拍摄,一个拍摄的包就十几兆,没三、四十兆下不来。事情可以做,早期的 Linux 不就是分享吗?目标是一样的,一定要会用工具,把容易出错的事情用脚本规范好;二是监控常态化,及时报警及隔离,触发补救措施。事情总有上下文,不可能无缘无故的发生,肯定是前面做了什么,后面就会发生什么。

比如今天一出门,我们需要及时的异常处理。我们用第一人称的脚本做监控,发生什么事情让它出来汇报。比较明显的是像 DDos 攻击,就算你看出来也是事后的,因为流量打过来,最先感知的应该是网卡,我们会用脚本捕捉网卡的异常上升流量,在它临死前发一条信息过来“我不行了,我要死了”,最后把节点直接摘掉,这是属于监控常态化;三是性能可视化,要对自己的业务负责,提供连续的健康报表,争取资源。更重要的是运维拿不到机器或足够的硬件,工作很难做。你跟老板或是上一级讲技术点,他们听不懂可以把报表拿给他们看。方向比努力更重要,流程比补位更重要,方法比拼命更重要。在 2015 年,我们都在做流程的改进,前面太野生了。UPYUN 初创时拼命的努力,我去了以后,基本都是用方法改进。

image.png

部署自动化,一是应用,二是网络,三是硬件+系统。第一期我们用 awk、sed、bash,第二期是 Ansible+playbook,第三期是 cmdb+Ansible。流程发布很 low,因为第三阶段我想做 cmdb+Ansible 的结合,现在还没做怎么办?我们可以定时定点,模式规定星期三做发布,星期二做测试。大家去一个会议室,我给你设好,你给我观察。星期五再观察,发现有问题回退。这只是中间过程,因为我知道我要做什么。定下目标,中间的过程可以很好的控制。网络,开始我们和 H3C 做对接,购买它的设备,它给我们提供技术解决方案,甚至把工程师送到 H3C 的网络学校学习。我们现在做到 BFD,有多个数据中心,可以用光纤做互通。

我们不仅有两根裸纤,还有八个口。我们从北京、中山等数据中心做最近路径的选择。国内的中转机房,像电信、联通和移动,对于堆迭、静态聚合,云存储是内网做冷存储,我们跟交换机做堆迭,吞吐量有保证,交换机可以备份。二层变三层,随着我们的体量越来越大,跟 IDC 拿到的筹码更大,比如 2G 保底量,他给我们起三层,无论在抗攻击能力、网络拓扑结构上,有更大的灵活度。我们拿了 A 轮投资,第一件事就是把网络设备升级成万兆交换机。因为前面有 LOVS,可以做扩展扩容,网络无法扩容,如果要扩这个点,业务必须切掉。跟机房谈一个万兆口甚至是两个万兆口,网络先行。硬件直接跳到嵌入式小系统,当机器只有一块盘的时候,把它从五变到六,机器必须下架。

用小系统会发现,这里有两种介质,U 盘和磁盘,如果要升级系统,我可以把系统一下切到小系统,对磁盘做操作系统的写入,前後不超过三分钟。你们说可以用IPMI或是网络安装,CDN 有特殊性,机房不在手上如何安装。我们现在可以做到上千台的机器从来没在公司出现过,直接把系统寄到生产线,在生产线上把 U 盘插上去,从生产线插到机房,机房人员插线后,我就可以远程控制。这是基本的系统,不会带我们的敏感数据进去。不然这么多 CDN 机器发到公司,我们要解包、安装系统、测试等,感觉运维就是一个搬运工,这是不可取的。在部署自动化方面,我们有工具、流程,能力越大,责任越大。

现在很多大会在谈运维自动化,油门和刹车必须有降级、降维度的过程,这跟你的系统架构设计紧密相关,当运维在架构上保证降级后,很多事情需要推动开发,开发部门要配合你降低维度。对开发来说,如果没有好的意识不愿意做降级,要说明哪些部分设置开发,在适当时候做降级。一个月前,我们曾经做过一次降级,蛮成功的。

image.png

监控常态化,这是有教训的。监控要素不全面,监控性能跟不上,我们发现 1000 台就够了。1600 多台加上选项,数据库反而是压力最大的系统,这是不可思议的事情。随着业务量的增大,运维晚上要睡觉,电话打不醒怎么办,我们每个运维的人都配一个小秘书,打到你的手震醒为止,这也是一种方法。

监控分等级,100 台随便看,100 至 1000 台用 Zabbix,第一人称报警,我们有自己的业务监控,还有全国节点分布图,我有将近 2000 台机器,用什么样的方式都无法把这些机器的数据全看一遍,怎么办?要把数据做汇总,这是一种数据可视化的范畴,带点美工的感觉。我们现在可以做到带宽质量图、ELK 数据分析、小米监控,小米监控有些要做二次开发,也逐渐在做。整体性能比 Zabbix 好多了。电话报警+手环。这是第一人称报警,一天肯定有一、两个 IDC 捣乱,网线跑得好好的,它会改造网卡,用脚本监控网卡的数据突然从千兆变成百兆,第一人称的监控有一些脑图把这么多年的数据整理成一些函数。

这是我们的狗眼监控,在业务层做卖点,可以监测到每一个子系统的响应速度。这是全国节点带宽图,里面有红色、绿色、蓝色,这个节点表示服务器的数量。我们去蘑菇街的时候,看所有机房的实时监控,高峰期数据会下降,我们知道机房带宽会慢。我们的策略很简单,每天盯三个最慢的机房,CDN 组就是这么做,每天三个最慢的机房,一个个问是什么原因,做 SLA 的保证。我们的监控有切身的体会,上半年我们的口号是发现问题比客户及时,但一直做不到。我们的客户是 24 小时在线上,每次都是客户比我们快。我们很苦恼这个事情。上了 ELK 的日志大数据分析后,我们发现有时候比客户发现得更快,这张图有高有低,看起来很高,如果网络出现问题,旁边的纵坐标的可能是 0.1 至 10,很细微的波动都会有明显的柱状图反馈。我们总结经验,当客户跟你说出问题的时候,这种柱状图会直接飙到两、三千,柱状图在一、两百的波动很正常,超过两百就要赶紧看,两百到两千肯定比客户快。我们特别拨了 30 台机器做 ELK 组合,有了这个利器后,真的可以发现问题比客户快。这就像在黑暗中找到一点光。

image.png


性能可视化,我们现在可以做到在缓存软件上做 Nginx+lua。我们直接上两个,一个管 ssd。ats 可以做到秒级重启,上面有 lvs,lvs 会做负载均衡。我们不能保证这个集群里,ats 同一时间存取,但如果内容泄露得差不多,就得强制重启。我们现在招了两个专职人员研究 ats 源代码,你可以把问题留在这里,我们就可以解决了,我觉得这是架构师存在的意义。

我们有自研拥塞算法,发现系统里带的算法比系统自带的算法快很多。第三方给我们提供的算法可用性很低,内核在我们公司升级很快,在 Linux 的代理升得跟应用程序一样快。内核的升级会给性能带来提升,我们自己做了一些算法,现在也有使用。硬件系统,我们从 2013 年一直看 OpenStack 的版本,自己也有投入建设。

2015 年 5 月份左右,我们开始关注 mesos+Docker,最近一、两年 Docker 很火,我要节约成本,那时候只能选择 OpenStack。我们做的都是 Linux,版本可以高度统一。现在发现 Docker 很好用,基本上全在研究 Docker。我自己会参加 Docker 的会议,请 Docker 专家来我们公司做思想上的宣传和突破,借外部的力量推进公司内部的建设,这是我们努力的方向。

ELK 可以做很多事情,可以看到低于 100 毫秒、300 毫秒、500 毫秒、1000 毫秒,有 4xx、5xx 的比例,数据报表一点点小波动都可以看到差异。我们曾经做过测试,没使用优化内核算法和使用了新的hybla拥塞算法,从 3.18 的内核升到 4.1 的内核,数据会有提升。Kernel 要自己把握,3.18 到 4.1 的时候,我们遇到一个坑,内网做 TCP 的时候做大包调整很爽。放到外围 CDN 的时候,4.0 选项有 Bug,4.0 的内核在因特尔 1000 的网卡双向组合的时候会无响应,3.18可以接入老的因特尔 1000 没问题,它的好处显而易见,但一定要把握度。

运维的烦恼

image.png


接盘侠和背锅侠,公司要有一个人出来承担责任。他不会责怪你,如果责怪你,这家公司可以走了。如果能够在这个压力下把事情做掉,人家认可你,你就是领队。频繁申请和更换资源,现在 OpenStack 和 Docker 有这方面需求。昨天我遇到华为的两个朋友,把 OpenStack 和 Docker 的人都招回去了。Ansible 和 Mesos 也很好。现在几千台服务器都有 Docker。监控不到位可以用 ELK 和 Hadoop,销售单点是 LVS+Haproxy。硬件,双电源、双电力、多运营商、双交换机、双机柜、多机房,根据业务不同的发展阶段做权衡。要人要钱要资源,你可以自己有影响力,也可以认识的人有影响力。

运维指导思想


image.png


机器负载均衡里做得滚瓜烂熟。你们用脚本、Playbook 做机器生成,跟人无关。要舍得把东西交出去,学习新的东西,交给那个人重复做这个事情,教出去后自己不学习会被淘汰。与状态无关,你要做无状态和扩展性,有些程序很喜欢有状态,这是考验你跟工程师、CTO 的能力,推动程序,我们现在在推消息,有关状态的都到消息队。与数量无关,你要做部署的恒定,运维很多的话语权在于业务突飞猛进的时候,你的运维成本仍然可以保持不变,老板的威信就上来了。我跟老板说什么时候业务上一百,脚本都写完了。老板被你说得后背要冒汗,他害怕了,你地位就提高了,大家都有人生存在的意义。

运维的修炼

image.png


闲下来,掌握技术;走出去,我们有要求必须掌握的部分,前两天我看亚马逊的会,觉得这绝对是万金油,大家可以好好学学;为什么,信息多,长知识,生智慧,学以致用,你讲的东西要深居简出,所有人都听得懂。

我们公司的使命是做 CDN,我们公司只有一百多号人,一百多号人撬动两家上市公司的市场,这是我们要干的活。我们每个人都很厉害,这是我们每天都在努力的方向。CDN 的市场会越来越火,市面上从来不缺 CDN,CDN 不会太多,360P、1080P 以及以后的 4K,CDN 只会少,不会多,大家做好分内事,把 CDN 的市场做大。公司福利,工作两年,20 万贷款,三年 30 万贷款。人手一个 Mac,深圳月薪 5 万也挡不住,杭州也是月薪 5 万。


UPYUN 的公司文化是鼓励创新和颠覆,我们公司技术革新特别快,大公司升内核以年为周期,我可以做到三个月把 CDN 的内核升一遍,用周和月衡量,怎么快怎么来。你在我们公司有很多主动权和发言权,我们鼓励颠覆。现在我下面的小伙子把我的东西改得差不多了,爱拼才会赢,从来没输过。淘宝阿里都要的很厉害的工程师,这种人是可造之才。我们这一百多人的团队非常和谐,欢迎加入我们。