《如何重塑中小企業(yè)運(yùn)維價(jià)值》要點(diǎn):
本文介紹了如何重塑中小企業(yè)運(yùn)維價(jià)值,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
搞了好多年安全,一不小心掉入運(yùn)維的“坑”里.
在摸索運(yùn)維業(yè)務(wù)的路上,不斷的踩坑,不斷的爬出來.
我們的團(tuán)隊(duì)在成立公司的初夜解散,隨后各奔東西.
也許,成長(zhǎng),總要經(jīng)歷過一些事情吧.
坑不斷,踩還亂,離也愁,還是寫點(diǎn)東西壓壓驚吧……
運(yùn)維,專業(yè)一點(diǎn)說叫做“可靠性支持工程師”,方言稱為“背鍋俠”.本篇小文不談大企業(yè),因?yàn)?BAT 企業(yè)總有專職人員做專職的事情,諸如:數(shù)據(jù)庫管理員,系統(tǒng)管理員,桌面管理員,網(wǎng)絡(luò)工程師等諸多崗位……
但在中小型企業(yè)里,“背鍋俠”不光身兼數(shù)職,還要面對(duì)各種問題.
系統(tǒng)總要持續(xù)跟進(jìn)及優(yōu)化,“鍋”總要有人背,運(yùn)維的價(jià)值又何在?
話說企業(yè)使用了各種云來解決服務(wù)器運(yùn)維的需求,是不是就不需要運(yùn)維了?
作為與我一樣背鍋俠的你,是否也曾想著多考幾個(gè)證書,來提升薪資?你的話語權(quán)是需要證書來獲取?
還是能力來獲取?
帶著問題,我們來進(jìn)行拆解和剖析,希望能讓你有所收益.
我也曾是小公司的一名“背鍋俠”,從服務(wù)器采購(gòu),到背著服務(wù)器去機(jī)房上架;從給老板 PC 裝系統(tǒng),到公司內(nèi)網(wǎng)布線;從軟件性能測(cè)試,到寫優(yōu)化文檔;我就是這么一個(gè)角色.
然而,運(yùn)維的“背鍋”總是相對(duì)于開發(fā)而言的,你越是在底層,你的技能越少,不能解決業(yè)務(wù)的痛點(diǎn),沒有話語權(quán).這“鍋”你不背,難道讓老板背嗎?
這里舉個(gè)例子:某公司開發(fā)使用的技術(shù)棧為 Java,開發(fā)同學(xué)發(fā)布的是 war 包,Tomcat 容器,MySql 數(shù)據(jù)庫.
需求完成后,上線發(fā)布,開發(fā)同學(xué)沒有在測(cè)試環(huán)境測(cè)試(偷懶),只是在本機(jī)開發(fā)環(huán)境下功能正常,把 war 包交付給運(yùn)維同學(xué).運(yùn)維同學(xué)修改配置文件后發(fā)布上線,奇葩出現(xiàn)了,某個(gè)文件上傳功能調(diào)用即崩潰.
這時(shí),運(yùn)維同學(xué)在檢查了各種目錄權(quán)限及配置后,把這個(gè)問題反饋給開發(fā).這時(shí),開發(fā)同學(xué)為了避免加班,說:“這是你 Tomcat 容器崩潰,又不是我的應(yīng)用程序崩潰.”運(yùn)維同學(xué)很無奈,老板又不懂.這時(shí)解決方案是什么?
運(yùn)維明知自己加班是徒勞的,可又該怎么辦?如果運(yùn)維去和開發(fā)吵架扯皮,一定是情商嚴(yán)重不足.這時(shí)候,老板信任開發(fā).
運(yùn)維同學(xué)在仔細(xì)查看 log 后,對(duì)比內(nèi)網(wǎng) git,發(fā)現(xiàn)開發(fā)同學(xué)打包時(shí)少了一個(gè)組件,運(yùn)維手動(dòng)打包,發(fā)布上線,問題解決.老板卻認(rèn)為這是運(yùn)維應(yīng)該做的.
上面這個(gè)例子在中小型IT企業(yè)中很常見,并非個(gè)例,“背鍋”源于給開發(fā)“擦屁股”.如果我們不能扭轉(zhuǎn)老板的思維,那就要讓自己變得更有價(jià)值.
作為運(yùn)維,如果你并沒有 Java 技能,那就要學(xué)習(xí),讓這個(gè)崗位換個(gè)人做不了,提升個(gè)人技能.到更好的公司,你才有可能擦到更好的“屁股”.
但是,這是否與運(yùn)維本身背道而馳?
問題與風(fēng)險(xiǎn)始終是存在的,面對(duì)問題與風(fēng)險(xiǎn),我們更需要的是擁抱,而不是逃避.你可以為開發(fā)擦一次、兩次、三次,但你并不能做永久的保姆.
企業(yè)到底需要什么?運(yùn)維怎么做才能讓老板滿意,讓團(tuán)隊(duì)滿意?剖析這個(gè)問題,先學(xué)會(huì)換位思考.
如果你是老板,你認(rèn)為運(yùn)維應(yīng)該做什么?我走訪了一些中小企業(yè)老板,總結(jié)出以下幾點(diǎn):
下面不逐一展開說了,只著重說幾點(diǎn).
首先說學(xué)習(xí)能力,我認(rèn)為更多源于自我技能與技能提升,在這個(gè)技能高于學(xué)歷的時(shí)代,可是我還是沒有找到合適我的工作(苦笑).
一個(gè)靠譜能出活兒的運(yùn)維到底需要具備哪些技能? 首先你得會(huì)裝系統(tǒng)(哈哈),系統(tǒng)裝的多了,你才可能去寫自動(dòng)化的系統(tǒng)安裝腳本;
好了,寫腳本,BashShell 也許是我們每天面對(duì)的,但并不是全部;有些任務(wù)交給 Python 或其他的語言工具似乎更合適;
公司業(yè)務(wù)出故障了,你要去“擦屁股”,公司業(yè)務(wù)用什么開發(fā)?什么?你不會(huì)?怎么可能?至少要懂一點(diǎn)吧,好了,這個(gè)時(shí)候你可能接觸到 PHP/JAVA 當(dāng)然還有其他,等等;
開發(fā)交付的就有問題,好,問題在哪里?如何測(cè)?要給出應(yīng)對(duì)的解決方案吧!服務(wù)器被攻擊了,你要順藤摸瓜找到應(yīng)對(duì)措施吧?不知道如何攻擊你還談什么防御?安全攻防滲透入侵總要懂一點(diǎn)……
好了,你都懂一點(diǎn),但好像什么都不專精……等等,誰說的?給我一個(gè)星期,練一下增刪改查和公司開發(fā)環(huán)境配置,我就轉(zhuǎn)崗去做開發(fā)了!OK!沒問題!可是,公司到底是要運(yùn)維的,學(xué)習(xí)能力與自身技能似乎本來就不矛盾;
噢對(duì)了,還有一句話這么說,一個(gè)靠譜的,能出活兒的運(yùn)維,一定可以承擔(dān)起架構(gòu)的角色,運(yùn)維本身就是在搭開源的盒子,就像堆積木一樣,運(yùn)維當(dāng)然知道什么組件用在什么地方是最合適的.你們猜這句話誰說的?
當(dāng)然,這是我說的.比如說,某些業(yè)務(wù),用到了5臺(tái) apache,我們做過優(yōu)化,同樣配置的主機(jī),2臺(tái) Nginx 就足夠了,為企業(yè)降了3臺(tái)服務(wù)器,省了錢.這難道不是具體的運(yùn)維價(jià)值體現(xiàn)嗎?
風(fēng)險(xiǎn)可控:穩(wěn)定、性能、安全.
穩(wěn)定可控,舉個(gè)例子:某個(gè)業(yè)務(wù)服務(wù)每隔3天就要重啟,每天都在夜間23:30重啟,問題的具體現(xiàn)象為,每隔5天就崩潰,但你并不知道為什么會(huì)崩潰.
首先,這并非穩(wěn)定,如果你能通過合理的配置,把3天重啟改為3周或30天.至少在一定程度上提高了穩(wěn)定性.
這個(gè)例子的原型為:某中間件 Bug,內(nèi)存無法自動(dòng)釋放.起初的現(xiàn)象是每隔5天應(yīng)用崩潰,后來審計(jì)這個(gè)開源的中間件,一段內(nèi)存垃圾回收機(jī)制有問題,遂改之,大并發(fā)測(cè)試,再后來30天也沒有出現(xiàn)過崩潰,一直穩(wěn)定運(yùn)行了2年,直到業(yè)務(wù)替換.
什么叫性能,企業(yè)要你來是提升性能還是降低性能?提升能提升多少?性能如何把控?服務(wù)器硬件我們要留多少冗余,多少報(bào)警?你當(dāng)真做過思考嗎?還是到點(diǎn)下班,之后撩妹吃飯喝酒睡覺手機(jī)關(guān)機(jī)?
上面提到5臺(tái) apache 的業(yè)務(wù),使用2臺(tái) nginx 支撐,還有冗余,這是由于瓶頸落在了應(yīng)用程序本身的機(jī)制上.
那么,你也許會(huì)說,如果落在了磁盤 IO 或網(wǎng)絡(luò) IO,不是照樣不能精簡(jiǎn)嗎?對(duì)的,有些錢省不掉,但關(guān)鍵是,如何讓企業(yè)把錢花對(duì),這才是你的價(jià)值體現(xiàn),不是嗎?
終于要說一下安全了,我做了十多年的滲透,多少還是有那么點(diǎn)發(fā)言權(quán)的.我們結(jié)合企業(yè)自身來思考一下,安全是否屬于測(cè)試的范疇?我想在某些場(chǎng)景下是的.
比如,我們?cè)诠緝?nèi)部,拿到上級(jí)部門的授權(quán)(比如老板,技術(shù)負(fù)責(zé)人),公司業(yè)務(wù)對(duì)我們而言,可以做白盒,也可以做黑盒.而滲透,只是一種黑盒測(cè)試的方法,僅此而已.
那么,漏洞又是什么?漏洞源自于程序員寫的 Bug.企業(yè)不可能要求所有的開發(fā)都是大神,所有的程序員也不可能不犯錯(cuò).有些環(huán)節(jié),還是會(huì)疏忽的.
我就遇到過,一個(gè)做了6年的 Java 技術(shù)經(jīng)理,公司業(yè)務(wù)的有些核心組件是他實(shí)現(xiàn)的,信誓旦旦拍著胸脯帶著譏諷的語氣告訴我,“你測(cè)試也是浪費(fèi)時(shí)間,絕對(duì)沒有問題,你要能找到漏洞給你加薪……”
我當(dāng)時(shí)很想抽他的臉,但我還是天真的信了他的話,因?yàn)槲抑?絕對(duì)沒有“絕對(duì)”.當(dāng)我用調(diào)試器(Fiddler)改了上傳請(qǐng)求,把 WebShell 扔服務(wù)器上時(shí),拿到的居然是 root 權(quán)限,連提權(quán)都省了.
然后轉(zhuǎn)過頭來給運(yùn)維團(tuán)隊(duì)的同志們解釋為啥不能怕麻煩,不要用 root 帳戶啟動(dòng)容器(Tomcat).那哥們兒傻臉了,但我依然給足了它面子,這點(diǎn)我還是懂的.
雖然最終問題提交并解決了,但加薪不是因?yàn)檫@個(gè),是因?yàn)閺哪侵蠖嗔藗€(gè)活兒,就是滲透測(cè)試(黑盒),還好白盒部分我們不管,是開發(fā)人員自己搞定的.
當(dāng)年公司的官網(wǎng)自己買了服務(wù)器掛在 IDC 的機(jī)房,兩個(gè)官網(wǎng),用了兩臺(tái).我發(fā)現(xiàn),這兩臺(tái)服務(wù)器簡(jiǎn)直就是浪費(fèi),因?yàn)榛緵]有流量.
雖說一個(gè)用于演示,一個(gè)用于生產(chǎn)環(huán)境(所謂的生產(chǎn)也是演示).但有夠扯的,兩臺(tái)服務(wù)器,每年托管費(fèi)用就將近2萬,老板花錢也是心疼的,因?yàn)樗腻X也不是天上掉的.
我們后來使用了 RedHat 原生的虛擬化方案 KVM,把開發(fā)經(jīng)理要求的“必須是單獨(dú)的主機(jī)”的要求給 K.O 掉.下架一臺(tái)機(jī)器,拉回來,我們做測(cè)試機(jī)用.
線上機(jī)房從原先 100Mbps 的出口降配為 10Mbps,即便這樣,加上遠(yuǎn)端備份,加上自身業(yè)務(wù),資源的占用也不到50%,小企業(yè)的資源就是這樣省出來的.
當(dāng)時(shí)老板很高興,為企業(yè)省了錢,拉著大家去聚餐,說大家要感謝運(yùn)維同學(xué)云云.當(dāng)然,具體事情要具體分析,并不能一概而論.
運(yùn)維的溝通能力,多半是被逼出來的.運(yùn)維要面對(duì)的是負(fù)責(zé)人,程序員,老板,以及客戶等等.你能說溝通能力不重要?我想,你不會(huì)傻到和程序員撕逼的時(shí)候來一句,“你就是寫 Bug 的!”,你也不會(huì)蹬鼻子上臉沖老板喊一句“這不歸我管!”.
當(dāng)然,有些老板還會(huì)要求你去給他家里的 PC 機(jī)裝系統(tǒng),說“不急不急,抽你的時(shí)間”,你能說不去?個(gè)人溝通能力的鍛煉,是你被磨圓的過程,情商有時(shí)候大于智商.
雖然我們沒有把別人當(dāng)傻子,但是有些傻子竟然是天生的,你不是他父母,當(dāng)然這不能怪你.但有個(gè)原則,你要注意:“先別慌著說‘不’,甩雷的前提,是這個(gè)雷在你手里!”.
你總要把問題分析透徹,才可能指出痛點(diǎn),才能有效應(yīng)對(duì),才能說清楚,哪些“雷”不歸你管,才能有效甩“雷”.同樣,這個(gè)過程也是自身學(xué)習(xí)與提升的過程,要學(xué)習(xí)的不全是技術(shù)層面,你說是不?
老板要不要可視化?我們說難聽一點(diǎn),可視化在一定程度上是“裝逼”用的.比如說:老板看著訂單曲線就很激動(dòng).但你能捂著老板的眼不讓老板看嗎?老板不會(huì)查 log,不知道各項(xiàng)參數(shù)的具體意思,就給他看圖好了,畢竟一圖勝千言嘛.
老板拿著這個(gè)可視化,還能去和客戶“Tree New Bee”,為什么?
因?yàn)榭蛻舨⒉魂P(guān)心你的 log,只關(guān)心你們的企業(yè)能給他帶來什么,但在這之前,客戶要搞懂你到底在向他說些什么.
還有些情況,我們需要用到可視化,我們提交的周報(bào)、月報(bào),提交給誰?老板也看不懂參數(shù),需要開發(fā)經(jīng)理去解釋,但把可視化實(shí)現(xiàn)了,老板可以查看到實(shí)施的情況,實(shí)時(shí)的了解你的或服務(wù)器的工作狀態(tài),以及一些業(yè)務(wù)的實(shí)時(shí)情況,難道老板不喜歡嗎?還是你不喜歡?
比如說,我們用 Grafana 實(shí)現(xiàn)了服務(wù)器的監(jiān)控外,又實(shí)現(xiàn)了業(yè)務(wù) API 的可視化,老板可以了解到,最近10分鐘、或5分鐘內(nèi),有多少人在線下單,多少錢進(jìn)賬,你看到老板嘴角的口水了嗎?
雖然我做了 Grafana 的漢化并發(fā)在了 GitHub(好久沒更新了,說來慚愧),但我們更希望有更多的人可以都去參與一些開源工具的漢化或者修復(fù)完善工作.
開源軟件基于社區(qū)的更新和維護(hù),如果你看到一個(gè)工具很久都沒有更新了,你會(huì)選擇嗎?如果你不了解的話,我想你不會(huì).
對(duì)了,我并不知道你的公司是否定期做分享,也就是內(nèi)部的“頭腦風(fēng)暴”,大家可以在技術(shù)范圍內(nèi)盡情的撕逼(記得帶上項(xiàng)目經(jīng)理和開發(fā)同事,但別打人).
但我會(huì),我?guī)н^的團(tuán)隊(duì),第一就是要養(yǎng)成定期分享(包括故障反思)和撕逼的好習(xí)慣.記得曾有運(yùn)維同事這樣提到過,“我們現(xiàn)在的虛擬化方案太 low,ZeroVM 就不錯(cuò)”講了一大堆如何好.
后來在實(shí)際測(cè)試時(shí)發(fā)現(xiàn) Bug 過多,而且很久又沒有更新,這個(gè)方案被否掉了.但這個(gè)同事后來轉(zhuǎn)向 Docker,再后來他負(fù)責(zé)了公司虛擬化方案升級(jí)的大部分工作.
說這個(gè)例子,就是讓大家知道,在中小型的 IT 企業(yè),同樣需要學(xué)習(xí)與研究(搭開源的盒子),面向適用自己企業(yè)的業(yè)務(wù),也只有你最懂.
所以,中小企業(yè)的開發(fā)者和運(yùn)維同學(xué)們,你們有必要和義務(wù)來做內(nèi)部的定期分享,也就當(dāng)鍛煉自己,說不定什么時(shí)候碰到個(gè)大會(huì),也能上去“Tree New Bee”,當(dāng)然,內(nèi)容干貨才行.
關(guān)于日常演練,據(jù)我所知,大多數(shù)的IT企業(yè)很少去做災(zāi)難的日常演練.因?yàn)椤皼]時(shí)間、太忙”等等等等,可是你知道嗎?如果不做災(zāi)難演練,當(dāng)災(zāi)難來臨,比如“rm –rf /”一個(gè)命令下去,雖然是手誤,但多少都會(huì)讓你驚慌失措.“我*,我竟然做了什么?”.
災(zāi)難演練與災(zāi)備同樣重要,演練數(shù)據(jù)庫被黑,所有表都被清空;演練“內(nèi)網(wǎng) GitLab 被刪,如何恢復(fù)并通過日志找到線索”等等;演練突如其來的 DDOS,怎么應(yīng)對(duì)以及做流量清洗.
在糧草豐盛的日子里,做好“彈盡糧絕”的準(zhǔn)備.雖然你不可能把方方面面都做到提前預(yù)判,但至少會(huì)鍛煉出來你敏銳的嗅探能力,比如在磁盤報(bào)警時(shí),你有充足的時(shí)間可以更換磁盤.
我們?cè)龅?在我們的測(cè)試機(jī)器(二手的服務(wù)器)上,磁盤(做的Raid 5)嘀嘀嘀響了一個(gè)多星期(在另一個(gè)辦公室,我們不知道),直到被行政人員提醒,及時(shí)更換了硬盤.也就是這時(shí)候,才開始實(shí)施了監(jiān)控.
因?yàn)樵谶@之前,只是覺得這臺(tái)服務(wù)器的磁盤寫速度不如從前,但考慮到機(jī)器是舊的,就沒有顧忌太多.但于此同時(shí),某開發(fā)負(fù)責(zé)人“手誤”,把自己 GitLab 的分支全刪了,說來也奇怪,他自己竟然沒發(fā)現(xiàn)(后來才知道,這家伙要離職,提前做好準(zhǔn)備),因?yàn)槲覀冇袀浞?及時(shí)給找回.
代碼的壓縮包不大,可以備份很多歷史場(chǎng)景(每日備份),但對(duì)此,是因?yàn)橹白鲞^演練,但仍然“防不勝防”.
說起防,“日防夜防,家賊難防”,這是真的!看新聞曝光過某大型電商企業(yè)內(nèi)部員工泄露了上億條數(shù)據(jù).但我之前的職業(yè)生涯卻是遇到過的,公司的開發(fā)經(jīng)理因?yàn)樘朴趦?nèi)部政治斗爭(zhēng),被手下一個(gè)想要“上位”的家伙給害了.
這個(gè)想要“上位”的家伙是一名開發(fā),比較有心,有次因?yàn)橐褂眉夹g(shù)負(fù)責(zé)人的 GitLab 的權(quán)限,讓開發(fā)經(jīng)理在這名開發(fā)的機(jī)器上進(jìn)行登陸和操作,這家伙悄悄的記錄了對(duì)方的密碼(居然還是弱口令).
在之后的不到一個(gè)月時(shí)間里,他使用技術(shù)負(fù)責(zé)人的權(quán)限拷走了公司所有代碼,并進(jìn)行了日志清除.但他的水平確實(shí)比較 low,并不知道我們還對(duì)日志進(jìn)行了二次備份.
在他個(gè)人與技術(shù)負(fù)責(zé)人發(fā)生正面的“政治斗爭(zhēng)”時(shí),用開發(fā)經(jīng)理的權(quán)限刪除了公司內(nèi)網(wǎng) GitLab 上的所有代碼,并栽贓我們的開發(fā)經(jīng)理.這時(shí)候,開發(fā)工作陷入停滯.老板急了,要求我們立即恢復(fù).
可是,每個(gè)開發(fā)人員的機(jī)器上,都有自己正在擼的代碼.所以,至少在1個(gè)工作日之內(nèi),影響并不是很大.我們用了半個(gè)小時(shí),就發(fā)現(xiàn)了他的具體攻擊過程,先改自己機(jī)器網(wǎng)卡的 MAC 和 IP(我們路由有記錄,雖然我們?cè)诼酚缮献隽?ARP 綁定,但也只是不能上外網(wǎng)),再然后,使用開發(fā)經(jīng)理的帳號(hào)密碼登陸 GitLab,刪除所有代碼,擦掉本機(jī)記錄,然后再把網(wǎng)卡 MAC 和內(nèi)網(wǎng) IP 地址改回去.
我們向老板反饋,老板報(bào)警,至于后面的事,不用說大家也都明白了.很慶幸我們提前做過演練和對(duì)應(yīng)方案,也很慶幸我們找到了直接的關(guān)鍵人,但更重要的是,這種家賊,確實(shí)難防.
為什么不能建立一種“公開、透明、可監(jiān)控”的機(jī)制,來預(yù)防“家賊”事件的發(fā)生?這是值得很多企業(yè)去思考的一個(gè)問題.經(jīng)濟(jì)學(xué)上有一種叫做“逆向選擇法”,也就是(似乎是行政HR的活兒)“員工的利己行為分析”.
員工具體會(huì)發(fā)生哪些“利己”行為,哪些才是對(duì)公司有傷和無傷的,我想每個(gè)不同的企業(yè)都有自己的判斷與思考.
但往往,人是最不可靠的,特別是在企業(yè)正在迫切需要發(fā)展的階段,企業(yè)到底需要“靠譜”的人,還是需要“可靠”的人?這個(gè)問題,你可以來發(fā)郵件找我撕逼,我打算在下一篇內(nèi)容探討這個(gè)問題.
總之,一切問題的發(fā)生,總有其必然的原因.就是說,一切皆有“因果”.我們要擁抱所有可能發(fā)生的問題,在我們的能力的范圍內(nèi),做好充足的預(yù)判及應(yīng)對(duì)措施.
當(dāng)然,“能力的范圍”也會(huì)隨著你的努力而不斷的擴(kuò)大.這當(dāng)然是學(xué)習(xí)和提升的過程,是自我價(jià)值體現(xiàn)的過程,也是運(yùn)維價(jià)值實(shí)現(xiàn)的過程!
另外,我要推薦另一篇文章,“互聯(lián)網(wǎng)運(yùn)維雜談”公眾號(hào)(waynewang_ops)發(fā)過的一篇文章“談?wù)勥\(yùn)維的價(jià)值和思路”,作者謙益(有興趣的同學(xué)可以自己找一下).
小弟讀的書少,你也許可以騙我,但我不一定會(huì)當(dāng)真.最后,歡迎關(guān)于運(yùn)維業(yè)務(wù)的探討與撕逼,可以發(fā)郵件給我,stackworm@qq.com,可以找我好好的撕逼.
原文來自微信公眾號(hào):高效運(yùn)維
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4289.html