前言
? ? ? ? 三個(gè)月前嘱根,我換了工作嚣潜,到某金融集團(tuán)的的應(yīng)用運(yùn)維團(tuán)隊(duì)唤锉。從初創(chuàng)型的互金公司到一家大型的傳統(tǒng)金融公司世囊,我感受了巨大的差異。
? ? ? ? ?外界互聯(lián)網(wǎng)企業(yè)腌紧,大家總是談?wù)摰牡奈⒎?wù)茸习、DevOps、持續(xù)集成和持續(xù)交付壁肋、容器化部署的這些概念号胚,在這幾乎完全沒(méi)有用到,甚至很少聽(tīng)到浸遗。
? ? ????工作方式的巨大轉(zhuǎn)變猫胁,引起了我對(duì)運(yùn)維工程師這個(gè)角色的核心價(jià)值,產(chǎn)生了一些思考跛锌。作為一個(gè)篤信“目的即本質(zhì)”的我來(lái)說(shuō)弃秆,覺(jué)得抓住一份工作的核心價(jià)值所在,才能對(duì)照自身評(píng)估自己是否符合這一角色定位髓帽,是否適合堅(jiān)持長(zhǎng)期發(fā)展菠赚,找到長(zhǎng)期發(fā)展的準(zhǔn)繩,不至于偏航郑藏。
作為運(yùn)維核心價(jià)值
? ? ? ? 要明晰什么是運(yùn)維的核心價(jià)值衡查,也就是要弄明白,從整個(gè)軟件行業(yè)運(yùn)維的角色定位來(lái)看必盖,運(yùn)維的核心價(jià)值在哪里拌牲?怎樣增強(qiáng)自己實(shí)現(xiàn)核心價(jià)值的能力的問(wèn)題俱饿。
? ? ? ? 軟件產(chǎn)業(yè)本質(zhì)其實(shí)還是工業(yè),它的產(chǎn)品和傳統(tǒng)的工業(yè)產(chǎn)品形態(tài)雖然有巨大差異塌忽,但其實(shí)在生產(chǎn)流程中還是和傳統(tǒng)工業(yè)有諸多本質(zhì)的相似之處拍埠。如果把軟件生命周期看作汽車(chē)的生命周期,那么開(kāi)發(fā)工程師就是汽車(chē)設(shè)計(jì)生產(chǎn)人員土居,負(fù)責(zé)將汽車(chē)(軟件)從需求枣购,轉(zhuǎn)為技術(shù)設(shè)計(jì)圖紙變?yōu)閷?shí)實(shí)在在的產(chǎn)品,主要作用發(fā)揮在汽車(chē)生命周期的前期装盯。而運(yùn)維工程師就不同了坷虑,運(yùn)維工程師通常是軟件生命周期的中后期才介入的。就像汽車(chē)駕駛和維修的人員埂奈,而軟件用戶就像是汽車(chē)的乘客迄损。運(yùn)維人員要采用一切技術(shù)手段和管理手段,保證“汽車(chē)”的正常账磺、安全芹敌、穩(wěn)定、高效垮抗、舒適的運(yùn)行氏捞,把乘客帶向能為公司創(chuàng)收的“目的地”。換言之冒版,開(kāi)發(fā)輸出的是有形的產(chǎn)品液茎,運(yùn)維輸出的是無(wú)形的服務(wù),即一種為軟件消除辞嗡、控制運(yùn)行中產(chǎn)生的風(fēng)險(xiǎn)的服務(wù)捆等,這和金融領(lǐng)域里“風(fēng)控”的角色非常類(lèi)似。所以運(yùn)維的一切工作和能力建設(shè)续室,都是為了控制風(fēng)險(xiǎn)這個(gè)目標(biāo)為依歸栋烤。
? ? ? ? 現(xiàn)在IT行業(yè)內(nèi)運(yùn)維的工作以機(jī)器采購(gòu)、機(jī)房建設(shè)挺狰、網(wǎng)絡(luò)規(guī)劃明郭、系統(tǒng)裝機(jī)、應(yīng)用部署丰泊、中間件維護(hù)薯定、監(jiān)控處理、自動(dòng)化運(yùn)維等多種形態(tài)存在瞳购,很多人把運(yùn)維工作看做一種打雜的工作沉唠,負(fù)責(zé)的都是重復(fù)又繁雜的工作,甚至很多運(yùn)維人本身也看不到自身的價(jià)值感苛败。
? ? ? ? 但是满葛,把運(yùn)維工作的本質(zhì)理解成一種為軟件運(yùn)行消除和控制風(fēng)險(xiǎn),就可以很好理解運(yùn)維工程師為什么承受著這么繁重而且龐雜的工作內(nèi)容了罢屈。開(kāi)發(fā)工程師把軟件設(shè)計(jì)并且開(kāi)發(fā)出來(lái)嘀韧,運(yùn)維工程師就負(fù)責(zé)把軟件運(yùn)行好。就像一輛汽車(chē)的司機(jī)缠捌,要把汽車(chē)從汽車(chē)廠帶向正確的方向锄贷、一路上規(guī)避各種各樣的風(fēng)險(xiǎn),定期對(duì)汽車(chē)進(jìn)行檢修和保養(yǎng)維護(hù)曼月。所以谊却,開(kāi)發(fā)工程師和運(yùn)維工程師最本質(zhì)的差別就是,前者生產(chǎn)軟件產(chǎn)品本身哑芹,而后者圍繞前者生產(chǎn)的的產(chǎn)品炎辨,提供一系列風(fēng)險(xiǎn)控制的服務(wù)。那么聪姿,就讓我們從風(fēng)險(xiǎn)控制的視角碴萧,來(lái)思考探究運(yùn)維工作的核心價(jià)值和其方法論。
?????????“打在胎里就有隨時(shí)流產(chǎn)的風(fēng)險(xiǎn)末购,當(dāng)媽的一口煙就能長(zhǎng)成畸形破喻,長(zhǎng)慢了就心臟缺損,長(zhǎng)快了就六指盟榴。好容易扛過(guò)十個(gè)月生出來(lái)了曹质,一不留神害得讓產(chǎn)鉗把腦袋夾扁了。都躲過(guò)去了擎场,小兒麻痹羽德、百日咳、猩紅熱顶籽、大腦炎玩般,還在前面等著呢±癖ィ哭起來(lái)嗆奶坏为,走起來(lái)摔跤。摸水水燙镊绪,碰火火燎匀伏。是個(gè)東西撞上,那就是個(gè)半死蝴韭。鈣多了不長(zhǎng)個(gè)够颠,鈣少了羅圈腿¢總算混到會(huì)吃飯履磨、能出門(mén)了敛摘。天上下雹子,地上跑汽車(chē)鳄梅。大街小巷是個(gè)暗處就躲著壞人纺讲。你說(shuō)趕上誰(shuí)都是九死一生,不送命也得落個(gè)殘疾……”
????????在軟件的“一生”中矛辕,就像一個(gè)人的生命歷程一樣笑跛,可能面對(duì)各種讓你猝不及防的風(fēng)險(xiǎn)。只有充分認(rèn)識(shí)風(fēng)險(xiǎn)聊品,才能控制風(fēng)險(xiǎn)飞蹂。
風(fēng)險(xiǎn)的分類(lèi)
????????軟件面對(duì)的風(fēng)險(xiǎn)多種多樣,可以按風(fēng)險(xiǎn)發(fā)生的階段翻屈、風(fēng)險(xiǎn)產(chǎn)生的層面陈哑、造成的影響大小、導(dǎo)致風(fēng)險(xiǎn)的原因等等不同的維度去劃分妖胀。為了抓住風(fēng)險(xiǎn)控制這一核心目的芥颈,我們就從導(dǎo)致分險(xiǎn)的原因這一維度開(kāi)始著手。
導(dǎo)致風(fēng)險(xiǎn)的原因
先天性風(fēng)險(xiǎn)
????????所謂先天性風(fēng)險(xiǎn)赚抡,主要指的是在軟件設(shè)計(jì)階段爬坑,就存在系統(tǒng)性缺陷引發(fā)的風(fēng)險(xiǎn)。需要強(qiáng)調(diào)的是涂臣,軟件設(shè)計(jì)階段不僅包括軟件的業(yè)務(wù)邏輯盾计、開(kāi)發(fā)框架、依賴的中間件赁遗、數(shù)據(jù)庫(kù)署辉,還應(yīng)包括軟件運(yùn)行的服務(wù)器硬件、操作系統(tǒng)岩四、以及網(wǎng)絡(luò)架構(gòu)等環(huán)境因素哭尝。 許多開(kāi)發(fā)者只關(guān)注代碼的編寫(xiě),而對(duì)軟件運(yùn)行的環(huán)境因素知之甚少剖煌,甚至不屑了解少學(xué)習(xí)材鹦。任何一個(gè)在技術(shù)領(lǐng)域有追求的技術(shù)人,都應(yīng)對(duì)此保持一種鄙夷的態(tài)度耕姊,古語(yǔ)有云“不謀全局者桶唐,不足以謀一隅”。一個(gè)只顧埋頭編寫(xiě)業(yè)務(wù)代碼茉兰,不掌握軟件整體設(shè)計(jì)邏輯和全部軟件生命周期的開(kāi)發(fā)者尤泽,終究只配當(dāng)一個(gè)“代碼工人”,而無(wú)法成長(zhǎng)為一個(gè)優(yōu)秀的設(shè)計(jì)者或者技術(shù)leader。
????????先天性的風(fēng)險(xiǎn)坯约,主要在軟件設(shè)計(jì)階段熊咽,沒(méi)有經(jīng)過(guò)足夠細(xì)致周密的技術(shù)調(diào)研和論證,或者說(shuō)有些問(wèn)題闹丐,難以在軟件上線生產(chǎn)環(huán)境之前得到暴露网棍。這很大程度上,就是由于設(shè)計(jì)軟件的技術(shù)團(tuán)隊(duì)欠缺統(tǒng)領(lǐng)全局的能力妇智。往往這種風(fēng)險(xiǎn),因?yàn)槿狈ιa(chǎn)環(huán)境那么豐富的業(yè)務(wù)場(chǎng)景氏身,難以在簡(jiǎn)單的功能性測(cè)試中檢查出來(lái)巍棱。于是,運(yùn)維往往淪為離這一類(lèi)風(fēng)險(xiǎn)“最近的消防栓”蛋欣。但是大多運(yùn)維工程師沒(méi)有軟件設(shè)計(jì)的經(jīng)驗(yàn)航徙,解決起這類(lèi)問(wèn)題來(lái)也經(jīng)常顯得束手無(wú)策。說(shuō)到底陷虎,一個(gè)不懂運(yùn)維的開(kāi)發(fā)團(tuán)隊(duì)會(huì)給開(kāi)發(fā)“埋坑”到踏,而一個(gè)不懂開(kāi)發(fā)的運(yùn)維團(tuán)隊(duì)就不知如何“填坑”。當(dāng)然尚猿,這也是DevOps作為全局“填坑”手段窝稿,產(chǎn)生的原因所在了。
變更性風(fēng)險(xiǎn)
????????曾有幸聆聽(tīng)《SRE Google運(yùn)維解密》中文版譯作者——前谷歌SRE孫宇聰先生的演講凿掂,他演講中有一個(gè)觀點(diǎn)讓我印象深刻伴榔,他說(shuō)開(kāi)發(fā)的工作目標(biāo)是對(duì)系統(tǒng)進(jìn)行變更,而運(yùn)維的工作目標(biāo)是追求系統(tǒng)穩(wěn)定庄萎,而變更本身就是一種對(duì)已有的穩(wěn)定的系統(tǒng)的破壞踪少。變更就是一種破壞這個(gè)觀點(diǎn),可以幫助理解了作為運(yùn)維角色的很多問(wèn)題糠涛,聯(lián)系自身援奢,我很快理解當(dāng)時(shí)所負(fù)責(zé)的版本發(fā)布的工作,對(duì)于運(yùn)維角色的意義所在——把變更的風(fēng)險(xiǎn)控制起來(lái)忍捡。
????????版本發(fā)布只是變更的一種集漾,一個(gè)系統(tǒng)變更的元素可以有很多。包括:硬件基礎(chǔ)設(shè)施锉罐、操作系統(tǒng)帆竹、開(kāi)發(fā)框架、應(yīng)用代碼脓规、中間件栽连、網(wǎng)絡(luò)結(jié)構(gòu)、配置文件、數(shù)據(jù)庫(kù)秒紧。在一個(gè)互聯(lián)網(wǎng)公司绢陌,最常發(fā)生的變更也最易產(chǎn)生風(fēng)險(xiǎn)的,當(dāng)要算應(yīng)用代碼熔恢、配置文件脐湾,以及數(shù)據(jù)庫(kù)了。版本發(fā)布工程師在發(fā)版過(guò)程中叙淌,往往都要做涉及這三項(xiàng)的變更秤掌,可以說(shuō)版本發(fā)布是一項(xiàng)“高危”性質(zhì)的工作鹰霍。
????????控制此類(lèi)風(fēng)險(xiǎn)闻鉴,沒(méi)有什么訣竅,關(guān)鍵就是要減少變更茂洒,包括變更的次數(shù)和變更的元素和其變化量孟岛。但是像版本發(fā)布的變更,其變更需求和方案并不是在版本發(fā)布過(guò)程中產(chǎn)生的督勺,而是在軟件需求分析渠羞、設(shè)計(jì)研發(fā)階段產(chǎn)生的,運(yùn)維工程師要控制其變化量智哀,就只能提前介入到軟件需求分析階段次询,運(yùn)維工程師應(yīng)該爭(zhēng)取在項(xiàng)目需求階段和設(shè)計(jì)階段,對(duì)導(dǎo)致不可控風(fēng)險(xiǎn)的需求和設(shè)計(jì)方案盏触,具有一票否決權(quán)渗蟹。但是在以變化求生存的互聯(lián)網(wǎng)時(shí)代,運(yùn)維工程師不能成為變化的阻力赞辩,在慎重阻擋不合理需求和設(shè)計(jì)方案的同時(shí)雌芽,運(yùn)維工程師更應(yīng)該給出合理化建議,幫助需求的落地辨嗽。許多企業(yè)完全不讓運(yùn)維參與前期需求評(píng)審的工作世落,認(rèn)為運(yùn)維與需求無(wú)關(guān)這種由來(lái)已久的觀念,可以說(shuō)在這個(gè)產(chǎn)品迅速變化的時(shí)代糟需,已經(jīng)顯得非常不合時(shí)宜了屉佳。但讓人欣喜的是,已經(jīng)越來(lái)越多的企業(yè)把運(yùn)維工程師加入了需求評(píng)審會(huì)洲押。
????????還有關(guān)鍵的一點(diǎn)是武花,在執(zhí)行變更的過(guò)程中,嚴(yán)格制定規(guī)范的變更控制流程杈帐,杜絕變更方案之外不必要甚至是錯(cuò)誤的破壞行為体箕。
人為的風(fēng)險(xiǎn)
? ? ? ? 傳統(tǒng)運(yùn)維大大小小的事专钉,都需要工程師親自上陣、手工操作累铅,對(duì)人的依賴性非常強(qiáng)跃须。而人的行為能力受知識(shí)水平、體力娃兽、情緒菇民、性格等諸多因素影響,難以量化投储、難以預(yù)見(jiàn)第练,更難以將由此帶來(lái)的風(fēng)險(xiǎn)隱患控制起來(lái)。
? ? ? ? 使用制度來(lái)規(guī)范人的行為固然有一點(diǎn)效果玛荞,但縱使在一些成熟的公司設(shè)立了嚴(yán)格的制度复旬,執(zhí)行的不確定性依然很高。另外冲泥,如果依靠制度來(lái)將人的行為禁錮得太死,個(gè)人認(rèn)為是不利于人的發(fā)展壁涎,不利于發(fā)揮人的價(jià)值凡恍。工程師作為高級(jí)技術(shù)人才,應(yīng)該充分尊重其作為一個(gè)腦力勞動(dòng)者的價(jià)值怔球,使其精力投放在更有創(chuàng)造性的事情上去嚼酝。
????????我認(rèn)為,在運(yùn)維領(lǐng)域最理想的目標(biāo)竟坛,應(yīng)該將重復(fù)瑣碎的工作闽巩,都交給機(jī)器去做。運(yùn)維工程師需要做的是:為運(yùn)維管理及操作提供智力支持担汤,并為自動(dòng)化運(yùn)維體系提供持續(xù)改進(jìn)的動(dòng)力涎跨。
????????實(shí)現(xiàn)這個(gè)目標(biāo)是一條漫長(zhǎng)的路,但是每一個(gè)運(yùn)維的領(lǐng)導(dǎo)者崭歧,都應(yīng)該帶領(lǐng)團(tuán)隊(duì)踏上此條漫漫征途隅很!這不是一個(gè)可做可不做的選項(xiàng),在互聯(lián)網(wǎng)高度普及的時(shí)代率碾,對(duì)任何一個(gè)擁抱互聯(lián)網(wǎng)的信息系統(tǒng)的維護(hù)團(tuán)隊(duì)來(lái)說(shuō)叔营,這是運(yùn)維的必由之路,是選擇停滯不前所宰,被隨業(yè)務(wù)劇增的流量暴擊绒尊,每天疲于救火,應(yīng)付不迭而累死仔粥?還是于崇山峻嶺之中婴谱,劈開(kāi)自我解放的光明坦途?答案不言自明。
系統(tǒng)性缺陷引發(fā)的風(fēng)險(xiǎn)
????????系統(tǒng)性缺陷指的是有系統(tǒng)設(shè)計(jì)時(shí)勘究,包括網(wǎng)絡(luò)架構(gòu)和應(yīng)用架構(gòu)矮湘,以及整體環(huán)境邏輯設(shè)計(jì)時(shí),未能充分考慮到各種可能發(fā)生的場(chǎng)景口糕。這種風(fēng)險(xiǎn)缅阳,往往在日后特定場(chǎng)景下才會(huì)暴露出來(lái)。內(nèi)部系統(tǒng)和外部系統(tǒng)風(fēng)險(xiǎn)景描。
制度流程性風(fēng)險(xiǎn)
????????制度流程不清晰十办、不嚴(yán)密,可能造成對(duì)風(fēng)險(xiǎn)管控存在“三不管”的責(zé)任死角超棺,不能有效管控風(fēng)險(xiǎn)向族,出了問(wèn)題互相推諉。處理問(wèn)題棠绘,做不到迅速反應(yīng)件相、標(biāo)準(zhǔn)化的機(jī)制,造成風(fēng)險(xiǎn)不能快速被修復(fù)氧苍。
風(fēng)險(xiǎn)控制的手段
? ? ? 風(fēng)險(xiǎn)控制的本質(zhì)是在設(shè)計(jì)階段盡可能消滅導(dǎo)致風(fēng)險(xiǎn)的因素夜矗,把確實(shí)難以徹底消滅的因素,采取技術(shù)和管理手段让虐,將其嚴(yán)格限制在可接受紊撕、能及時(shí)有效應(yīng)對(duì)的范圍內(nèi)。
減少人為:
????????標(biāo)準(zhǔn)化赡突,自動(dòng)化運(yùn)維的日常工作
減少破壞:
????????變更本身就是一次破壞对扶,控制基礎(chǔ)設(shè)施變更、軟件版本發(fā)布過(guò)程惭缰。最大限度地減少更新的內(nèi)容浪南、更新的次數(shù),是控制“破壞”型風(fēng)險(xiǎn)的根本之道漱受。
措施:
????????變更必須要有方案:嚴(yán)格設(shè)計(jì)逞泄、評(píng)估變更方案,嚴(yán)格按變更方案執(zhí)行拜效,不做變更方案以外的多余操作喷众、誤操作。
微服務(wù):
????????近年來(lái)流行的微服務(wù)架構(gòu)設(shè)計(jì)紧憾,其核心就一個(gè)字——“拆”到千,將大應(yīng)用拆成小應(yīng)用。微服務(wù)的優(yōu)勢(shì)就在于“小”赴穗,因?yàn)椤靶 便舅模哂幸韵氯c(diǎn)優(yōu)勢(shì):
1.資源利用上:針對(duì)不同應(yīng)用的性能要求特點(diǎn)膀息,給其配置最符合需要的硬件資源,做到對(duì)硬件的充分資源了赵;
2.人員職責(zé)上:讓每個(gè)工程師對(duì)自己負(fù)責(zé)的部分充分理解方便工作推進(jìn)和工作交接潜支;
3.變更環(huán)節(jié)里:減少總體工程項(xiàng)目代碼量的變更,減少了變更帶來(lái)的風(fēng)險(xiǎn)柿汛。
????????當(dāng)然微服務(wù)化的落地冗酿,也可能產(chǎn)生新的風(fēng)險(xiǎn),譬如微服務(wù)之間的調(diào)度和通信就需要依賴網(wǎng)絡(luò)和一些中間件络断,增加了依賴性裁替,所以微服務(wù)必須做到網(wǎng)絡(luò)和中間件的高可用。再者貌笨,微服務(wù)架構(gòu)設(shè)計(jì)時(shí)弱判,不能一味地為了“拆分”而“拆分”,因?yàn)檫^(guò)度的拆分锥惋,可能引入新的協(xié)調(diào)性風(fēng)險(xiǎn)昌腰。因而要合理評(píng)估和權(quán)衡,拆分帶來(lái)的風(fēng)險(xiǎn)和收益膀跌。最后剥哑,拆分后對(duì)應(yīng)用服務(wù)調(diào)用鏈路的監(jiān)控、中間件的監(jiān)控淹父,以及應(yīng)用的熔斷、降級(jí)方案必須跟上怎虫,來(lái)管控協(xié)調(diào)性的風(fēng)險(xiǎn)暑认。
容器化交付:
????????Docker近年來(lái)成為IT技術(shù)圈談?wù)摵蛯?shí)踐的技術(shù)熱點(diǎn)話題。其最大的好處大审,我認(rèn)為在兩點(diǎn)蘸际,其一是,隔離了資源徒扶,定制化不同應(yīng)用之間對(duì)資源的需求粮彤;第二,正是做到了對(duì)應(yīng)用所需要資源的隔離姜骡,將應(yīng)用和其所依賴的依賴庫(kù)以及系統(tǒng)環(huán)境因素進(jìn)行了一個(gè)打包导坟,所以實(shí)現(xiàn)了一次編排,隨處運(yùn)行圈澈。所以惫周,對(duì)Docker的使用應(yīng)該在全流程環(huán)境中使用(開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境康栈、灰度環(huán)境递递、生產(chǎn)環(huán)境)喷橙,可以將因運(yùn)行環(huán)境的變化導(dǎo)致的可能風(fēng)險(xiǎn),降到非常低接近0的水平(理論上能降到0登舞,但是與網(wǎng)絡(luò)架構(gòu)和應(yīng)用服務(wù)架構(gòu)設(shè)計(jì)時(shí)贰逾,達(dá)到的解耦程度有關(guān));
配置中心:
????????前文提到的解耦合菠秒,配置中心就是解除應(yīng)用和環(huán)境耦合的神器疙剑。在版本發(fā)布中經(jīng)常有這樣的場(chǎng)景:同一應(yīng)用的同一配置項(xiàng),在不同的環(huán)境中需要設(shè)置不同的取值稽煤。在傳統(tǒng)的自動(dòng)化程度較低發(fā)布流程中核芽,負(fù)責(zé)版本發(fā)布部署的工程師,需要根據(jù)環(huán)境的不同酵熙,逐個(gè)修改配置文件轧简。一個(gè)應(yīng)用可能有幾十個(gè)甚至幾百個(gè)配置項(xiàng),而一個(gè)完整系統(tǒng)可能由數(shù)十個(gè)甚至上百個(gè)應(yīng)用構(gòu)成匾二。如果趕上一次涉及應(yīng)用較多的大版本發(fā)布哮独,對(duì)部署工程師來(lái)說(shuō),都是一次對(duì)細(xì)心和耐心的考驗(yàn)察藐,更直言不諱地說(shuō)皮璧,是一次冒險(xiǎn)。運(yùn)維工程師可能因誤操作分飞,而導(dǎo)致生產(chǎn)事故悴务。所以要減少配置變更,集中式配置中心要和分布式配置文件模版相結(jié)合譬猫,做到既能對(duì)配置做集中式的管理讯檐,又可以根據(jù)需要,針對(duì)單個(gè)實(shí)例做細(xì)粒度的配置管理染服。
減少權(quán)限:
? ??三權(quán)分立:
????????將系統(tǒng)的操作權(quán)别洪、分配權(quán)、審計(jì)權(quán)“三權(quán)”進(jìn)行分割柳刮,分配給不同的人挖垛,互相制約。
? ??分治:
????????按照不同業(yè)務(wù)秉颗、不同機(jī)器痢毒、不同集群、不同中間件蚕甥,分配給不同的團(tuán)隊(duì)/人員管理闸准,預(yù)防整體破壞的可能性。在中小型公司梢灭,此種做法并不完全可行夷家,如不能做到按人的維度蒸其,分治,至少做到對(duì)賬戶角色的維度進(jìn)行分治库快。
減少入口:
????????減少對(duì)外暴露的入口摸袁,可以方便做流量以及安全管控和行為審計(jì)。代理服務(wù)器义屏、統(tǒng)一API網(wǎng)關(guān)靠汁、統(tǒng)一管理后臺(tái)、堡壘機(jī)闽铐;
減少流量:
????????互聯(lián)網(wǎng)行業(yè)流量就是金錢(qián)蝶怔,大家都喜歡流量才對(duì),為什么我說(shuō)要減少流量呢兄墅?這里說(shuō)的的減少踢星,并非減少總量,而是讓流量均勻流入隙咸,減少流量暴增式場(chǎng)景的產(chǎn)生沐悦,使得瞬時(shí)流量峰值不超過(guò)系統(tǒng)承載能力。例如五督,12306購(gòu)票從原來(lái)一次性放票調(diào)整為分批次放票藏否, 淘寶雙十一活動(dòng)從雙十一當(dāng)天延展到半個(gè)月,還有我之前公司做活動(dòng)營(yíng)銷(xiāo)推廣短信充包,也是分批次觸達(dá)用戶副签。這些措施都降低了流量的瞬時(shí)峰值,使其不超過(guò)系統(tǒng)的承載能力基矮。
減少外部依賴:
????????所謂外部淆储,不一定是公司以外的系統(tǒng),也可以指本公司其他團(tuán)隊(duì)的系統(tǒng)愈捅。我們把掌控能力邊界以外的系統(tǒng),都視為外部系統(tǒng)慈鸠。外部系統(tǒng)不歸屬本團(tuán)隊(duì)控制蓝谨,甚至難以做到高度的協(xié)同,屬于是難以控制的因素青团,比如調(diào)用外部系統(tǒng)(支付譬巫、風(fēng)控、DNS解析督笆、NTP芦昔、第三方登錄認(rèn)證等等。 有的外部的依賴確實(shí)難以擺脫娃肿,起碼做到與外部系統(tǒng)建立并保持有效的協(xié)同機(jī)制咕缎,比如版本更新信息同步珠十、管控雙方調(diào)用通道、雙方都設(shè)置專(zhuān)人對(duì)接維護(hù)調(diào)用關(guān)系等等措施凭豪。
增強(qiáng)監(jiān)控:
????????監(jiān)控焙蹭,分為“監(jiān)”和“控”兩大階段,“監(jiān)”是能做到對(duì)風(fēng)險(xiǎn)信息及時(shí)嫂伞、有效得收集孔厉,其粒度和時(shí)間密度要能滿足控制風(fēng)險(xiǎn)的需要,“控”是對(duì)“監(jiān)”得到的風(fēng)險(xiǎn)信息進(jìn)行判別處理帖努,其關(guān)鍵在于閥值的設(shè)定是否合理和對(duì)應(yīng)的解決方案是否全面有效撰豺。我認(rèn)為,一個(gè)完整的監(jiān)控應(yīng)該由這么幾個(gè)部件組成拼余,數(shù)據(jù)收集器污桦、數(shù)據(jù)處理器、存儲(chǔ)器姿搜、儀表盤(pán)寡润、閥值、告警器以及監(jiān)控處理方案組成舅柜。除了數(shù)據(jù)處理器梭纹、存儲(chǔ)器和儀表盤(pán)不一定必須,其他的部件對(duì)于一個(gè)完整的監(jiān)控來(lái)說(shuō)缺一不可致份。尤其是監(jiān)控處理方案变抽,常常被忽視,或者說(shuō)被認(rèn)為難以設(shè)定氮块。但是绍载,缺了處理方案,“監(jiān)控”就只做到了“監(jiān)”滔蝉,缺少了有效的“控”击儡,就不再算一個(gè)完整點(diǎn)“監(jiān)控”。
????????監(jiān)控是用來(lái)捕捉處理風(fēng)險(xiǎn)的蝠引,告警器被過(guò)于頻繁地觸發(fā)阳谍,就會(huì)導(dǎo)致監(jiān)控處理人變得麻木,從而導(dǎo)致監(jiān)控喪失效力螃概。合理地設(shè)置數(shù)據(jù)收集器收集策略和閾值大小矫夯,建立必要的收斂機(jī)制,誤報(bào)屏蔽機(jī)制吊洼,是杜絕這種現(xiàn)象的根本训貌。監(jiān)控和軟件本身一樣,需要不斷改進(jìn)和優(yōu)化冒窍,才能實(shí)現(xiàn)最好的對(duì)風(fēng)險(xiǎn)捕捉以及處理效果递沪。
增強(qiáng)性能:
????????擴(kuò)容豺鼻,升級(jí)硬件/軟件性能,cpu区拳、內(nèi)存拘领、硬盤(pán)容量、io效率樱调、緩存约素、并發(fā)線程數(shù),性能問(wèn)題往往符合“木桶效應(yīng)”笆凌,系統(tǒng)整體性能由最短板決定圣猎。優(yōu)秀的運(yùn)維工程師,應(yīng)該要對(duì)每個(gè)業(yè)務(wù)流程涉及到的性能消耗特性乞而,有全面的了解送悔,及時(shí)補(bǔ)齊短板,防患于未然爪模。
增強(qiáng)應(yīng)對(duì)的速度:
????????根據(jù)場(chǎng)景變化欠啤,能快速地?cái)U(kuò)容、降級(jí)屋灌、熔斷洁段、恢復(fù)、回滾共郭,實(shí)現(xiàn)這一目標(biāo)的三要素是:快速而全面的監(jiān)控機(jī)制祠丝、標(biāo)準(zhǔn)的事件處理流程、高度自動(dòng)化的運(yùn)維工具除嘹。
增強(qiáng)審計(jì):
????????收集到足夠豐富合理的審計(jì)信息写半,建立定期審計(jì)的制度,對(duì)既往操作行為尉咕,查漏補(bǔ)缺叠蝇,篩查違規(guī)操作,對(duì)完善制度和流程是十分必要的年缎。
增多備份:
????????所謂狡兔三窟悔捶,數(shù)據(jù)也應(yīng)該多做幾份冗余。標(biāo)準(zhǔn)的備份方案應(yīng)該做到“兩地三中心”晦款,即在兩個(gè)城市炎功,擁有三個(gè)以上數(shù)據(jù)中心枚冗。每個(gè)數(shù)據(jù)中心缓溅,都能做到獨(dú)立運(yùn)轉(zhuǎn)。不同數(shù)據(jù)中心之間赁温,能在較短的時(shí)間范圍內(nèi)快速切換坛怪,數(shù)據(jù)災(zāi)難發(fā)生時(shí)淤齐,可以將對(duì)用戶的影響降到最低。其次袜匿,配置文件包括應(yīng)用配置文件更啄,操作系統(tǒng)的配置文件和中間件、數(shù)據(jù)庫(kù)居灯,都應(yīng)該盡量做到備份祭务,同代碼一樣,引入git等版本管理工具怪嫌,實(shí)現(xiàn)版本化管理义锥。備份要形成制度,根據(jù)數(shù)據(jù)的變化頻率岩灭,重要程度拌倍,確定備份周期和備份方法。備份不可只“備”不“復(fù)”噪径,往往很多團(tuán)隊(duì)的備份柱恤,平日都不做恢復(fù)演練,到了真正需要恢復(fù)時(shí)發(fā)現(xiàn)根本無(wú)法從備份恢復(fù)出數(shù)據(jù)找爱。所以梗顺,需要定期做備份恢復(fù)的演練,確定備份文件可用缴允,恢復(fù)流程和方法執(zhí)行順暢荚守。
增強(qiáng)制度:
????????增強(qiáng)不是增多制度條目數(shù)量,繁文縟節(jié)不是一個(gè)務(wù)實(shí)的技術(shù)團(tuán)隊(duì)的應(yīng)有風(fēng)格练般,而是追求用最簡(jiǎn)練的辦法矗漾,增強(qiáng)制度邏輯的嚴(yán)密性和可操作性。把上述原則以制度文件的形式確立下來(lái)薄料,凝聚開(kāi)發(fā)敞贡、測(cè)試、運(yùn)維和運(yùn)營(yíng)團(tuán)隊(duì)的共識(shí)摄职。
DevOps對(duì)于風(fēng)險(xiǎn)控制的意義
????????DevOps這個(gè)概念近年很火的概念誊役,每個(gè)人都有不盡相同的理解,其根本目標(biāo)在于打通開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)無(wú)形的墻谷市,提升生產(chǎn)效率和軟件研發(fā)和運(yùn)行質(zhì)量蛔垢。DevOps是一個(gè)以此為追求目標(biāo),也是一種為此目標(biāo)的文化迫悠,更可以是為此目標(biāo)而落地的手段和工具鹏漆。其落地方式通常就是實(shí)現(xiàn)自動(dòng)化的開(kāi)發(fā)、集成、測(cè)試艺玲、交付以及運(yùn)維管理的流水線括蝠。
????????所以,DevOps絕不等同于運(yùn)維開(kāi)發(fā)饭聚,運(yùn)維開(kāi)發(fā)只是實(shí)現(xiàn)DevOps工具落地的一種組織行為和手段忌警,也是被大多數(shù)公司認(rèn)可的有效手段,然而完整的DevOps往往還應(yīng)該包括自動(dòng)化的需求管理秒梳、開(kāi)發(fā)法绵、構(gòu)建、編譯酪碘、測(cè)試礼烈,而不僅包括從發(fā)布流程才開(kāi)始接手的運(yùn)維自動(dòng)化。
????????我接觸到有些精干的小公司婆跑,甚至沒(méi)有專(zhuān)門(mén)運(yùn)維開(kāi)發(fā)的團(tuán)隊(duì)此熬,他們按照自己團(tuán)隊(duì)的特點(diǎn),通過(guò)文化宣貫滑进,組織協(xié)作全體技術(shù)人員犀忱,對(duì)各自板塊的自動(dòng)化流程和工具落地,并且進(jìn)行對(duì)接扶关,從而完成跨團(tuán)隊(duì)全流程的自動(dòng)化流水線阴汇,也很好地實(shí)踐了對(duì)DevOps的落地。
自動(dòng)化對(duì)于風(fēng)險(xiǎn)控制的意義:?
? ??????1.降低人為操作導(dǎo)致的不可控性
? ??????2.減少風(fēng)險(xiǎn)控制的成本:包括物質(zhì)成本和人力成本以及時(shí)間成本节槐。
自動(dòng)化的前提和基礎(chǔ)
高度的標(biāo)準(zhǔn)化:
????標(biāo)準(zhǔn)化硬件搀庶、標(biāo)準(zhǔn)化軟件組件、標(biāo)準(zhǔn)化流程制度
統(tǒng)一的資源數(shù)據(jù)庫(kù)(cmdb)
方法:
????????流程高度抽象铜异、功能細(xì)粒度切分哥倔、模塊化/組件化,在這點(diǎn)實(shí)踐上揍庄,比較優(yōu)秀的案例咆蒿,當(dāng)屬騰訊的藍(lán)鯨。
實(shí)踐DevOps
????????將風(fēng)險(xiǎn)控制的過(guò)程蚂子,進(jìn)行抽象和優(yōu)化沃测,將作為一種服務(wù)的管控 風(fēng)險(xiǎn)過(guò)程,進(jìn)行標(biāo)準(zhǔn)化食茎、流程化和自動(dòng)化蒂破,并最終轉(zhuǎn)化為可用于控制風(fēng)險(xiǎn)的產(chǎn)品,實(shí)現(xiàn)產(chǎn)品化别渔。
? ? ????一個(gè)踐行DevOps理念的工程師附迷,不論自己所處的角色是開(kāi)發(fā)田巴、運(yùn)維還是測(cè)試,都要向自己負(fù)責(zé)軟件生命周期階段的上下游挟秤,去管控風(fēng)險(xiǎn)。做到提前介入抄伍,向后延展艘刚。
????????個(gè)人認(rèn)為,ITIL和DevOps雖然理念不同但是其出發(fā)點(diǎn)都是消除風(fēng)險(xiǎn)截珍。ITIL講究嚴(yán)格的流程控制和職責(zé)劃分攀甚,大家各司其職,通過(guò)在各個(gè)環(huán)節(jié)之間建立高聳的“墻”和細(xì)密的“網(wǎng)”來(lái)“封堵”和“過(guò)濾”掉風(fēng)險(xiǎn)岗喉。DevOps強(qiáng)調(diào)跨部門(mén)跨團(tuán)隊(duì)協(xié)作秋度,消除生產(chǎn)中的技術(shù)和制度障礙,提高生產(chǎn)效率钱床,采用敏捷開(kāi)發(fā)荚斯、快速交付,通過(guò)持續(xù)地集成和交付來(lái)消滅已產(chǎn)生的風(fēng)險(xiǎn)查牌。ITIL是大步穩(wěn)進(jìn)事期,DevOps就是小步快走。ITIL追求盡可能一步到位纸颜,DevOps講求持續(xù)改進(jìn)兽泣。因而,DevOps是應(yīng)對(duì)迅速變化的互聯(lián)網(wǎng)行業(yè)的有效手段胁孙,而ITIL在業(yè)務(wù)形態(tài)穩(wěn)固的傳統(tǒng)行業(yè)更有生命力唠倦。所以,不能一昧趕時(shí)髦涮较,為了DevOps而DevOps稠鼻,一定要結(jié)合業(yè)務(wù)實(shí)際,可以兼容并蓄地吸收兩種理念狂票,根據(jù)業(yè)務(wù)需要進(jìn)行落地枷餐。
????????運(yùn)維團(tuán)隊(duì)領(lǐng)導(dǎo),作為組織目標(biāo)和計(jì)劃的制定者苫亦、實(shí)施者毛肋,必須對(duì)風(fēng)險(xiǎn)擁有全局觀,從長(zhǎng)遠(yuǎn)規(guī)劃建立風(fēng)險(xiǎn)控制體系的目標(biāo)屋剑。重視考慮團(tuán)隊(duì)成員發(fā)展润匙,實(shí)現(xiàn)個(gè)人發(fā)展和組織目標(biāo)的有機(jī)統(tǒng)一,讓專(zhuān)業(yè)的人去做專(zhuān)業(yè)的事唉匾。增強(qiáng)技能培養(yǎng)孕讳,發(fā)揮人的腦力價(jià)值匠楚,帶領(lǐng)團(tuán)隊(duì)從瑣碎重復(fù)的工作中解脫出來(lái)。7*24小時(shí)都在應(yīng)對(duì)風(fēng)險(xiǎn)厂财,不是運(yùn)維的價(jià)值所在芋簿。7*24小時(shí)無(wú)風(fēng)險(xiǎn),才是運(yùn)維真正的價(jià)值璃饱!