本文根据中国银行数据中心刘扬清老师在 GOPS 全球运维大会 2019 · 深圳站分享整理而成。
一、什么是反脆弱
什么是反脆弱?反脆弱的思想源于《黑天鹅》的作者塔勒布提出的新思想,他将黑天鹅的想法进行了提升,主要讨论如何应对“黑天鹅”。作者想阐述的理论是在面对黑天鹅时如何在黑天鹅中获利。
这本书很多专家给了非常高的评价,比如《思考快与慢》的作者丹尼尔•卡尼曼——“这本书改变了他对世界如何运作的看法”;樊登——“带来了心灵和生理上的震撼”;逻辑思维罗振宇——“这是一本未来生存手册”。
这个世界充满很多不确定性,前段时间发生的波音 737 事件。为了防止飞机起飞时往上冲,刻意压低飞机机头,这本身是一个很好的安全措施,但是由于飞机的监控点发生故障,导致程序输入的信息错误,自动化的程序没有按照正常处理,本来是不确定的事件,结果导致严重的事故。
再说另一件事,2018年微软的数据中心遭雷劈而导致服务中断24小时,造成了很大影响。
英国脱欧,很多都人预计不会脱欧,就投脱欧好了,反正其他人都会投不脱欧,结果:脱欧了!
什么是脆弱?在面对不确定性事件时,如果会造成很大损失,这就是脆弱。中国经济的高速发展让很多人实现了中产,人民群众觉得自己的经济水平提高了。
2018 年有一篇帖子《流感下的北京中年》,其实帖子作者的家境不错,但由于老丈人得了突发流感进了ICU,20多天花了几十万,最后他的老丈人也不幸去世了。
如果他老丈人继续住的话可能就会卖房,如果再强一点可能会对他的家庭经济造成很大的损失。
看起来他是一个中产,但在面对不确定事件时,他的家庭经济是比较脆弱的,因为他并未做很多可以抵御风险的措施。
2008 年的次贷危机,由于当时美国经济不断放次贷,风险不断扩大,雷曼兄弟有一笔账收不回来,结果导致雷曼破产,引发整个美国经济危机,进而因美国经济崩溃导致全球经济危机。这是小事件引发的大损失。
脆弱的反义词是什么?一般我们会想到坚韧,比如汶川地震的“猪坚强”。脆弱的反义词不是坚韧,坚韧可以保证我们不受伤,可以在粮食灾荒时活下来,但这并不是脆弱的反面。
我们强调的是反脆弱,反脆弱的含义是当我们面对随机事件冲击时,获得的有利结果要大于不利结果,当有特殊情况发生时不但不受伤反而变得更好。
相信大家经常听到一个词“机遇与挑战并存”,如果把挑战处理好可能会是一个机遇,如果没处理好对人生可能是一个打击。
如何应对不确定性?传统做法是加强预防措施,研究意外可能造成的损失,推测最坏的情况是什么,以此做出准备。
反脆弱的思路不同,它对于意外和不确定性并不排斥,也不过度预防,而是相信意外和不确定性是人生的常态。意外肯定会发生,我们要做的是直接应对。我们希望的是,在面对不确定性时是得到一些,而非失去更多。
二、云时代的脆弱性
1、云计算时代-风起云涌
云计算时代的特殊性,云计算、大数据、人工智能最近十年的发展对传统行业的冲击非常大。有人说这是非常好的时代,因为技术飞速发展,对传统企业来说这是最坏的时代。
对于传统的银行而言,过去由于政策优势可以躺在政策上吃饭,随着移动互联网的发展,对传统银行的冲击是非常大的,尤其是余额宝出来以后。余额宝类似于通过发理财的方式吸纳存款,这对银行来说有很大的冲击。
Brettt King 写了《BANK 4.0》,其中提到 Banking Everywhere,never at a bank。金融以后在任何场景、任何地方都会有,但是以后可能就没有银行这个词了。
前段时间刚发了虚拟银行的牌照,大家可以直接通过互联网的方式创办全新的银行,不需要有网点。发信用卡、存款、贷款直接在网上做。
现在发工资时也只是银行帐号多了一串数字,使用余额宝、支付宝消费也只是从一个地方挪到另外一个地方,大家身上都不带钱包,很多朋友可能有几年没有去过银行柜台。
金融服务肯定会和大家结合在一起,但是银行可能就没有了,所以传统银行也在反思,四大行除了有国家政策保护没有任何优势,危机感很大。
2、云计算时代的脆弱性
2019年3月3日,阿里云发生宕机,很多服务受到影响超过 3 小时。大家在网上进行讨论,云计算到底靠不靠谱。
圈子里还有一种声音传出,宕机的阿里云是在杀死运维行业吗?听说整个运维行业可能被干掉。很多运维的老前辈说《运维的耻辱感》,有一个专家写了《运维的尊严》,大家听过一首歌《运维骆驼》。
有一些专家说“不好意思,杀死运维行业可能没那么容易”。大家可以看到,云计算服务有脆弱性在里面,运维行业在飞速发展的过程中,脆弱性可能更大。
比如 NoOps 概念,所有基础环境全都是买AWS,开发版本的自动化部署平台,通过自服务的方式部署版本,包括监控等等。
它发现我需要再有系统运维人员,开发正常开发程序,全部部署在我的云上。一天几万次的变更,运行的非常稳定。真正需要运维的只是十几个 SRE,开发自动化运维平台,其他的运维不需要了。
对于公司来说已经可以基本实现 NoOps,运维真的可以被杀死了,这对运维来说是一个警醒。
3、云服务的技术发展
现在的系统规模越来越大,以前银行可能几台大机和几台小机就够了,现在分布式。昨天老领导说亚马逊有 500 万台服务器,阿里有 200 万台服务器,这个数量级和以前是完全不能比的。
技术架构越来越复杂,以前可能是一个单机,现在虚拟化加上容器,整个应用的复杂度呈指数级增长。
面对故障时实时性的要求越来越高。以前银行ATM机取不了钱打个电话投诉我们处理,但是一天同时会有多少人在 ATM 机取钱?现在大家用手机随时随地进行交易、转账,一旦出现问题就会有投诉,如果几分钟之内解决不了还会有更大的投诉。比如钱要拿去炒股,影响我赚钱,要赔偿损失,这都是真实的案例。
影响程度越来越大。阿里云出现一些小故障可能会导致整个地区的服务器用不了。程序员说这个应该没什么问题吧,就手工执行了一个配置,结果都挂了,影响很大。
阿里云、AWS、微软、腾讯、谷歌都出现过故障和问题,我们要做的是怎么去应对。规模化会导致脆弱性指数性增长,系统越复杂越容易导致失控的连锁性的反应,我们对故障越来越难以预测,什么时候故障会出现,我们是无法预计的。
4、运维人压力山大
对于运维人来说压力特别大,监管要求越来越严格。在传统银行,一个故障超过30分钟必须向银监会报备,报备是行长带着科技老大去解释,这种压力会传导到底下做运维的人,我们会有一个生死线,如果30分钟之内解决不了可能今年的绩效就没有了。
运维的资源越来越多,传统银行好一点5万台,互联网公司百万台很正常。故障影响越来越大。
排查问题,以前就几台服务器很容易,现在靠人工去查根本不可能。业务要求越来越快,甚至今天上午提出的需求晚上能不能帮我实现,这是非常实际的案例。
5、反脆弱:运维人的反击
我们对服务影响的要求越来越低,挑战越来越大,如果还按照以前的思路做事情的话,到后来很多人到投产期间要去求神拜佛,求一下观音。但我们学了新思想:要反击。我们要相信科学,拒绝迷信。
《七龙珠》当中孙悟空每当快被打死一次,一旦复活都会比以前更强大。我们需要从每次失败、故障中学习、成长、反击、复盘。
三、如何提高反脆弱性
如何提高反脆弱性:减少不利因素、增加可选择性、主动理性试错、增强生物特性。
1、减少不利因素
我们首先需要降低自己暴露于负面“黑天鹅”的概率之中。“负面黑天鹅”:可能会大概率出现问题的,或者可能会对你带来比较大损失。
比如去爬北京的箭扣长城,因为特别险,如果一不小心就会被摔下去。从反脆弱角度来讲,大家可以不去爬箭扣,可以去爬八达岭。
从运维角度来看,负面“黑天鹅”是人工操作,人是最不靠谱的。
大家之前做运维时,靠人去做事情的时候很容易发生错误,如果我们能将手工去做的事情自动化,这样就可以减少由手工操作带来的负面黑天鹅事件的概率,可以降低人工操作的风险。
微服务拆分,如果我们的业务不是那么大,而且我们的业务访问量也不是那么多,其实我们完全可以把它当成一个单点服务,我们没有必要为了微服务而微服务。
微服务以后,把一个大的应用拆成十几个微服务,这对运维来说成本是大大增多的,如果微服务治理能力和工具没有跟上,这对运维人来说是灾难,根本 hold 不住。
我们要根据我们的业务场景和业务应用特点去看要不要做微服务拆分,如果有必要,像阿里就必须要拆。
普通转型避免被动。传统银行在面对互联网金融攻击时会反思,包括我们自己的运维能力研究也一直在按照传统的方式在做,很可能过几天传统银行就没有了。
虚拟银行上市以后,大家的钱都转到虚拟银行当中,因为很方便大家的使用。
很多银行都有了手机银行,移动支付很方便,但是传统银行不去跟进,大家会说中国银行手机银行都没有吗?于是把钱都转走了,去了别的银行。
对于传统银行来说要主动转型,避免自己处于负面“黑天鹅”事件中。
一个系统的反脆弱性,往往来源于若干脆弱的单位和个人,竞争带来反脆弱性,互联网金融的发展对传统金融行业其实是好事,其倒逼传统金融往前创新。
国家一直在推动金融开放,即使加入WTO这么多年,金融一直是封闭的。
通过互联网金融的发展、推动、促进,传统银行一直在自我迭代和升级,能力也一直在变强。再过几年我们的能力在与互联网行业PK时得到了提升,这个时候我们的反脆弱性得到了很大的提高。
2、增加可选择性
杠铃策略,让自己避免出现在负面黑天鹅事件,同时又要想办法把自己挤到正面黑天鹅的收益当中。
我们做理财,比如有100万元的闲余资金,买余额宝收益低(3%),另一种买基金,收益率高,但是风险很高,这个时候大家会如何投资?
听众:投资完全根据个人对风险的决策,以我的情况为例,我风险承受力比较低,我会把40%、50%投入到高收益的股票,把其他投入到余额宝。如果钱对我只是数字,我会把更多的钱投入到股票当中。
按照杠铃策略,我们可以先保住本金,把80%、90%的资金放入风险比较低的理财当中,可以用剩下20%的钱投入到有可能带来很大收益的股票当中。假设20%的钱都没有了,对我们也还OK。
我们需要两头下注,我们在做风险管理时将大量资金放在风险比较小的地方,拿出小部分放在收益可能很大的地方。
杠铃策略最典型的是创新,我们可以投资创新,通过创新以小搏大。我们现在面临互联网发展,现在也能过的下去,如果这个时候能拿出人、精力、资金投资到区块链、云平台建设、AlOps建设,我们这部分投入即使没有立刻产生产出,但是对于我们的未来来说就是小投入带来大收入的地方,我们需要不断投入到创新当中,这是我们用小的投入来获取大收益的点。
冗余,高可用架构备份。我们要避免发生单点风险,比如阿里云。阿里云北方区服务器挂了,如果我们提前考虑,我们在腾讯上也部署一个云,如果阿里云出现问题一点问题都没有。
在阿里云当中我们可以部署一个集群,数据库做备份,我们在同一个城市会有一个本地备份,同时我们会在异地也建立一个备份,现在互联网都是多地多中心同时提供服务,一旦某技术中心挂了也不会有影响。
某大厂之前有一个案例,有一个员工把磁盘弄坏了,结果磁盘上的备份数据都找不回来了,有些小公司说我们公司所有的价值都在数据上,要求赔偿1000万元。我们对数据的备份是很关键的,如果那个公司的数据不仅备份在腾讯云上,同时也做了异地备份,即使腾讯云挂了,公司业务是不会受到影响。
AB Test 增加用户的可选择性,AB Test做的最好的是头条。它的每一个业务场景和功能都会做两个版本,同时发布到用户中,不同用户看到不同的页面,根据用户的反馈决定哪个功能更好,不断通过这种方式迭代、优化。
头条通过这种方式增加用户选择性,最终实现自己功能的快速迭代和优化,这让它自己得到了很多正向黑天鹅。
3、主动理性试错
我们需要用开放的态度对待错误,错误可以带来进步,同时能够提高系统健壮性。如果错误不够,我们甚至可以在可控范围内创造一些人为错误。主动理性试错其实是三个词:“试错”认为创作困难和发现错误;“主动”即使没有错误主动去做制造;“理性”在可控的范围内。
持续交付,我们需要快速对用户体验进行迭代,以前做需求分析的时候大家把脑子里面的事情想的非常清楚,想的特别明白后再投产部署,但是后来发现用户根本不买单。我不知道其他人怎么想怎么用,我先投出去一版,先看大家反馈。
脸书当年上新功能时被全网吐槽,扎克•伯格又更新了一版。对于脸书来说,这个功能如果一直在内部研究根本没有用,只有扔出去给客户反馈才能知道对还是不对,好还是不好,这其实是一个好的想法,可能是角度不一样,如果换个角度就能给用户带来很好的提高,是骡子是马拉出来溜溜。
Netflix 混沌工程,系统软件做到没有?做到了。于是假设现在有一只猴子来到了机房当中,猴子到机房中做什么事情?把网线拔了,把电源线拔了,你还能不能做到?试过才知道,当然这个事情是在可控范围内。
从别人的错误中学习。人们经常是从自己的错误中学习,我摔了一跤我学到了,以后不再摔跤了,但我们更多应该是从别人的错误中学习。创业者是非常值得尊重的,因为大部分创业者什么也没得到,但是却为别人贡献了“什么是不可行”的知识。
最近这几年,中国互联网发展迅速,这与总理提出万众创业有很大关系,大家可以做很多新的事情。活下来的肯定是好的,存在一定有它的价值。失败的肯定是当时有问题或者不适应,但是这给了其他人指示,这条路不通。
4、增强生物特质
任何有生命的物体在一定程度上都具有反脆弱性。人体免疫系统具有非常强的反脆弱性,我们的扁桃体可以防御细菌攻击我们,白细胞在身体内巡检,它会清理异常细胞和病毒,它还有很强的学习能力,还能优化自身免疫能力。
比如我们打疫苗,牛痘是跟天花很像的病毒,但是它对人体的伤害非常小,我们注重牛痘以后会让免疫系统认识天花是病毒,当有天花病毒侵入人体的时候白细胞会把它干掉,所有疫苗都是这种原理,用对身体比较小的错误来对大错误进行防范。对于运维来说,我们要做好防火墙,要做好异常自愈能力。
提高免疫力的方法有三个:打疫苗,通过刺激形成抗体;休息好,心情好;定期体检。我们可以利用混沌工程做检测,我们可以做自动巡检来检查身体是否有问题。
我们可以利用人工智能和大数据技术实现 AIOps,提升整个系统的生物性,最终我们的目标是无人运维,实现高度反脆弱。神经可以感知外界信息,大脑可以对收集到的信息进行决策后行动。
反馈到运维 AlOps,我们通过大数据技术收集海量信息,感知到数据后会聚在大数据平台中,我们将这些信息数据进行分析后做关联影响分析、故障预警等事情,可以跟专家数据库关联,针对这个故障应该采取什么方式解决,再利用自动化运维的工具和平台实现工具优化。
四、运维如何转型:意识转型、技术转型、人员转型
1、意识转型
利用反脆弱思想正确对待故障,故障是系统的常态,没有故障只是系统运行的一个特例,任何时候都有可能发生故障。我们需要做的是采取有效手段应对故障,提高系统反脆弱性,让故障不会造成影响和服务的损失;积极拥抱新技术,参与到技术变更中。
鼓励创新与竞争,个体的脆弱能带来组织的反脆弱,海尔将自己的组织打散,它将自己的企业由死做活;改变对错误的态度,错误不等于失败,错误是成长的点。
2、技术转型
建设多地多中心的云中心架构;采用基于容器和K8s的微服务架构,通过K8s可以提高应用架构的转型;建设 DevOps 持续交付流水线;建设基于机器学习和AlOps的平台。
中行的智能化运维转型,我们有开发的工具平台,有自动化运维,以及流程管控平台、监控。
如何实施?将所有配置、基础设施标准化,在此基础上做自动化,自动收集CMDB,自动完成技术环境变更,与流程打通;平台化,对外支持服务,人工智能平台、云管理平台、安全平台,最后实现智能化,实现多维监控、容量预测、趋势预警。
3、人员转型
云计算时代,如果运维还靠手工做事情是九死一生。我们首先要做运维开发,谷歌提出SRE,我们需要用软件工程的方式实现人工操作的事情。我们学习开发能力,至少掌握一门开发的语言。
转型做产品运营,可以对业务进行指导。《终身成长》是非常好的一本书,每个人的潜力是无穷的,我们需要让自己的思维开放,把远方看的更远一点,一直朝着自己的方向前进,将自己的时间、精力、金钱投入到远方,总有一天会到达。
搞IT都不容易,我们需要不断提高身体反脆弱性,同时提高技能的反脆弱性。
薄世宁提到“真正的健康,是暴露于病毒细菌的危险之下,还依然健康”。我们现在的生活当中遍地是细菌和病毒,有细菌没有关系,进入我们体内我们把它杀死就可以。真正的反脆弱是暴露于各项不确定性的事件中,还依然保持成长。我们不惧怕任何风险,这就是反脆弱。