當(dāng)業(yè)務(wù)規(guī)模比較小唯沮、系統(tǒng)復(fù)雜度不高時,運(yùn)維堪遂、測試介蛉、數(shù)據(jù)分析、管理等支撐功能主要由各系統(tǒng)或者團(tuán)隊獨(dú)立完成溶褪。隨著業(yè)務(wù)規(guī)模越來越大币旧,系統(tǒng)復(fù)雜度越來越高,子系統(tǒng)數(shù)量越來越多猿妈,如果繼續(xù)采取各自為政的方式來實(shí)現(xiàn)這些支撐功能吹菱,會發(fā)現(xiàn)重復(fù)工作非常多巍虫。因此我們自然而然就會想到將這些支撐功能做成平臺,避免重復(fù)造輪子鳍刷,減少不規(guī)范帶來的溝通和協(xié)作成本占遥。
今天,我就來聊聊互聯(lián)網(wǎng)架構(gòu)模板的“平臺”技術(shù)输瓜。由于每個平臺本身都是一個龐大的體系瓦胎,專欄只是介紹一下平臺的核心職責(zé)和關(guān)鍵設(shè)計點(diǎn),具體細(xì)節(jié)就不詳細(xì)展開了尤揣。
運(yùn)維平臺
運(yùn)維平臺核心的職責(zé)分為四大塊:配置搔啊、部署、監(jiān)控北戏、應(yīng)急负芋,每個職責(zé)對應(yīng)系統(tǒng)生命周期的一個階段,如下圖所示嗜愈。
配置:主要負(fù)責(zé)資源的管理旧蛾。例如,機(jī)器管理蠕嫁、IP 地址管理蚜点、虛擬機(jī)管理等。
部署:主要負(fù)責(zé)將系統(tǒng)發(fā)布到線上拌阴。例如绍绘,包管理、灰度發(fā)布管理迟赃、回滾等陪拘。
監(jiān)控:主要負(fù)責(zé)收集系統(tǒng)上線運(yùn)行后的相關(guān)數(shù)據(jù)并進(jìn)行監(jiān)控,以便及時發(fā)現(xiàn)問題纤壁。
應(yīng)急:主要負(fù)責(zé)系統(tǒng)出故障后的處理左刽。例如,停止程序酌媒、下線故障機(jī)器欠痴、切換 IP 等。
運(yùn)維平臺的核心設(shè)計要素是“四化”:標(biāo)準(zhǔn)化秒咨、平臺化喇辽、自動化、可視化雨席。
1. 標(biāo)準(zhǔn)化
需要制定運(yùn)維標(biāo)準(zhǔn)菩咨,規(guī)范配置管理、部署流程、監(jiān)控指標(biāo)抽米、應(yīng)急能力等特占,各系統(tǒng)按照運(yùn)維標(biāo)準(zhǔn)來實(shí)現(xiàn),避免不同的系統(tǒng)不同的處理方式云茸。標(biāo)準(zhǔn)化是運(yùn)維平臺的基礎(chǔ)是目,沒有標(biāo)準(zhǔn)化就沒有運(yùn)維平臺。
如果某個系統(tǒng)就是無法改造自己來滿足運(yùn)維標(biāo)準(zhǔn)标捺,那該怎么辦呢胖笛?常見的做法是不改造系統(tǒng),由中間方來完成規(guī)范適配宜岛。例如,某個系統(tǒng)對外提供了 RESTful 接口的方式來查詢當(dāng)前的性能指標(biāo)功舀,而運(yùn)維標(biāo)準(zhǔn)是性能數(shù)據(jù)通過日志定時上報萍倡,那么就可以寫一個定時程序訪問 RESTful 接口獲取性能數(shù)據(jù),然后轉(zhuǎn)換為日志上報到運(yùn)維平臺辟汰。
2. 平臺化
傳統(tǒng)的手工運(yùn)維方式需要投入大量人力列敲,效率低,容易出錯帖汞,因此需要在運(yùn)維標(biāo)準(zhǔn)化的基礎(chǔ)上戴而,將運(yùn)維的相關(guān)操作都集成到運(yùn)維平臺中,通過運(yùn)維平臺來完成運(yùn)維工作翩蘸。
運(yùn)維平臺的好處有:
可以將運(yùn)維標(biāo)準(zhǔn)固化到平臺中所意,無須運(yùn)維人員死記硬背運(yùn)維標(biāo)準(zhǔn)。
運(yùn)維平臺提供簡單方便的操作催首,相比之下人工操作低效且容易出錯扶踊。
運(yùn)維平臺是可復(fù)用的,一套運(yùn)維平臺可以支撐幾百上千個業(yè)務(wù)系統(tǒng)郎任。
3. 自動化
傳統(tǒng)手工運(yùn)維方式效率低下的一個主要原因就是要執(zhí)行大量重復(fù)的操作秧耗,運(yùn)維平臺可以將這些重復(fù)操作固化下來,由系統(tǒng)自動完成舶治。
例如分井,一次手工部署需要登錄機(jī)器、上傳包霉猛、解壓包尺锚、備份舊系統(tǒng)、覆蓋舊系統(tǒng)惜浅、啟動新系統(tǒng)缩麸,這個過程中需要執(zhí)行大量的重復(fù)或者類似的操作。有了運(yùn)維平臺后,平臺需要提供自動化的能力杭朱,完成上述操作阅仔,部署人員只需要在最開始單擊“開始部署”按鈕,系統(tǒng)部署完成后通知部署人員即可弧械。
類似的還有監(jiān)控八酒,有了運(yùn)維平臺后,運(yùn)維平臺可以實(shí)時收集數(shù)據(jù)并進(jìn)行初步分析刃唐,當(dāng)發(fā)現(xiàn)數(shù)據(jù)異常時自動發(fā)出告警羞迷,無須運(yùn)維人員盯著數(shù)據(jù)看,或者寫一大堆“grep + awk + sed”來分析日志才能發(fā)現(xiàn)問題画饥。
4. 可視化
運(yùn)維平臺有非常多的數(shù)據(jù)衔瓮,如果全部通過人工去查詢數(shù)據(jù)再來判斷,則效率很低抖甘。尤其是在故障應(yīng)急時热鞍,時間就是生命,處理問題都是爭分奪秒衔彻,能減少 1 分鐘的時間就可能挽回幾十萬元的損失薇宠,可視化的主要目的就是為了提升數(shù)據(jù)查看效率。
可視化的原理和汽車儀表盤類似艰额,如果只是一連串的數(shù)字顯示在屏幕上澄港,相信大部分人一看到一連串的數(shù)字,第一感覺是眼花柄沮,而且也很難將數(shù)據(jù)與具體的情況聯(lián)系起來回梧。而有了儀表盤后,通過儀表盤的指針偏離幅度及指針指向的區(qū)域顏色祖搓,能夠一目了然地看出當(dāng)前的狀態(tài)是低速漂辐、中速還是高速。
可視化相比簡單的數(shù)據(jù)羅列棕硫,具備下面這些優(yōu)點(diǎn):
能夠直觀地看到數(shù)據(jù)的相關(guān)屬性髓涯,例如,汽車儀表盤中的數(shù)據(jù)最小值是 0哈扮,最大是 100纬纪,單位是 MPH。
能夠?qū)?shù)據(jù)的含義展示出來滑肉,例如汽車儀表盤中不同速度的顏色指示包各。
能夠?qū)㈥P(guān)聯(lián)數(shù)據(jù)整合一起展示,例如汽車儀表盤的速度和里程靶庙。
測試平臺
測試平臺核心的職責(zé)當(dāng)然就是測試了问畅,包括單元測試、集成測試、接口測試护姆、性能測試等矾端,都可以在測試平臺來完成。
測試平臺的核心目的是提升測試效率卵皂,從而提升產(chǎn)品質(zhì)量秩铆,其設(shè)計關(guān)鍵就是自動化。傳統(tǒng)的測試方式是測試人員手工執(zhí)行測試用例灯变,測試效率低殴玛,重復(fù)的工作多。通過測試平臺提供的自動化能力添祸,測試用例能夠重復(fù)執(zhí)行滚粟,無須人工參與,大大提升了測試效率刃泌。
為了達(dá)到“自動化”的目標(biāo)凡壤,測試平臺的基本架構(gòu)如下圖所示。
1. 用例管理
測試自動化的主要手段就是通過腳本或者代碼來進(jìn)行測試蔬咬,例如單元測試用例是代碼、接口測試用例可以用 Python 來寫沐寺、可靠性測試用例可以用 Shell 來寫林艘。為了能夠重復(fù)執(zhí)行這些測試用例,測試平臺需要將用例管理起來混坞,管理的維度包括業(yè)務(wù)狐援、系統(tǒng)、測試類型究孕、用例代碼啥酱。例如,網(wǎng)購業(yè)務(wù)的訂單系統(tǒng)的接口測試用例厨诸。
2. 資源管理
測試用例要放到具體的運(yùn)行環(huán)境中才能真正執(zhí)行镶殷,運(yùn)行環(huán)境包括硬件(服務(wù)器、手機(jī)微酬、平板電腦等)绘趋、軟件(操作系統(tǒng)、數(shù)據(jù)庫颗管、Java 虛擬機(jī)等)陷遮、業(yè)務(wù)系統(tǒng)(被測試的系統(tǒng))。
除了性能測試垦江,一般的自動化測試對性能要求不高帽馋,所以為了提升資源利用率,大部分的測試平臺都會使用虛擬技術(shù)來充分利用硬件資源,如虛擬機(jī)绽族、Docker 等技術(shù)姨涡。
3. 任務(wù)管理
任務(wù)管理的主要職責(zé)是將測試用例分配到具體的資源上執(zhí)行,跟蹤任務(wù)的執(zhí)行情況项秉。任務(wù)管理是測試平臺設(shè)計的核心绣溜,它將測試平臺的各個部分串聯(lián)起來從而完成自動化測試。
4. 數(shù)據(jù)管理
測試任務(wù)執(zhí)行完成后娄蔼,需要記錄各種相關(guān)的數(shù)據(jù)(例如怖喻,執(zhí)行時間、執(zhí)行結(jié)果岁诉、用例執(zhí)行期間的 CPU锚沸、內(nèi)存占用情況等),這些數(shù)據(jù)具備下面這些作用:
展現(xiàn)當(dāng)前用例的執(zhí)行情況涕癣。
作為歷史數(shù)據(jù)哗蜈,方便后續(xù)的測試與歷史數(shù)據(jù)進(jìn)行對比,從而發(fā)現(xiàn)明顯的變化趨勢坠韩。例如距潘,某個版本后單元測試覆蓋率從 90% 下降到 70%。
作為大數(shù)據(jù)的一部分只搁,可以基于測試的任務(wù)數(shù)據(jù)進(jìn)行一些數(shù)據(jù)挖掘音比。例如,某個業(yè)務(wù)一年執(zhí)行了 10000 個用例測試氢惋,另外一個業(yè)務(wù)只執(zhí)行了 1000 個用例測試洞翩,兩個業(yè)務(wù)規(guī)模和復(fù)雜度差不多,為何差異這么大焰望?
數(shù)據(jù)平臺
數(shù)據(jù)平臺的核心職責(zé)主要包括三部分:數(shù)據(jù)管理骚亿、數(shù)據(jù)分析和數(shù)據(jù)應(yīng)用。每一部分又包含更多的細(xì)分領(lǐng)域熊赖,詳細(xì)的數(shù)據(jù)平臺架構(gòu)如下圖所示来屠。
1. 數(shù)據(jù)管理
數(shù)據(jù)管理包含數(shù)據(jù)采集、數(shù)據(jù)存儲震鹉、數(shù)據(jù)訪問和數(shù)據(jù)安全四個核心職責(zé)的妖,是數(shù)據(jù)平臺的基礎(chǔ)功能。
數(shù)據(jù)采集:從業(yè)務(wù)系統(tǒng)搜集各類數(shù)據(jù)足陨。例如嫂粟,日志、用戶行為墨缘、業(yè)務(wù)數(shù)據(jù)等星虹,將這些數(shù)據(jù)傳送到數(shù)據(jù)平臺零抬。
數(shù)據(jù)存儲:將從業(yè)務(wù)系統(tǒng)采集的數(shù)據(jù)存儲到數(shù)據(jù)平臺,用于后續(xù)數(shù)據(jù)分析宽涌。
數(shù)據(jù)訪問:負(fù)責(zé)對外提供各種協(xié)議用于讀寫數(shù)據(jù)平夜。例如,SQL卸亮、Hive忽妒、Key-Value 等讀寫協(xié)議。
數(shù)據(jù)安全:通常情況下數(shù)據(jù)平臺都是多個業(yè)務(wù)共享的兼贸,部分業(yè)務(wù)敏感數(shù)據(jù)需要加以保護(hù)段直,防止被其他業(yè)務(wù)讀取甚至修改,因此需要設(shè)計數(shù)據(jù)安全策略來保護(hù)數(shù)據(jù)溶诞。
2. 數(shù)據(jù)分析
數(shù)據(jù)分析包括數(shù)據(jù)統(tǒng)計鸯檬、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)螺垢、深度學(xué)習(xí)等幾個細(xì)分領(lǐng)域喧务。
數(shù)據(jù)統(tǒng)計:根據(jù)原始數(shù)據(jù)統(tǒng)計出相關(guān)的總覽數(shù)據(jù)。例如枉圃,PV功茴、UV、交易額等孽亲。
數(shù)據(jù)挖掘:數(shù)據(jù)挖掘這個概念本身含義可以很廣坎穿,為了與機(jī)器學(xué)習(xí)和深度學(xué)習(xí)區(qū)分開,這里的數(shù)據(jù)挖掘主要是指傳統(tǒng)的數(shù)據(jù)挖掘方式墨林。例如赁酝,有經(jīng)驗(yàn)的數(shù)據(jù)分析人員基于數(shù)據(jù)倉庫構(gòu)建一系列規(guī)則來對數(shù)據(jù)進(jìn)行分析從而發(fā)現(xiàn)一些隱含的規(guī)律犯祠、現(xiàn)象旭等、問題等,經(jīng)典的數(shù)據(jù)挖掘案例就是沃爾瑪?shù)钠【婆c尿布的關(guān)聯(lián)關(guān)系的發(fā)現(xiàn)衡载。
機(jī)器學(xué)習(xí)搔耕、深度學(xué)習(xí):機(jī)器學(xué)習(xí)和深度學(xué)習(xí)屬于數(shù)據(jù)挖掘的一種具體實(shí)現(xiàn)方式,由于其實(shí)現(xiàn)方式與傳統(tǒng)的數(shù)據(jù)挖掘方式差異較大痰娱,因此數(shù)據(jù)平臺在實(shí)現(xiàn)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)時弃榨,需要針對機(jī)器學(xué)習(xí)和深度學(xué)習(xí)獨(dú)立進(jìn)行設(shè)計。
3. 數(shù)據(jù)應(yīng)用
數(shù)據(jù)應(yīng)用很廣泛梨睁,既包括在線業(yè)務(wù)鲸睛,也包括離線業(yè)務(wù)。例如坡贺,推薦官辈、廣告等屬于在線應(yīng)用箱舞,報表、欺詐檢測拳亿、異常檢測等屬于離線應(yīng)用晴股。
數(shù)據(jù)應(yīng)用能夠發(fā)揮價值的前提是需要有“大數(shù)據(jù)”,只有當(dāng)數(shù)據(jù)的規(guī)模達(dá)到一定程度肺魁,基于數(shù)據(jù)的分析电湘、挖掘才能發(fā)現(xiàn)有價值的規(guī)律、現(xiàn)象鹅经、問題等寂呛。如果數(shù)據(jù)沒有達(dá)到一定規(guī)模,通常情況下做好數(shù)據(jù)統(tǒng)計就足夠了瞬雹,尤其是很多初創(chuàng)企業(yè)昧谊,無須一開始就參考 BAT 來構(gòu)建自己的數(shù)據(jù)平臺。
管理平臺
管理平臺的核心職責(zé)就是權(quán)限管理酗捌,無論是業(yè)務(wù)系統(tǒng)(例如呢诬,淘寶網(wǎng))、中間件系統(tǒng)(例如胖缤,消息隊列 Kafka)尚镰,還是平臺系統(tǒng)(例如,運(yùn)維平臺)哪廓,都需要進(jìn)行管理狗唉。如果每個系統(tǒng)都自己來實(shí)現(xiàn)權(quán)限管理,效率太低涡真,重復(fù)工作很多分俯,因此需要統(tǒng)一的管理平臺來管理所有的系統(tǒng)的權(quán)限。
權(quán)限管理主要分為兩部分:身份認(rèn)證哆料、權(quán)限控制缸剪,其基本架構(gòu)如下圖所示。
1. 身份認(rèn)證
確定當(dāng)前的操作人員身份东亦,防止非法人員進(jìn)入系統(tǒng)杏节。例如,不允許匿名用戶進(jìn)入系統(tǒng)典阵。為了避免每個系統(tǒng)都自己來管理用戶奋渔,通常情況下都會使用企業(yè)賬號來做統(tǒng)一認(rèn)證和登錄。
2. 權(quán)限控制
根據(jù)操作人員的身份確定操作權(quán)限壮啊,防止未經(jīng)授權(quán)的人員進(jìn)行操作嫉鲸。例如,不允許研發(fā)人員進(jìn)入財務(wù)系統(tǒng)查看別人的工資歹啼。
小結(jié)
今天我為你講了互聯(lián)網(wǎng)企業(yè)常見的平臺以及基本的平臺功能玄渗,希望對你有所幫助减江。
這就是今天的全部內(nèi)容,留一道思考題給你吧捻爷,運(yùn)維平臺或者測試平臺辈灼,有的公司是由中間件團(tuán)隊負(fù)責(zé)開發(fā),有的是運(yùn)維和測試團(tuán)隊自己開發(fā)也榄,你覺得兩種方式各有什么優(yōu)缺點(diǎn)巡莹,分別適用什么場景呢?
歡迎你把答案寫到留言區(qū)甜紫,和我一起討論降宅。相信經(jīng)過深度思考的回答,也會讓你對知識的理解更加深刻囚霸。(編輯亂入:精彩的留言有機(jī)會獲得豐厚福利哦Q)