注:從我的知乎搬移過來默蚌,方便管理冻晤,link:《Google SRE》讀后感
國慶長假,出門太堵绸吸,遂待在魔都鼻弧,花了三天時(shí)間將《Google SRE》中文版翻了一遍设江,好書一本,不管是開發(fā)人員温数、運(yùn)維人員還是架構(gòu)師绣硝,都可以讀一讀,受益匪淺的撑刺。
鑒于自己是做開發(fā)的鹉胖,所以對于運(yùn)維相關(guān)流程化的內(nèi)容沒有涉獵。不過這部分內(nèi)容對于運(yùn)維leader應(yīng)當(dāng)是大有裨益的够傍。
一甫菠、SRE是個(gè)全能手,DevOps的實(shí)踐者
SRE全稱:Site Reliability Engineering冕屯,翻譯過來就是:站點(diǎn)可靠性工程師寂诱。SRE的職責(zé)確保站點(diǎn)的可用,為了達(dá)到這個(gè)目的安聘,他需要對站點(diǎn)涉及的系統(tǒng)痰洒、組件熟悉,需要關(guān)注生產(chǎn)運(yùn)行時(shí)的狀態(tài)浴韭,為此丘喻,他需要有很多工具和系統(tǒng)支撐其完成上述工作,比如自動化發(fā)布系統(tǒng)念颈,監(jiān)控系統(tǒng)泉粉,日志系統(tǒng),服務(wù)器資源分配和編排等榴芳,這些工具需要他們自己完成開發(fā)和維護(hù)嗡靡。
SRE是一個(gè)綜合素質(zhì)很高的全能手,需要懂服務(wù)器基礎(chǔ)架構(gòu)窟感、操作系統(tǒng)讨彼、網(wǎng)絡(luò)、中間件容器柿祈、常用編程語言点骑、全局的架構(gòu)意識、非常強(qiáng)的問題分析能力谍夭、極高的抗壓能力(以便沉著高效地排障)黑滴,他們還需要懂性能調(diào)優(yōu)理論...
SRE的工作是Develop+Operate的結(jié)合,SRE是DevOps的實(shí)踐者紧索,他們的工作內(nèi)容和職責(zé)和傳統(tǒng)運(yùn)維工程師差不多:發(fā)布袁辈、部署、監(jiān)控珠漂、排障晚缩,目標(biāo)一致尾膊。但是SRE的手段更加自動化,更高效荞彼,這種高效來源于自動化工具冈敛、監(jiān)控工具的支撐,更因?yàn)槠渥鳛檫@些工具的開發(fā)者鸣皂,不斷優(yōu)化和調(diào)整抓谴,使整個(gè)工具箱使起來更加得心應(yīng)手,這也是DevOps的魅力所在寞缝。
二癌压、分布式環(huán)境運(yùn)維大不同于傳統(tǒng)運(yùn)維
我的理解:在分布式環(huán)境下,系統(tǒng)的復(fù)雜度增大荆陆、維護(hù)目標(biāo)增多滩届,按照傳統(tǒng)的手工或者半自動維護(hù)來做,是不行的被啼。所以帜消,需要轉(zhuǎn)變思路:
事務(wù)性的工作工具化。比如:版本發(fā)布浓体、服務(wù)器監(jiān)控泡挺;
讓系統(tǒng)自反饋。完善的監(jiān)控告警機(jī)制汹碱,完善的日志記錄和分析體制,可視化系統(tǒng)的健康狀態(tài)荞估,使得系統(tǒng)變得可追蹤和調(diào)校咳促;
分布式策略應(yīng)對巨量運(yùn)維對象。負(fù)載均衡勘伺、流控跪腹、數(shù)據(jù)完整性、批處理的變得不一樣飞醉,需要重新設(shè)計(jì)和實(shí)踐冲茸。同時(shí),更要重視連鎖式故障缅帘。
三轴术、分布式系統(tǒng)的核心——分布式共識
分布式共識問題是指“在不穩(wěn)定的通信環(huán)境下一組進(jìn)程之間對某項(xiàng)事情達(dá)成一致的問題”。
分布式共識系統(tǒng)可以用來解決:領(lǐng)頭人選舉钦无、關(guān)鍵共享狀態(tài)逗栽、分布式鎖等問題∈г荩或者絕對點(diǎn)彼宠,所有的分布式問題都應(yīng)當(dāng)考慮到分布式共識的問題鳄虱。
分布式共識的理論基礎(chǔ)和實(shí)現(xiàn)都不是很好理解,抽時(shí)間搞清楚是大有裨益的凭峡,這里羅列一下幾個(gè)關(guān)鍵詞:
拜占庭問題
可復(fù)制狀態(tài)機(jī)
Paxos算法
Zookeeper
Chubby
四拙已、監(jiān)控很重要!很重要摧冀!很重要倍踪!
監(jiān)控是SRE眼睛的延伸。
監(jiān)控系統(tǒng)應(yīng)當(dāng)解決兩個(gè)問題:現(xiàn)象(什么東西出故障了按价?)惭适,原因(為什么出故障?)
現(xiàn)象—— 用戶可感知的現(xiàn)象楼镐,比如:登陸不了癞志、支付訂單變慢;
原因—— 造成現(xiàn)象的潛在因素框产,可能只是中間因素或者相關(guān)因素凄杯,并非根本原因,根本原因需要SRE介入分析并確定秉宿。比如:login 服務(wù)CPU超過警戒值戒突,訂單服務(wù)器的CLOSE_WAIT狀態(tài)的TCP鏈接數(shù)猛增等等。
四個(gè)黃金指標(biāo):時(shí)延描睦、流量(PV)膊存、錯(cuò)誤、飽和度(服務(wù)器資源使用情況)忱叭。前三個(gè)是對服務(wù)進(jìn)行監(jiān)控隔崎,后一個(gè)是對服務(wù)器進(jìn)行監(jiān)控,當(dāng)然也可以包含容器的狀態(tài)監(jiān)控韵丑,比如線程池爵卒、GC等。
幾條箴言:
指標(biāo)簡化到不能再簡化
關(guān)注長尾現(xiàn)象撵彻,要時(shí)延分布钓株,而不是平均時(shí)延
慎重發(fā)出緊急警報(bào),預(yù)防“狼來了”現(xiàn)象陌僵,緊急警報(bào)都是課操作的轴合,且不能慣性得出結(jié)論的問題
警報(bào)不要重復(fù),避免浪費(fèi)SRE的注意力
五碗短、排障
定位故障點(diǎn)值桩。合理判定問題的嚴(yán)重程度,嘗試盡快恢復(fù)服務(wù)或者緩解問題豪椿。
借助監(jiān)控工具和日志工具檢查系統(tǒng)或者服務(wù)狀態(tài)奔坟。服務(wù)時(shí)延和錯(cuò)誤率携栋、系統(tǒng)資源使用狀態(tài)情況、日志統(tǒng)計(jì)分析
逐層檢查和分解問題咳秉,解析問題現(xiàn)象婉支,不斷假設(shè)/驗(yàn)證地進(jìn)行診斷,找到根本原因
六澜建、發(fā)布
自動化發(fā)布應(yīng)當(dāng)作為基礎(chǔ)設(shè)施向挖,第一優(yōu)先級建設(shè),他的重要性和自動化測試一樣炕舵。之前參加的“軟件工程的精益化管理”課程實(shí)驗(yàn)中何之,實(shí)踐證明了自動化工具的威力很大,能夠明顯提升整個(gè)團(tuán)隊(duì)的生產(chǎn)力咽筋。
關(guān)于自動化發(fā)布的內(nèi)容和分享網(wǎng)上非常多溶推,而且國內(nèi)各大互聯(lián)公司分享出來的材料也是汗牛充棟,用到是可以學(xué)習(xí)奸攻。
七蒜危、反思 and 總結(jié)
這兩個(gè)優(yōu)點(diǎn)對于SRE很是重要,反思使得SRE從失敗中學(xué)習(xí)教訓(xùn)睹耐,總結(jié)使SRE從時(shí)間中獲得經(jīng)驗(yàn)辐赞,個(gè)人和團(tuán)隊(duì)需要學(xué)習(xí)和踐行這種精神,但是對事不對人硝训。
Google的做法是:時(shí)事后總結(jié)機(jī)制响委。
避免指責(zé),提供建設(shè)性意見窖梁,充滿正能量
時(shí)候總結(jié)報(bào)告需要評審赘风,避免低質(zhì)量的時(shí)候總結(jié)帶來負(fù)面影響
google的事后總結(jié)模板
八、追本溯源窄绒、懷疑一切
SRE是天生懷疑論者贝次,懷疑一切崔兴,眼見為實(shí)彰导,追本溯源是本性,感覺自己的性格還蠻適合的~
九敲茄、擁抱風(fēng)險(xiǎn)
傳統(tǒng)運(yùn)維是厭惡風(fēng)險(xiǎn)的位谋,但是開發(fā)和產(chǎn)品卻更關(guān)注變化速度,他們都希望迭代速度越快越好堰燎,但是這回給系統(tǒng)運(yùn)行帶來風(fēng)險(xiǎn)掏父,所以這天生是矛盾。
為了解決風(fēng)險(xiǎn)和變化的矛盾秆剪,google提出了SLI-->SLO-->SLA的機(jī)制赊淑。
SLI——服務(wù)質(zhì)量指標(biāo)爵政,如:延時(shí)、吞吐量陶缺、錯(cuò)誤率钾挟、可用性等
SLO——服務(wù)質(zhì)量目標(biāo),服務(wù)的某個(gè)SLI的目標(biāo)值饱岸,或者目標(biāo)范圍掺出。比如:SLI<=目標(biāo)值,min=
SLA——服務(wù)質(zhì)量協(xié)議(Agreement)苫费,服務(wù)(SRE)和用戶(開發(fā)汤锨、產(chǎn)品)之間的一個(gè)明確的、或者不明確的協(xié)議百框,描述了在達(dá)到或者沒有達(dá)到SLO之后的后果闲礼。或者可以轉(zhuǎn)化為先行的KPI琅翻,比如系統(tǒng)可用性99.99%等位仁。
開發(fā)和運(yùn)維針對某個(gè)系統(tǒng)協(xié)商好一個(gè)SLA后,大家有一個(gè)量化的指標(biāo)方椎,一旦出現(xiàn)沖突時(shí)聂抢,算一下,看看是否違反SLA棠众,如果違反琳疏,那么就升級走流程。這樣既靈活闸拿,也有章可循空盼。如果開發(fā)團(tuán)隊(duì)牛逼,代碼質(zhì)量高或者運(yùn)氣好新荤,你可以迭代快揽趾,反之你需要慢點(diǎn)來,間接地苛骨,大家都對線上系統(tǒng)負(fù)責(zé)了篱瞎。
十、反直覺的真理
1痒芝、不要承諾你的系統(tǒng)100%可靠俐筋。
因?yàn)檫@樣會要其他人過分依賴于你,一旦你出問題严衬,那么將成為眾矢之的澄者,相反的,你應(yīng)當(dāng)對自己的系統(tǒng)了如指掌,比如能承受的壓力粱挡,可用性目標(biāo)赠幕,一些明顯的坑,一些不支持的屬性等询筏,廣而告之劣坊。
2、有意識地破壞你的系統(tǒng)
不同于演練屈留,而是真實(shí)生產(chǎn)系統(tǒng)局冰,在可控范圍內(nèi),人為制造故障灌危,然后在有人值守的情況下康二,找到系統(tǒng)的短板和問題。這樣等到真正的故障來臨時(shí)勇蝙,可以有章可循沫勿,快速解決問題。
主動暴露自己的不足好于別人突然揭發(fā)你味混,當(dāng)然更重要的是要及時(shí)糾正不足产雹。