新聞中心
影響系統(tǒng)穩(wěn)定性的架構(gòu)設(shè)計(jì)有哪些?一個(gè)可持續(xù)保障的研發(fā)運(yùn)維流程機(jī)制是怎樣的?如何培養(yǎng)團(tuán)隊(duì)技術(shù)人員的意識(shí)和能力?本文作者以團(tuán)隊(duì)技術(shù)負(fù)責(zé)人的視角,從三大技術(shù)要素和一個(gè)業(yè)務(wù)要素,分享在穩(wěn)定性建設(shè)上的實(shí)踐性思考和簡(jiǎn)要思路。希望對(duì)同學(xué)們有所啟發(fā)。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到遂溪網(wǎng)站設(shè)計(jì)與遂溪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋遂溪地區(qū)。
一、概述
自己以及帶領(lǐng)的團(tuán)隊(duì)曾經(jīng)負(fù)責(zé)較多不同類(lèi)型的互聯(lián)網(wǎng)服務(wù)系統(tǒng),如幾十萬(wàn)應(yīng)用數(shù)&億級(jí)流量的云計(jì)算平臺(tái)、年?duì)I收將近千億的廣告系統(tǒng)、億級(jí)用戶(hù)千萬(wàn)級(jí)日活的釘釘工作臺(tái)系統(tǒng)、億級(jí)交易額的釘釘市場(chǎng)&交易系統(tǒng)、算法在線離線工程系統(tǒng)等相關(guān)系統(tǒng)或子系統(tǒng),整體而言無(wú)重大故障,達(dá)到定級(jí)故障數(shù)也很少,線上穩(wěn)定性保障在一個(gè)不錯(cuò)的水位上。階段性總結(jié)下我從團(tuán)隊(duì)技術(shù)負(fù)責(zé)人視角做好穩(wěn)定性建設(shè)的實(shí)踐性思考和簡(jiǎn)要思路,為感興趣的技術(shù)同學(xué)提供一個(gè)實(shí)踐指南。
我的團(tuán)隊(duì)穩(wěn)定性建設(shè)思路包括了3大技術(shù)要素:良好的系統(tǒng)架構(gòu)和實(shí)現(xiàn)、完備的團(tuán)隊(duì)研發(fā)運(yùn)維流程機(jī)制、技術(shù)同學(xué)良好意識(shí)和能力,以及1個(gè)業(yè)務(wù)要素:良好的研發(fā)項(xiàng)目管理。
二 良好的系統(tǒng)架構(gòu)和實(shí)現(xiàn)
1 架構(gòu)設(shè)計(jì)
根據(jù)不同系統(tǒng)業(yè)務(wù)特點(diǎn)、不同發(fā)展階段(系統(tǒng)規(guī)模、團(tuán)隊(duì)規(guī)模)、不同系統(tǒng)指標(biāo)側(cè)重性要求等,有很多不同的架構(gòu)思路和折中考量,例如存儲(chǔ)選型、服務(wù)化治理、中間件選型、中臺(tái)系統(tǒng)抽象等。本文簡(jiǎn)要講述會(huì)影響系統(tǒng)穩(wěn)定性的一些架構(gòu)設(shè)計(jì)點(diǎn)以供參考,設(shè)計(jì)考量點(diǎn)具體內(nèi)容可自行搜索細(xì)看。
消除單點(diǎn)
從請(qǐng)求發(fā)起側(cè)到服務(wù)處理返回的調(diào)用全鏈路的各個(gè)環(huán)節(jié)上避免存在單點(diǎn)(某個(gè)環(huán)節(jié)只由單個(gè)服務(wù)器完成功能),做到每個(gè)環(huán)節(jié)使用相互獨(dú)立的多臺(tái)服務(wù)器進(jìn)行分布式處理,要針對(duì)不同穩(wěn)定性要求級(jí)別和成本能力做到不同服務(wù)器規(guī)模分布式,這樣就避免單個(gè)服務(wù)器掛掉引發(fā)單點(diǎn)故障后進(jìn)而導(dǎo)致服務(wù)整體掛掉的風(fēng)險(xiǎn)??赡苌婕暗沫h(huán)節(jié)有端動(dòng)態(tài)獲取資源服務(wù)(html& js &小程序包等)、域名解析、多服務(wù)商多區(qū)域多機(jī)房IP入口、靜態(tài)資源服務(wù)、接入路由層、服務(wù)邏輯層、任務(wù)調(diào)度執(zhí)行層、依賴(lài)的微服務(wù)、數(shù)據(jù)庫(kù)及消息中間件。
消除單點(diǎn)的策略:
- 在服務(wù)邏輯層采用多運(yùn)營(yíng)商多IP入口、跨地&同地多機(jī)房部署、同機(jī)房多機(jī)器部署、分布式任務(wù)調(diào)度等策略。
- 在數(shù)據(jù)存儲(chǔ)層采用數(shù)據(jù)庫(kù)分庫(kù)分表、數(shù)據(jù)庫(kù)主從備集群、KV存儲(chǔ)&消息等分布式系統(tǒng)集群多副本等策略。
- 有分布式處理能力后,需要考慮單個(gè)服務(wù)器故障后自動(dòng)探活摘除、服務(wù)器增刪能不停服自動(dòng)同步給依賴(lài)方等問(wèn)題,這里就需引入一些分布式中樞控制系統(tǒng),如服務(wù)注冊(cè)發(fā)現(xiàn)系統(tǒng)、配置變更系統(tǒng)等,例如zookeeper是一個(gè)經(jīng)典應(yīng)用于該場(chǎng)景的一個(gè)分布式組件。
數(shù)據(jù)一致性
在分布式處理以及微服務(wù)化后,相關(guān)聯(lián)的數(shù)據(jù)會(huì)存在于不同的系統(tǒng)之中,相關(guān)聯(lián)的數(shù)據(jù)庫(kù)表、數(shù)據(jù)存儲(chǔ)、緩存等數(shù)據(jù)會(huì)因?yàn)榧軜?gòu)設(shè)計(jì)或子系統(tǒng)抖動(dòng)故障失敗等原因,導(dǎo)致彼此數(shù)據(jù)出現(xiàn)不一致,這也是一類(lèi)穩(wěn)定性故障。最簡(jiǎn)單的一致性,就是關(guān)系型數(shù)據(jù)庫(kù)的同請(qǐng)求內(nèi)同庫(kù)相關(guān)聯(lián)的多個(gè)數(shù)據(jù)表更新的一致性, 這個(gè)可通過(guò)數(shù)據(jù)庫(kù)的事務(wù)以及不同事務(wù)級(jí)別來(lái)保證。從架構(gòu)層面,數(shù)據(jù)一致性也會(huì)根據(jù)業(yè)務(wù)特點(diǎn),做強(qiáng)一致性、最終一致性的架構(gòu)選型,不同選型根據(jù)CAP理論,也會(huì)帶來(lái)可用性以及分區(qū)容忍性的一些折衷。
在做好SLA高的基礎(chǔ)系統(tǒng)選型、分布式事務(wù)中間件使用、冪等設(shè)計(jì),針對(duì)性提升好微服務(wù)本身SLA后,可根據(jù)不同數(shù)據(jù)一致性級(jí)別要求,考慮通過(guò)消息觸發(fā)多系統(tǒng)對(duì)賬、定時(shí)調(diào)度對(duì)賬、子流程失敗后主動(dòng)投遞消息延遲重試、消息消費(fèi)失敗后回旋重試、數(shù)據(jù)庫(kù)記錄過(guò)程中狀態(tài)后做定時(shí)調(diào)度掃描未成功記錄后重試、離線全量對(duì)賬。緩存更新機(jī)制不合理也容易引發(fā)緩存和數(shù)據(jù)庫(kù)之間數(shù)據(jù)不一致,一般在數(shù)據(jù)更新時(shí)考慮并發(fā)更新時(shí)緩存刪除優(yōu)先或固定單線程串行更新策略。
復(fù)雜分布式業(yè)務(wù)系統(tǒng)或微服務(wù)化治理后,基于消息中間件的解耦是普遍方式,這時(shí)選擇一個(gè)確保自身不重不丟以及高SLA消息中間件非常重要,利用消息中間件自身的多次回旋重試基本能保障很高的最終一致性,數(shù)據(jù)一致性要求更高的,再配合不同級(jí)別對(duì)賬機(jī)制即可。
強(qiáng)弱依賴(lài)梳理和降級(jí)
當(dāng)服務(wù)依賴(lài)各類(lèi)微服務(wù)時(shí),避免強(qiáng)依賴(lài)(依賴(lài)服務(wù)掛掉會(huì)到自己服務(wù)掛掉),盡可能在對(duì)應(yīng)服務(wù)出現(xiàn)問(wèn)題時(shí)做到自動(dòng)降級(jí)處理(弱依賴(lài))或者手工降級(jí),降級(jí)后依賴(lài)服務(wù)功能局部去掉或做合適局部提示,局部體驗(yàn)上有部分降級(jí),但不會(huì)讓主鏈路和整體功能掛掉。對(duì)于穩(wěn)定性要求很好的關(guān)鍵系統(tǒng),在成本可接受的情況下,同時(shí)維護(hù)一套保障主鏈路可用的備用系統(tǒng)和架構(gòu),在核心依賴(lài)服務(wù)出現(xiàn)問(wèn)題能做一定時(shí)間周期的切換過(guò)渡(例如mysql故障,階段性使用KV數(shù)據(jù)庫(kù)等),例如釘釘IM消息核心系統(tǒng)就實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)核心依賴(lài)實(shí)現(xiàn)一套一定周期的弱依賴(lài)備案,在核心依賴(lài)數(shù)據(jù)庫(kù)故障后也能保障一段時(shí)間消息收發(fā)可用。
強(qiáng)依賴(lài)的服務(wù)越少,系統(tǒng)整體基礎(chǔ)穩(wěn)定性就越高。部分特殊數(shù)據(jù)依賴(lài)多于邏輯依賴(lài)的系統(tǒng),做去依賴(lài)架構(gòu)設(shè)計(jì)也是一個(gè)思路,將依賴(lài)服務(wù)數(shù)據(jù)統(tǒng)一整合到自有服務(wù)的數(shù)據(jù)存儲(chǔ)中,通過(guò)消息 或定時(shí)更新的方式更新,做到不依賴(lài) 或少依賴(lài)其他系統(tǒng),進(jìn)而提高穩(wěn)定性,但這樣做也會(huì)有副作用:數(shù)據(jù)冗余可能會(huì)引發(fā)不同程度一定時(shí)間窗口數(shù)據(jù)不一致性。
熱點(diǎn)或極限值處理
業(yè)務(wù)規(guī)模以及數(shù)據(jù)規(guī)模大的部分系統(tǒng),在系統(tǒng)中會(huì)出現(xiàn)數(shù)據(jù)熱點(diǎn)、數(shù)據(jù)極度傾斜、少量大客戶(hù)超過(guò)極限閾值使用等極限場(chǎng)景,例如超級(jí)大客戶(hù)廣告投放物料、廣告點(diǎn)擊展示數(shù)據(jù)、API調(diào)用頻次都是比普通客戶(hù)大很多,如果按照客戶(hù)維度分庫(kù)分表,基本在物料更新、查詢(xún)、報(bào)表查看等一系列的場(chǎng)景都可能導(dǎo)致單庫(kù)抖動(dòng),這除了影響大客戶(hù)自己外也會(huì)影響分布在該分庫(kù)分表上所有普通客戶(hù)。電商中極度暢銷(xiāo)商品以及秒殺、企業(yè)IM中大組織群&大組織涉及全員關(guān)注更新行為、微博等訂閱類(lèi)明星大V的信息發(fā)布等都是少量極限場(chǎng)景可能會(huì)引發(fā)整體系統(tǒng)穩(wěn)定性問(wèn)題。因此,架構(gòu)設(shè)計(jì)時(shí),要分析自己系統(tǒng)中是否存在極限場(chǎng)景并設(shè)計(jì)對(duì)應(yīng)方案做好應(yīng)對(duì)。
極限場(chǎng)景中不同類(lèi)型場(chǎng)景處理架構(gòu)方案也不一樣,可能的方式:
- 大客戶(hù)從普通客戶(hù)分庫(kù)分表中拆出來(lái)隔離建庫(kù)表,隔離享用專(zhuān)有資源以及獨(dú)立庫(kù)表拆分路由邏輯以及隔離服務(wù)邏輯計(jì)算資源;
- 大客戶(hù)特定極限數(shù)據(jù)計(jì)算做預(yù)約計(jì)算以及預(yù)加載,在低峰期預(yù)約或提前優(yōu)化完成;
- 秒殺系統(tǒng)極限值可以考慮核心邏輯簡(jiǎn)化+消息解耦、同商品庫(kù)存拆分獨(dú)立交易、部分查詢(xún)或處理KV存儲(chǔ)替代關(guān)系型存儲(chǔ)、數(shù)據(jù)提前預(yù)熱加載、排隊(duì)、限流策略等策略;
- 大組織IM場(chǎng)景設(shè)計(jì)合適讀擴(kuò)散或?qū)憯U(kuò)散的策略,同時(shí)針對(duì)業(yè)務(wù)特點(diǎn)(不同人延遲度不一樣)做到不同人員體驗(yàn)平滑,或者為大組織或大V提供專(zhuān)屬計(jì)算存儲(chǔ)資源或?qū)俨樵?xún)更新邏輯。
- 在特定極限值系統(tǒng)架構(gòu)以及資源無(wú)法滿(mǎn)足的情況,產(chǎn)品側(cè)以及技術(shù)側(cè)要明確采用最高閾值調(diào)用限制。
資金交易類(lèi)系統(tǒng)要仔細(xì)考慮資損的風(fēng)險(xiǎn)
交易系統(tǒng)對(duì)于數(shù)據(jù)準(zhǔn)確性、一致性、資金損失等都是很敏感的,這一塊在是否使用緩存、事務(wù)一致性考量、數(shù)據(jù)時(shí)延、數(shù)據(jù)不丟不重、數(shù)據(jù)精準(zhǔn)核對(duì)和恢復(fù)等需要額外架構(gòu)設(shè)計(jì)考量。仔細(xì)評(píng)估交易以及營(yíng)銷(xiāo)的全鏈路各個(gè)環(huán)節(jié),評(píng)估其中出現(xiàn)資損的可能性以及做好應(yīng)對(duì)設(shè)計(jì),例如增加多層級(jí)對(duì)賬、券總額度控制、異常金額限制和報(bào)警等資損防控的考量等。不同層次不同維度不同時(shí)間延遲的對(duì)賬以及預(yù)案是一個(gè)重要及時(shí)感知資損和止血的有效方式。全鏈路的過(guò)程數(shù)據(jù)要做好盡可能持久化和冗余備份,方便后續(xù)核對(duì)以及基于過(guò)程數(shù)據(jù)進(jìn)行數(shù)據(jù)修復(fù),同時(shí)盡量針對(duì)特殊數(shù)據(jù)丟失場(chǎng)景提供快速自動(dòng)化修復(fù)處理預(yù)案(如交易消息可選擇性回放和基于冪等原則的重新消費(fèi))。
離線數(shù)據(jù)流
基于數(shù)據(jù)的搜索推薦、機(jī)器學(xué)習(xí)算法系統(tǒng)、數(shù)據(jù)產(chǎn)品等,核心功能依賴(lài)離線產(chǎn)出 或 增量產(chǎn)出數(shù)據(jù),這類(lèi)數(shù)據(jù)可能規(guī)模大、來(lái)源廣、生產(chǎn)鏈路長(zhǎng),在整體生產(chǎn)和傳輸鏈路中,很容易出現(xiàn)數(shù)據(jù)少量丟失、部分環(huán)節(jié)失敗、數(shù)據(jù)生產(chǎn)延遲等情況,最終消費(fèi)在線系統(tǒng)也很難感知少量數(shù)據(jù)錯(cuò)誤進(jìn)而導(dǎo)致故障。
針對(duì)離線數(shù)據(jù)流,要增加不同傳輸環(huán)節(jié)數(shù)據(jù)完整性校驗(yàn)、不同生產(chǎn)環(huán)節(jié)數(shù)據(jù)正確性校驗(yàn)、數(shù)據(jù)延遲監(jiān)控、數(shù)據(jù)生產(chǎn)失敗監(jiān)控、端到端數(shù)據(jù)正確性規(guī)則校驗(yàn)、數(shù)據(jù)錯(cuò)誤或延遲兜底預(yù)案、數(shù)據(jù)回滾重刷工具等機(jī)制。機(jī)器學(xué)習(xí)類(lèi)系統(tǒng)還要考慮離線特征和線上特征數(shù)據(jù)一致性,確保離線訓(xùn)練的模型,線上預(yù)測(cè)應(yīng)用效果是一致的,因此模型上線時(shí)以及線上定期做離線和線上特征數(shù)據(jù)一致性核對(duì)。
其他異常情況處理
整體系統(tǒng)架構(gòu),除了正向邏輯、性能、擴(kuò)展性設(shè)計(jì)等外,要增加一個(gè)異常設(shè)計(jì)視角,窮盡思考各類(lèi)異常情況以及設(shè)計(jì)應(yīng)對(duì)策略。
2 容量評(píng)估設(shè)計(jì)
系統(tǒng)設(shè)計(jì)整體至少考慮應(yīng)對(duì)5到10倍或近1到3年系統(tǒng)規(guī)模增長(zhǎng),要保障后續(xù)通過(guò)增加機(jī)器資源等快速方式能實(shí)現(xiàn)系統(tǒng)水平擴(kuò)容。例如分庫(kù)分表的規(guī)模提前設(shè)計(jì)好提前量,避免臨時(shí)數(shù)據(jù)庫(kù)能力不足導(dǎo)致需要臨時(shí)重構(gòu)擴(kuò)容(增加分庫(kù)分表以及修改路由以及遷移數(shù)據(jù));服務(wù)邏輯層設(shè)計(jì)持有數(shù)據(jù)狀態(tài)導(dǎo)致無(wú)法加機(jī)器做服務(wù)層擴(kuò)容?;ヂ?lián)網(wǎng)產(chǎn)品發(fā)展變化較快,不一定會(huì)如期爆發(fā),容量架構(gòu)設(shè)計(jì)上也要注意不要過(guò)度提前設(shè)計(jì),避免提前復(fù)雜化引發(fā)研發(fā)效率以及機(jī)器成本問(wèn)題。
針對(duì)線上流量峰值,建議系統(tǒng)常態(tài)保持近期峰值3倍左右容量余量,上線前和上線后要定期做壓測(cè)摸高,寫(xiě)流量可用影子表等方式做壓測(cè),壓測(cè)可單接口以及模擬線上流量分布?jí)簻y(cè)結(jié)合,根據(jù)壓測(cè)結(jié)果優(yōu)化架構(gòu)或擴(kuò)容,持續(xù)保持容量富余。
對(duì)于可能超過(guò)系統(tǒng)現(xiàn)有容量的突發(fā)峰值,限流策略是線上要配置的策略。入口側(cè)入口流量調(diào)用 、不同渠道服務(wù)依賴(lài)調(diào)用、對(duì)依賴(lài)服務(wù)的調(diào)用都要評(píng)估可極限調(diào)研的上限值,通過(guò)中間件等合適方式限制超過(guò)閾值調(diào)用,避免引發(fā)雪崩效應(yīng)。特定業(yè)務(wù)系統(tǒng),對(duì)于超過(guò)峰值流量,可以通過(guò)消息架構(gòu)以及合適體驗(yàn)設(shè)計(jì)做削峰填谷。針對(duì)惡意攻擊流量也要考慮在入口層部署防DDOS攻擊的流量清洗層。
部分系統(tǒng)峰值變化較大且需要持續(xù)盡可能承載保障,可考慮引入彈性伸縮策略,預(yù)約 或根據(jù)流量變化觸發(fā)系統(tǒng)自動(dòng)擴(kuò)縮容,以確保以盡量小成本來(lái)自動(dòng)化滿(mǎn)足變化峰值。
3 運(yùn)維方案設(shè)計(jì)
系統(tǒng)要考慮持續(xù)迭代發(fā)布變更以及線上運(yùn)維的訴求,做到可灰度、可監(jiān)控、可回滾。
可灰度保障及時(shí)在小流量情況,發(fā)現(xiàn)問(wèn)題,避免引發(fā)大范圍故障。因此在做系統(tǒng)任何變更時(shí),要考慮灰度方案,特別是大用戶(hù)流量系統(tǒng)?;叶确绞娇赡苡邪酌麊斡脩?hù)、按用戶(hù)Id固定劃分后不同流量比例、機(jī)器分批發(fā)布、業(yè)務(wù)概念相關(guān)分組分比例(例如某個(gè)行業(yè)、某個(gè)商品、某類(lèi)商品)等,灰度周期要和結(jié)合系統(tǒng)風(fēng)險(xiǎn)和流量做合適設(shè)計(jì),重要系統(tǒng)灰度周期可能持續(xù)超過(guò)一周或更多。
監(jiān)控項(xiàng)要系統(tǒng)性確認(rèn)是否完備以及保持更新,可能監(jiān)控項(xiàng):錯(cuò)誤日志前端js錯(cuò)誤、用戶(hù)體驗(yàn)到的性能和白屏率、接口成功率、依賴(lài)服務(wù)成功率、機(jī)器基礎(chǔ)負(fù)載相關(guān)監(jiān)控(CPU利用率、cpu Load、內(nèi)存、IO、網(wǎng)絡(luò)等)、服務(wù)基礎(chǔ)監(jiān)控(端口、進(jìn)程、狀態(tài)探活、JVM full gc、OOM等)、數(shù)據(jù)庫(kù)負(fù)載監(jiān)控、數(shù)據(jù)庫(kù)慢請(qǐng)求、流量同比劇烈變化。監(jiān)控項(xiàng)的報(bào)警策略也要根據(jù)業(yè)務(wù)系統(tǒng)特點(diǎn)以及監(jiān)控項(xiàng)的特點(diǎn),做不同報(bào)警策略設(shè)計(jì),例如秒級(jí)&分鐘級(jí)報(bào)警、錯(cuò)誤率報(bào)警、錯(cuò)誤日志次數(shù)報(bào)警、連續(xù)出錯(cuò)報(bào)警等。核心監(jiān)控可摘要一個(gè)監(jiān)控大盤(pán),一個(gè)大盤(pán)快速判斷服務(wù)穩(wěn)定性情況。
可回滾:新增功能增加配置開(kāi)關(guān),當(dāng)線上出現(xiàn)問(wèn)題時(shí),可通過(guò)關(guān)閉功能開(kāi)關(guān),快速下線最新升級(jí) 或部分有問(wèn)題功能。針對(duì)不同出錯(cuò)場(chǎng)景,有配置驅(qū)動(dòng)一些預(yù)案,例如降級(jí)對(duì)某個(gè)服務(wù)的依賴(lài)、提供合適功能維護(hù)中公告、切換到備用服務(wù)等預(yù)案,在特定問(wèn)題出現(xiàn)時(shí),可以快速做線上止損和恢復(fù)。發(fā)布功能注意提前考慮出現(xiàn)問(wèn)題時(shí)快速回滾步驟,部分經(jīng)常發(fā)布注意對(duì)回滾步驟做演練。
4 安全設(shè)計(jì)
數(shù)據(jù)以及應(yīng)用安全問(wèn)題一旦出現(xiàn)可能很致命,一定要加以考慮。安全是一個(gè)比較專(zhuān)業(yè)領(lǐng)域,常規(guī)在針對(duì)業(yè)務(wù)系統(tǒng)經(jīng)典安全場(chǎng)景做好考量的同時(shí),盡量引入專(zhuān)業(yè)安全技術(shù)同學(xué)評(píng)估。所有資源訪問(wèn)需要合適鑒權(quán),避免越權(quán)訪問(wèn);防Sql注入等攻擊,做參數(shù)合法性校驗(yàn);資源消耗頻次管控,如短信資源等;用戶(hù)防騷擾,設(shè)置用戶(hù)通知、彈屏等觸達(dá)閾值和頻次;敏感信息過(guò)濾或脫敏等。
5 高質(zhì)量的代碼實(shí)現(xiàn)
合適實(shí)現(xiàn)和經(jīng)典性實(shí)踐是非常重要代碼質(zhì)量保障的方式,大量線上問(wèn)題還是由少量代碼細(xì)節(jié)考慮不周全和經(jīng)驗(yàn)不足引發(fā)的。這方面考量不同語(yǔ)言都會(huì)有自己一些最佳的實(shí)踐,例如Java,可以參考《Java開(kāi)發(fā)手冊(cè)》。比較通用保障方式是分支覆蓋完備的單元測(cè)試 、線上引流回歸測(cè)試、完備回歸測(cè)試用例等測(cè)試質(zhì)量保障措施。
三 團(tuán)隊(duì)研發(fā)運(yùn)維流程機(jī)制
穩(wěn)定性涉及團(tuán)隊(duì)所有不同水平同學(xué)、所有系統(tǒng)、研發(fā)所有環(huán)節(jié)、線上時(shí)時(shí)刻刻,單個(gè)同學(xué)是無(wú)法保障好的,必須建立團(tuán)隊(duì)流程機(jī)制來(lái)可持續(xù)保障。
主要流程機(jī)制如下:
- 技術(shù)Review:不同體量設(shè)計(jì)安排經(jīng)驗(yàn)更加豐富同學(xué)Review,架構(gòu)師、主管、外部架構(gòu)師的Review、定期系統(tǒng)整體Review等。
- 代碼Code Review:建立規(guī)范和標(biāo)準(zhǔn),通過(guò)CR認(rèn)證合格同學(xué)執(zhí)行code review動(dòng)作。
- 單測(cè):不同風(fēng)險(xiǎn)的系統(tǒng)設(shè)定盡量高的行覆蓋 & 分支覆蓋率標(biāo)準(zhǔn),復(fù)雜邏輯類(lèi)追求100%分支覆蓋。
- 回歸測(cè)試:持續(xù)積累回歸用例,在上線前和上線后執(zhí)行回歸動(dòng)作;上線前線上引流測(cè)試也是一種模擬測(cè)試方式,端類(lèi)型系統(tǒng)還可以用monkey工具做隨機(jī)化測(cè)試。
- 發(fā)布機(jī)制:設(shè)計(jì)發(fā)布準(zhǔn)入和審批流程,確保每次上線發(fā)布都是經(jīng)過(guò)精細(xì)設(shè)計(jì)和審核的,上線過(guò)程要做到分批、灰度、支持快速回滾、線上分批觀察(日志確認(rèn))、線上回歸等核心動(dòng)作。建立發(fā)布紅線等機(jī)制,不同系統(tǒng)設(shè)計(jì)合適發(fā)布時(shí)段以及發(fā)布灰度觀察周期。
- 團(tuán)隊(duì)報(bào)警值班響應(yīng)機(jī)制 (報(bào)警群、短信、電話(huà)):確保報(bào)警有合適人員即時(shí)響應(yīng)處理,團(tuán)隊(duì)層面可定期做數(shù)據(jù)性統(tǒng)計(jì)通曬,同時(shí)建立主管或架構(gòu)師兜底機(jī)制。
- 定期排查線上隱患:定期做線上走查和錯(cuò)誤日志治理、告警治理,確保線上小的隱患機(jī)制化發(fā)現(xiàn)和修復(fù)。例如在釘釘針對(duì)企業(yè)用戶(hù)早晚高峰的特點(diǎn),設(shè)計(jì)早值班機(jī)制,用于高峰期第一時(shí)間應(yīng)急以及每天專(zhuān)人花一定時(shí)間走查線上,該機(jī)制在釘釘技術(shù)團(tuán)隊(duì)持續(xù)踐行多年,有效發(fā)現(xiàn)和治理了釘釘各個(gè)線上系統(tǒng)的隱患。
- 用戶(hù)問(wèn)題處理機(jī)制:Voc日清、周清等。在釘釘也經(jīng)歷Voc周清到日清的持續(xù)機(jī)制精進(jìn)。
- 線上問(wèn)題復(fù)盤(pán)機(jī)制:天內(nèi)、周內(nèi)問(wèn)題及時(shí)復(fù)盤(pán),確保針對(duì)每個(gè)線上問(wèn)題做系統(tǒng)和團(tuán)隊(duì)精進(jìn)。
- 代碼質(zhì)量抽查通曬:定期抽查團(tuán)隊(duì)同學(xué)代碼,做評(píng)估和通曬,鼓勵(lì)好的代碼,幫助不好代碼的改善。
- 成立穩(wěn)定性治理專(zhuān)門(mén)topic:合適同學(xué)每周做好穩(wěn)定性過(guò)程和精進(jìn)。
- 定期壓測(cè)機(jī)制:定期機(jī)制化執(zhí)行,核查線上容量情況。
- 日常演練機(jī)制:預(yù)案演練,模擬線上故障的不通知的突襲演練提升團(tuán)隊(duì)線上問(wèn)題應(yīng)對(duì)能力。
流程機(jī)制要和團(tuán)隊(duì)同學(xué)共創(chuàng)達(dá)成一致后,配合建立topic負(fù)責(zé)人機(jī)制,對(duì)流程機(jī)制執(zhí)行度和執(zhí)行效果要做好過(guò)程監(jiān)測(cè)和通曬,建立明確數(shù)字化標(biāo)準(zhǔn)和衡量機(jī)制(例如釘釘技術(shù)團(tuán)隊(duì)針對(duì)線上問(wèn)題設(shè)定1-5-10標(biāo)準(zhǔn),1分鐘響應(yīng)5分鐘內(nèi)定位10分鐘內(nèi)恢復(fù)),同時(shí)建立對(duì)應(yīng)獎(jiǎng)懲機(jī)制。流程機(jī)制也要根據(jù)系統(tǒng)狀態(tài)進(jìn)行精簡(jiǎn)或精進(jìn),確保流程機(jī)制可執(zhí)行性和生命力。
四 技術(shù)同學(xué)意識(shí)和能力
人的意識(shí)是最重要的,專(zhuān)業(yè)能力可以鍛煉培養(yǎng)。如果意識(shí)不足或松懈,好的能力以及機(jī)制流程也會(huì)形同虛設(shè)。
永遠(yuǎn)要對(duì)敬畏線上,敬畏客戶(hù)體驗(yàn)。面向線上的穩(wěn)定性戰(zhàn)術(shù)上可以基于專(zhuān)業(yè)度鍛煉后自信,但戰(zhàn)略和思想上必須持續(xù)如履薄冰、三省吾身。線上穩(wěn)定性保障是作為技術(shù)人自己專(zhuān)業(yè)度的追求和必須保持初心,始終保持敬畏。不因?yàn)闃I(yè)務(wù)繁忙、個(gè)人心情狀態(tài)、團(tuán)隊(duì)是否重視而有變化,只要職責(zé)在,就要守護(hù)好。技術(shù)主管以及系統(tǒng)owner要有持續(xù)感知穩(wěn)定性隱患和風(fēng)險(xiǎn),保持銳度,集中性以及系統(tǒng)性查差補(bǔ)漏。
1 團(tuán)隊(duì)對(duì)線上敬畏的一些具象體現(xiàn)和要求
每個(gè)報(bào)警不要放過(guò),每個(gè)報(bào)警及時(shí)響應(yīng)處理
快速定位和快速恢復(fù)是個(gè)人以及團(tuán)隊(duì)專(zhuān)業(yè)能力沉淀,但快速報(bào)警響應(yīng)是每個(gè)敬畏線上敬畏用戶(hù)體驗(yàn)的技術(shù)同學(xué)可以做到的。
在監(jiān)控完備和持續(xù)前提下,每個(gè)報(bào)警及時(shí)處理即可以降低故障影響范圍,也會(huì)持續(xù)減少小的隱患。報(bào)警一些小的實(shí)踐技巧:報(bào)警按照方向收斂報(bào)警群,建立報(bào)警天級(jí)值班機(jī)制,報(bào)警短信手機(jī)設(shè)置為震動(dòng)模式(不打擾同空間家人或朋友情況下,自己第一時(shí)間感知),主管要訂閱報(bào)警作為團(tuán)隊(duì)報(bào)警兜底處理人,報(bào)警響應(yīng)好的同學(xué)和不好的同學(xué)要數(shù)據(jù)化表?yè)P(yáng)和批評(píng)。
從團(tuán)隊(duì)角度,報(bào)警及時(shí)響應(yīng)必須配合報(bào)警治理進(jìn)行,否則過(guò)多無(wú)效報(bào)警也會(huì)讓有責(zé)任心的同學(xué)變得麻木。所以必須控制無(wú)效報(bào)警的數(shù)量,例如單應(yīng)用無(wú)效報(bào)警(不需要線上問(wèn)題進(jìn)行定位以及修復(fù)處理的)不要超過(guò)5條,個(gè)人維度無(wú)效報(bào)警天級(jí)別不超過(guò)10條。
線上問(wèn)題要復(fù)盤(pán),不論是否為定級(jí)故障,不論問(wèn)題大小
小的線上問(wèn)題也要復(fù)盤(pán),復(fù)盤(pán)準(zhǔn)備度可以低于定級(jí)故障,但都需要思考反思以及落實(shí)優(yōu)化Action。小的線上問(wèn)題就是未來(lái)線上故障的前兆。我們團(tuán)隊(duì)周會(huì)上都會(huì)有一個(gè)環(huán)節(jié),上周如有線上問(wèn)題則會(huì)安排對(duì)觸發(fā)人做復(fù)盤(pán)。
錯(cuò)誤日志要重視
要定期分析線上錯(cuò)誤日志,隱患的問(wèn)題是藏在錯(cuò)誤日志中的。我們現(xiàn)在技術(shù)團(tuán)隊(duì)會(huì)有早值班機(jī)制,每個(gè)方向每天都有一個(gè)技術(shù)同學(xué)走查線上,以發(fā)現(xiàn)線上隱患問(wèn)題為導(dǎo)向,走查監(jiān)控大盤(pán)、錯(cuò)誤日志、用戶(hù)反饋,通過(guò)這個(gè)例行機(jī)制,很好地防微杜漸。
每個(gè)用戶(hù)反饋要重視,定位到根本原因
一個(gè)用戶(hù)反饋背后必然有多個(gè)實(shí)際線上問(wèn)題,只是這個(gè)用戶(hù)無(wú)法忍受,知道反饋路徑以及對(duì)這個(gè)產(chǎn)品有熱愛(ài) 或強(qiáng)依賴(lài)才選擇反饋的。徹底定位一個(gè)voc,就是修復(fù)了一類(lèi)線上問(wèn)題。而且到用戶(hù)反饋的程度,這個(gè)線上問(wèn)題就已經(jīng)有一定程度用戶(hù)體驗(yàn)影響了。我們現(xiàn)在技術(shù)團(tuán)隊(duì)有一個(gè)voc日清機(jī)制,針對(duì)線上voc問(wèn)題對(duì)用戶(hù)做好日內(nèi)響應(yīng)答復(fù),也是一個(gè)不錯(cuò)對(duì)于這個(gè)意識(shí)的數(shù)字化衡量。
2、能力培養(yǎng)
單個(gè)技術(shù)同學(xué)個(gè)人技術(shù)以及穩(wěn)定性保障能力是團(tuán)隊(duì)在每個(gè)穩(wěn)定性任務(wù)上拿到結(jié)果的執(zhí)行者和基礎(chǔ),因此技術(shù)主管重視識(shí)別不同同學(xué)個(gè)人優(yōu)勢(shì)和不足,針對(duì)性做工作安排以及培養(yǎng)鍛煉。只要線上意識(shí)上足夠重視,能力對(duì)于大部門(mén)技術(shù)同學(xué)是可以培養(yǎng)的。
團(tuán)隊(duì)內(nèi)同學(xué)由于入行時(shí)間、歷史經(jīng)驗(yàn)等各方面原因,對(duì)于當(dāng)前系統(tǒng)穩(wěn)定性保障能力是有強(qiáng)弱的差異的,對(duì)于個(gè)人是正常情況,但對(duì)于團(tuán)隊(duì)而言,不能因?yàn)閳F(tuán)隊(duì)個(gè)別同學(xué)能力上存在不足而引入團(tuán)隊(duì)層面穩(wěn)定性保障風(fēng)險(xiǎn)。需要主管很好熟悉以及判斷同學(xué)能力段位,在負(fù)責(zé)系統(tǒng)和模塊、流程機(jī)制約束、輔導(dǎo)人等方面做好差異化安排。例如校招同學(xué)X個(gè)月不做線上發(fā)布,前X個(gè)月發(fā)布有師兄協(xié)同發(fā)布機(jī)制,并發(fā)高 或資金交易等等風(fēng)險(xiǎn)高的系統(tǒng)讓更加有經(jīng)驗(yàn)的負(fù)責(zé)。同時(shí)設(shè)計(jì)培養(yǎng)機(jī)制,能力當(dāng)前不足但有潛力的同學(xué),可以安排由經(jīng)驗(yàn)豐富的同學(xué)指導(dǎo)以及提供一些進(jìn)階實(shí)操路徑,按照節(jié)奏從易到難逐漸承擔(dān)更高風(fēng)險(xiǎn)的系統(tǒng)職責(zé)。
能力培養(yǎng)方式有技術(shù)Review、代碼CR和輔導(dǎo)、參與團(tuán)隊(duì)穩(wěn)定性保障機(jī)制、安排合適師兄指導(dǎo)、過(guò)程中主管指導(dǎo)、逐漸承擔(dān)更高職責(zé)等。代碼層面,對(duì)于Java同學(xué)來(lái)說(shuō), 《Java開(kāi)發(fā)手冊(cè)》是一個(gè)很好的實(shí)踐性指南,超出代碼風(fēng)格,提供了日志、異常處理、集合等庫(kù)使用、數(shù)據(jù)庫(kù)設(shè)計(jì)、分層設(shè)計(jì)等多個(gè)提升代碼質(zhì)量的實(shí)踐做法,我們自己團(tuán)隊(duì)所有Java研發(fā)同學(xué)都會(huì)100%通過(guò)阿里云上阿里巴巴代碼認(rèn)證考試,同時(shí)團(tuán)隊(duì)有一個(gè)團(tuán)隊(duì)內(nèi)新人品碼機(jī)制,同時(shí)釘釘大技術(shù)團(tuán)隊(duì)層面有一個(gè)品碼會(huì)機(jī)制,這些都是不錯(cuò)地培養(yǎng)同學(xué)寫(xiě)出好代碼的培養(yǎng)方式。
好多小團(tuán)隊(duì)、大團(tuán)隊(duì)、公司都有很多不錯(cuò)提升穩(wěn)定性機(jī)制和案例,積極主動(dòng)參考學(xué)習(xí)以及結(jié)合自己業(yè)務(wù)系統(tǒng)思考踐行,是自己提升重要路徑。架構(gòu)上高可用以及架構(gòu)相關(guān)經(jīng)典書(shū)籍自我學(xué)習(xí),從理論上做系統(tǒng)性認(rèn)知也是有必要,相關(guān)書(shū)籍網(wǎng)上有很多推薦,例如《高性能網(wǎng)站建設(shè)》、《大型網(wǎng)站系統(tǒng)與Java中間件實(shí)踐》等。
少量的同學(xué)在主管和團(tuán)隊(duì)盡可能幫助和輔導(dǎo)后在穩(wěn)定性性保障的意識(shí)和能力上持續(xù)不能達(dá)標(biāo),這類(lèi)同學(xué)要做好階段性高風(fēng)險(xiǎn)系統(tǒng)隔離以及堅(jiān)定做汰換。對(duì)業(yè)務(wù)、客戶(hù)體驗(yàn)、團(tuán)隊(duì)內(nèi)其他同學(xué)負(fù)責(zé),及時(shí)汰換他以降低這一塊穩(wěn)定性風(fēng)險(xiǎn)。
五、良好的研發(fā)項(xiàng)目管理
從經(jīng)驗(yàn)看,線上系統(tǒng)大部分故障是由新的變更引入和觸發(fā)的,變更是業(yè)務(wù)和產(chǎn)品迭代演進(jìn)方式,因此不可能沒(méi)有變更,但我們可以對(duì)變更項(xiàng)目做合適質(zhì)量管理,進(jìn)而有效提高線上穩(wěn)定性。
項(xiàng)目管理的四要素:工作范圍(需求)、時(shí)間(交付時(shí)間)、質(zhì)量、成本(人 & 機(jī)器資源等),簡(jiǎn)稱(chēng)STQC,這四個(gè)要素是相互關(guān)聯(lián)的和制約的,形成一個(gè)項(xiàng)目管理質(zhì)量管理鐵三角,一個(gè)要素變動(dòng)就會(huì)影響到其他要素,因此要保障好質(zhì)量就必須要考慮怎么管理好其他三個(gè)要素。
此外,我們可以進(jìn)一步理解項(xiàng)目成功的要素,以終為始聚焦考慮如何提升實(shí)際影響成功的質(zhì)量,成功的項(xiàng)目不僅取決于項(xiàng)目本身從開(kāi)始到結(jié)束的執(zhí)行過(guò)程,還取決于開(kāi)始前和結(jié)束后的努力。成功的項(xiàng)目應(yīng)該取決于三個(gè)階段的努力:
- 項(xiàng)目開(kāi)始前必須 “了解什么是客戶(hù)的成功”,只有客戶(hù)成功了項(xiàng)目才能成功;——理解客戶(hù)真正的需求。
- 項(xiàng)目執(zhí)行中能夠“擔(dān)負(fù)客戶(hù)成功的責(zé)任”,按要求完成承諾的工作。
- 項(xiàng)目結(jié)束后能“幫助客戶(hù)實(shí)現(xiàn)價(jià)值”,只有客戶(hù)說(shuō)項(xiàng)目成功了才是真正的成功?!獛椭蛻?hù)實(shí)現(xiàn)業(yè)務(wù)目標(biāo)、用戶(hù)價(jià)值目標(biāo)、商業(yè)價(jià)值目標(biāo)。
質(zhì)量管理鐵三角
互聯(lián)網(wǎng)產(chǎn)品迭代速度很快,推崇快速推出、快速試錯(cuò)、快速占據(jù)市場(chǎng)先機(jī),交付時(shí)間的快是互聯(lián)網(wǎng)產(chǎn)品、業(yè)務(wù)同學(xué)對(duì)于研發(fā)團(tuán)隊(duì)顯性的要求,而交付質(zhì)量和線上持續(xù)穩(wěn)定則是一個(gè)隱性需求,產(chǎn)品業(yè)務(wù)默認(rèn)研發(fā)團(tuán)隊(duì)?wèi)?yīng)該做到,但往往在時(shí)間、成本等方面沒(méi)有給予顯性考慮,這一塊就需要研發(fā)項(xiàng)目管理同學(xué)主動(dòng)評(píng)估考量進(jìn)來(lái),有自己專(zhuān)業(yè)判斷和堅(jiān)持。
理解好真正的客戶(hù)需求和交付后客戶(hù)價(jià)值的實(shí)現(xiàn),可以幫助在四要素沖突的時(shí)候合適取舍需求來(lái)保障時(shí)間和質(zhì)量,以及和業(yè)務(wù)產(chǎn)品&客戶(hù)基于客戶(hù)價(jià)值實(shí)現(xiàn)爭(zhēng)取時(shí)間、資源來(lái)保障質(zhì)量。項(xiàng)目管理角度穩(wěn)定性保障基本動(dòng)作包括確定和充分理解幫助客戶(hù)成功的需求范圍、控制好需求變更、預(yù)留質(zhì)量保障環(huán)節(jié)時(shí)間、動(dòng)態(tài)管控交付預(yù)期時(shí)間、爭(zhēng)取充足人力以及機(jī)器等成本資源。進(jìn)階動(dòng)作:在提前了解和理解甚至共同參與制定業(yè)務(wù)戰(zhàn)略和策略基礎(chǔ)上提前規(guī)劃需求范圍和研發(fā)節(jié)奏&人員排兵布陣&架構(gòu)布局、深入理解業(yè)務(wù)基礎(chǔ)上協(xié)助做需求取舍和優(yōu)化。
網(wǎng)頁(yè)題目:3+1保障:高可用系統(tǒng)穩(wěn)定性是如何煉成的?
標(biāo)題路徑:http://m.fisionsoft.com.cn/article/dhsjooe.html


咨詢(xún)
建站咨詢(xún)
