這是我技術(shù)管理十講的第三篇——技術(shù)篇首有,主要講技術(shù)部分的衡量指標(biāo)和提升方法等,通過我的工作實踐讓大家對技術(shù)部分從方法到執(zhí)行都有一個深入的認識:
1. 技術(shù)二維表鼠哥,技術(shù)部分的范圍和生命周期爬舰。
2. 技術(shù)的衡量指標(biāo)以及詳細拆解:穩(wěn)定性和性能杂腰。
3. 如何分層提升穩(wěn)定性和性能垃你?技術(shù)和管理兩方面惜颇。
技術(shù)是我最熟悉的锨亏,或許正因為如此忙干,對待技術(shù)時我潛意識里容易大意屯伞,我想應(yīng)該有很多同學(xué)和我有相似的經(jīng)歷。好就好在豪直,經(jīng)過了簡單的技術(shù)錯誤上栽的跟頭之后劣摇,我學(xué)乖了,我不允許自己在同一個地方跌倒兩次弓乙,我傾情總結(jié)了技術(shù)部分的二維表如圖1末融,其中行是范圍:技術(shù)基礎(chǔ)、技術(shù)平臺暇韧、技術(shù)創(chuàng)新勾习;列是生命周期:現(xiàn)狀、目標(biāo)和過程懈玻。一張圖高度概括了技術(shù)的范圍和生命周期巧婶,它時刻警醒我技術(shù)該做什么才能十全十美,所以說有時候血與淚的教訓(xùn)未必是壞事,正可謂心存敬畏艺栈,方能行有所止英岭,才可為有所成。
好湿右,那下面詳細講解下技術(shù)的指標(biāo)诅妹,最基礎(chǔ)的就是系統(tǒng)穩(wěn)定性了,即系統(tǒng)可用性毅人,只有系統(tǒng)是可用的才能談好用吭狡、愛用≌奢海可以說穩(wěn)定性就是技術(shù)的基本面划煮,必須要不遺余力的去提升。那具體是在哪些方面進行提升呢缔俄?我來詳細拆解一下般此,穩(wěn)定性劃分為三個層次:基礎(chǔ)層、平臺層牵现、服務(wù)層铐懊。
1. 基礎(chǔ)層是指服務(wù)器、網(wǎng)絡(luò)瞎疼、存儲科乎、操作系統(tǒng)等,這一層大部分公司都使用公有云贼急,由公有云的服務(wù)商去保障茅茂,不在本篇講述范圍內(nèi)。
2. 本篇聚焦在平臺層和服務(wù)層的穩(wěn)定性太抓,其中平臺層是指:存儲空闲、消息、配置走敌、調(diào)度等技術(shù)平臺碴倾;服務(wù)層是指:web服務(wù)、移動服務(wù)等技術(shù)服務(wù)掉丽。
好跌榔,穩(wěn)定性的范圍清楚了,那么穩(wěn)定性怎么量化呢捶障?一般是SLA僧须,用幾個9的可用性或故障的個數(shù)來衡量。本篇中用故障個數(shù)來衡量项炼,其實故障個數(shù)能夠和幾個9的可用性進行一個簡單換算担平,后面我會講到示绊。當(dāng)然單純的講故障個數(shù)是不科學(xué)的,比如1個影響全部用戶的故障和10個影響1%用戶的故障暂论,孰輕孰重面褐?有鑒于此,本篇所指的故障個數(shù)空另,是分等級的故障的個數(shù)盆耽,即不同級別的故障個數(shù)不超過幾個蹋砚。那么既然要給故障分等級扼菠,就需要有故障等級標(biāo)準(zhǔn)(此處每家公司有所不同),我展示的示例是一個B輪科技公司70人技術(shù)團隊的示例供大家參考坝咐,如圖2循榆,其中最核心的就是故障等級和判斷標(biāo)準(zhǔn),本示例判斷標(biāo)準(zhǔn)中的影響用戶和影響業(yè)務(wù)是OR的關(guān)系墨坚,影響時間是AND的關(guān)系秧饮。
好,故障等級標(biāo)準(zhǔn)有了泽篮,那么故障個數(shù)標(biāo)準(zhǔn)——穩(wěn)定性標(biāo)準(zhǔn)也可以定出來了盗尸,我繼續(xù)展示我的示例,如圖3帽撑,以S1的為例解釋下:S1的故障一年不超過3個泼各,換算一下就是說:S1的業(yè)務(wù)一年內(nèi)盡量控制在9小時以內(nèi)不可用,相當(dāng)于S1的業(yè)務(wù)承諾4個9的可用性(4個9的可用性是指一年內(nèi)8.76個小時不可用)亏拉。
細心的同學(xué)會發(fā)現(xiàn)扣蜻,S1的故障和S1的業(yè)務(wù)是什么關(guān)系?圖2故障等級標(biāo)準(zhǔn)中影響業(yè)務(wù)一欄及塘,即是不同級別的業(yè)務(wù)莽使,那么為什么“注冊”是S1級業(yè)務(wù)呢?這些業(yè)務(wù)是怎么分級的呢笙僚?兩種方式:
1. 根據(jù)經(jīng)驗芳肌,公司業(yè)務(wù)、產(chǎn)品性質(zhì)等肋层,梳理用戶路徑庇勃,基于此來進行業(yè)務(wù)分級。
2. 根據(jù)數(shù)據(jù)來進行業(yè)務(wù)分級槽驶。
業(yè)務(wù)分級是本篇的核心责嚷,因為任何一家公司技術(shù)資源永遠是寶貴的有限的,一定要分優(yōu)先級進行穩(wěn)定性和性能的提升掂铐,核心業(yè)務(wù)的穩(wěn)定性和性能指標(biāo)毫無疑問要優(yōu)先保證罕拂。那么對于技術(shù)人員來說揍异,業(yè)務(wù)分級還需轉(zhuǎn)換成技術(shù)的系統(tǒng)分級和服務(wù)分級,才能清楚對哪些系統(tǒng)哪些服務(wù)進行什么樣的穩(wěn)定性承諾爆班,舉例來說:“注冊”這個業(yè)務(wù)功能依賴哪些系統(tǒng)和哪些服務(wù)衷掷?這些所依賴的系統(tǒng)和服務(wù)就要承諾一年內(nèi)不超過3個S1級的故障。
由此可見業(yè)務(wù)分級轉(zhuǎn)換成系統(tǒng)分級和服務(wù)分級也是至關(guān)重要柿菩,可以讓技術(shù)承諾更加有的放矢戚嗅,那么轉(zhuǎn)換方法是什么呢?繼續(xù)聽我慢慢道來吧枢舶。是時候讓最不被老板理解的架構(gòu)師們登場了懦胞,架構(gòu)師的一個核心職責(zé)就是要清晰的根據(jù)業(yè)務(wù)梳理出技術(shù)依賴,并通過業(yè)務(wù)架構(gòu)圖和技術(shù)架構(gòu)圖表達出來凉泄,讓一個完全不懂的人也能夠懂個七七八八(畫外音:老板握著架構(gòu)的手熱淚盈眶的說:架構(gòu)師們躏尉,有你們真好)。此處附上我的業(yè)務(wù)架構(gòu)圖示例如圖4后众,每家公司有所不同胀糜,但相同的是:一個合格的業(yè)務(wù)架構(gòu)圖需要完整的表達出業(yè)務(wù)流程,邏輯上分多少層蒂誉,每層多少模塊等教藻,如圖中分成4層:前臺產(chǎn)品、業(yè)務(wù)中臺右锨、技術(shù)平臺括堤、基礎(chǔ)設(shè)施,每一層中又有相對應(yīng)的模塊陡蝇。
通過業(yè)務(wù)架構(gòu)圖痊臭,“注冊”這個業(yè)務(wù)依賴哪些模塊就很清晰了,直接依賴:
1. 業(yè)務(wù)中臺層的權(quán)限中心登夫、會員中心广匙;
2. 技術(shù)平臺層的存儲;
3. 基礎(chǔ)設(shè)施層的虛擬機恼策、存儲鸦致、負載均衡等。
那么細心的同學(xué)會發(fā)現(xiàn)涣楷,這只是把業(yè)務(wù)所依賴的系統(tǒng)模塊梳理出來了分唾,那么系統(tǒng)模塊是哪些技術(shù)人員哪些機器哪些代碼哪些平臺提供的服務(wù)呢?這個就得把技術(shù)架構(gòu)圖請出來了狮斗,此處附上我的技術(shù)架構(gòu)圖示例如圖5绽乔,每家公司有所不同,但相同的是:一個合格的技術(shù)架構(gòu)圖需要根據(jù)業(yè)務(wù)架構(gòu)圖轉(zhuǎn)換成技術(shù)的各個層次碳褒,以及每一層中的各個平臺和組件折砸。
通過技術(shù)架構(gòu)圖看疗,“注冊”這個業(yè)務(wù)是由誰編寫的哪個系統(tǒng)提供的服務(wù)就一目了然了:
1. Nginx,運維A負責(zé)睦授;
2. Zuul两芳,架構(gòu)師B負責(zé);
3. 權(quán)限中心去枷、會員中心怖辆,研發(fā)leader C負責(zé),Team 1編碼實現(xiàn)的删顶;
4. Redis竖螃,架構(gòu)師D負責(zé);
5. Mysql翼闹,DBA負責(zé)斑鼻;
6. Docker蒋纬,運維A負責(zé)猎荠。
經(jīng)過業(yè)務(wù)架構(gòu)圖和技術(shù)架構(gòu)圖的梳理(此處必須再次為架構(gòu)師正名:你們真的太重要啦),“注冊”這個業(yè)務(wù)的系統(tǒng)依賴蜀备、服務(wù)依賴就很清晰了关摇,隨之系統(tǒng)和服務(wù)的分級也清晰了,其他業(yè)務(wù)同理碾阁,此處不再贅述输虱。
整個業(yè)務(wù)依賴梳理出來之后,每個系統(tǒng)每個服務(wù)的穩(wěn)定性目標(biāo)就定出來了脂凶,那么接下來就講解下怎么去保證這個目標(biāo)宪睹,怎么去提升穩(wěn)定性,我又又又梳理了一張二維表如圖6蚕钦。
其中穩(wěn)定性分為兩個層次:
1. 盡量避免故障發(fā)生亭病;
2. 故障發(fā)生了盡量降低故障影響。
每一個層次又有兩種手段去進行保障:
1. 技術(shù)手段:1)集群嘶居、分布式罪帖、異地多活、災(zāi)備等邮屁,避免單點整袁,保證系統(tǒng)的水平和垂直擴展等;2)安全性考慮佑吝,防攻擊等坐昙;3)持續(xù)集成、自動化測試芋忿、代碼/架構(gòu)優(yōu)化等炸客,保證質(zhì)量襟士;4)監(jiān)控告警,及時發(fā)現(xiàn)問題處理問題嚷量;5)限流熔斷降級陋桂,降低影響;6)各層資源隔離蝶溶,避免互相影響嗜历。
2. 管理手段:1)做好容量規(guī)劃,嚴格管控生產(chǎn)環(huán)境發(fā)布和壓測抖所;2)定期巡檢梨州、演練,提前發(fā)現(xiàn)問題田轧;3)制定應(yīng)急預(yù)案暴匠,積累故障處理流程;4)7??24小時值班傻粘;5)大促期間進行充分故障等每窖。
至此穩(wěn)定性的事已經(jīng)講述完成了,下面還有性能部分弦悉,性能的邏輯與穩(wěn)定性相同窒典,我就簡明扼要的直接上干貨了,性能是指系統(tǒng)的同時服務(wù)能力和單次服務(wù)效率稽莉,本篇中聚焦在后端性能和前端性能這兩部分:
1. 后端性能的衡量指標(biāo):吞吐量和平均響應(yīng)時間瀑志,吞吐量由QPS和并發(fā)數(shù)來表征,這兩者有一個換算關(guān)系如圖7污秆。
2. 前端性能的衡量指標(biāo):首屏?xí)r間和用戶可交互時間為主劈猪,白屏?xí)r間和頁面總下載時間為輔,其中每個指標(biāo)的通用標(biāo)準(zhǔn)和計算方式如圖8良拼。
性能指標(biāo)需要通過壓測得到战得,那怎么去提升性能指標(biāo)呢?同樣要根據(jù)業(yè)務(wù)等級将饺、系統(tǒng)等級贡避、服務(wù)等級去提升。
1. 后端性能:1)代碼/算法/架構(gòu)優(yōu)化予弧;2)集群刮吧、分布式;3)緩存掖蛤;4)異步化杀捻。等。
2. 前端性能:1)懶加載蚓庭;2)圖片等壓縮致讥;3)前端仅仆、瀏覽器緩存;4)CDN垢袱;5)接口合并墓拜。等。
好请契,至此技術(shù)篇該告一段落了咳榜,細心的同學(xué)會發(fā)現(xiàn):咦,怎么“個數(shù)”這個衡量指標(biāo)沒有講述爽锥?(不得不說涌韩,細心的同學(xué)今天有點兒忙),“個數(shù)”的確沒講氯夷,“個數(shù)”其實也無需多言臣樱,就是多多積累技術(shù)資產(chǎn):代碼、文檔腮考、技術(shù)組件雇毫、技術(shù)平臺、軟著秸仙、專利等嘴拢,退一萬步講桩盲,積累這些東東至少能夠讓從事軟件開發(fā)的你心理上踏實寂纪。