68架構(gòu)模板:“平臺(tái)”技術(shù)
時(shí)間:2023-06-07 01:03:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-06-07 01:03:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)
68架構(gòu)模板:“平臺(tái)”技術(shù):
程序員瓶頸突破架構(gòu)師?架構(gòu)設(shè)計(jì)的理論與實(shí)踐
每個(gè)程序員都有一個(gè)成為架構(gòu)師的夢(mèng)想,奈何手里無(wú)槍無(wú)法點(diǎn)燃心中奇夢(mèng)。本系列文章分享如何讓你手里有槍,只要努力,技術(shù)的夢(mèng)想一定能實(shí)現(xiàn),這應(yīng)該是眾多夢(mèng)想中離地表最近的一個(gè)。
“平臺(tái)”技術(shù)
當(dāng)業(yè)務(wù)規(guī)模比較小、系統(tǒng)復(fù)雜度不高時(shí),運(yùn)維、測(cè)試、數(shù)據(jù)分析、管理等支撐功能主要由各系統(tǒng)或者團(tuán)隊(duì)獨(dú)立完成。
隨著業(yè)務(wù)規(guī)模越來(lái)越大,系統(tǒng)復(fù)雜度越來(lái)越高,子系統(tǒng)數(shù)量越來(lái)越多,如果繼續(xù)采取各自為政的方式來(lái)實(shí)現(xiàn)這些支撐功能,會(huì)發(fā)現(xiàn)重復(fù)工作非常多。
因此我們自然而然就會(huì)想到將這些支撐功能做成平臺(tái),避免重復(fù)造輪子,減少不規(guī)范帶來(lái)的溝通和協(xié)作成本。
運(yùn)維平臺(tái)
運(yùn)維平臺(tái)核心的職責(zé)分為四大塊:配置、部署、監(jiān)控、應(yīng)急,每個(gè)職責(zé)對(duì)應(yīng)系統(tǒng)生命周期的一個(gè)階段,如下圖所示。
配置:主要負(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)控,以便及時(shí)發(fā)現(xiàn)問題。
應(yīng)急:主要負(fù)責(zé)系統(tǒng)出故障后的處理。例如,停止程序、下線故障機(jī)器、切換IP等。
運(yùn)維平臺(tái)的核心設(shè)計(jì)要素是“四化”:標(biāo)準(zhǔn)化、平臺(tái)化、自動(dòng)化、可視化。
- 標(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)來(lái)實(shí)現(xiàn),避免不同的系統(tǒng)不同的處理方式。
標(biāo)準(zhǔn)化是運(yùn)維平臺(tái)的基礎(chǔ),沒有標(biāo)準(zhǔn)化就沒有運(yùn)維平臺(tái)。
如果某個(gè)系統(tǒng)就是無(wú)法改造自己來(lái)滿足運(yùn)維標(biāo)準(zhǔn),那該怎么辦呢?常見的做法是不改造系統(tǒng),由中間方來(lái)完成規(guī)范適配。
例如,某個(gè)系統(tǒng)對(duì)外提供了RESTful接口的方式來(lái)查詢當(dāng)前的性能指標(biāo),而運(yùn)維標(biāo)準(zhǔn)是性能數(shù)據(jù)通過(guò)日志定時(shí)上報(bào),那么就可以寫一個(gè)定時(shí)程序訪問RESTful接口獲取性能數(shù)據(jù),然后轉(zhuǎn)換為日志上報(bào)到運(yùn)維平臺(tái)。 - 平臺(tái)化
傳統(tǒng)的手工運(yùn)維方式需要投入大量人力,效率低,容易出錯(cuò),因此需要在運(yùn)維標(biāo)準(zhǔn)化的基礎(chǔ)上,將運(yùn)維的相關(guān)操作都集成到運(yùn)維平臺(tái)中,通過(guò)運(yùn)維平臺(tái)來(lái)完成運(yùn)維工作。
運(yùn)維平臺(tái)的好處有:
可以將運(yùn)維標(biāo)準(zhǔn)固化到平臺(tái)中,無(wú)須運(yùn)維人員死記硬背運(yùn)維標(biāo)準(zhǔn)。
運(yùn)維平臺(tái)提供簡(jiǎn)單方便的操作,相比之下人工操作低效且容易出錯(cuò)。
運(yùn)維平臺(tái)是可復(fù)用的,一套運(yùn)維平臺(tái)可以支撐幾百上千個(gè)業(yè)務(wù)系統(tǒng) - 自動(dòng)化
傳統(tǒng)手工運(yùn)維方式效率低下的一個(gè)主要原因就是要執(zhí)行大量重復(fù)的操作,運(yùn)維平臺(tái)可以將這些重復(fù)操作固化下來(lái),由系統(tǒng)自動(dòng)完成。
例如,一次手工部署需要登錄機(jī)器、上傳包、解壓包、備份舊系統(tǒng)、覆蓋舊系統(tǒng)、啟動(dòng)新系統(tǒng),這個(gè)過(guò)程中需要執(zhí)行大量的重復(fù)或者類似的操作。
有了運(yùn)維平臺(tái)后,平臺(tái)需要提供自動(dòng)化的能力,完成上述操作,部署人員只需要在最開始單擊“開始部署”按鈕,系統(tǒng)部署完成后通知部署人員即可。
類似的還有監(jiān)控,有了運(yùn)維平臺(tái)后,運(yùn)維平臺(tái)可以實(shí)時(shí)收集數(shù)據(jù)并進(jìn)行初步分析,當(dāng)發(fā)現(xiàn)數(shù)據(jù)異常時(shí)自動(dòng)發(fā)出告警,無(wú)須運(yùn)維人員盯著數(shù)據(jù)看,或者寫一大堆“grep + awk + sed”來(lái)分析日志才能發(fā)現(xiàn)問題。 - 可視化
運(yùn)維平臺(tái)有非常多的數(shù)據(jù),如果全部通過(guò)人工去查詢數(shù)據(jù)再來(lái)判斷,則效率很低。尤其是在故障應(yīng)急時(shí),時(shí)間就是生命,處理問題都是爭(zhēng)分奪秒,能減少1分鐘的時(shí)間就可能挽回幾十萬(wàn)元的損失,可視化的主要目的就是為了提升數(shù)據(jù)查看效率。
可視化的原理和汽車儀表盤類似,如果只是一連串的數(shù)字顯示在屏幕上,相信大部分人一看到一連串的數(shù)字,第一感覺是眼花,而且也很難將數(shù)據(jù)與具體的情況聯(lián)系起來(lái)。
而有了儀表盤后,通過(guò)儀表盤的指針偏離幅度及指針指向的區(qū)域顏色,能夠一目了然地看出當(dāng)前的狀態(tài)是低速、中速還是高速。
可視化相比簡(jiǎn)單的數(shù)據(jù)羅列,具備下面這些優(yōu)點(diǎn):
能夠直觀地看到數(shù)據(jù)的相關(guān)屬性,例如,汽車儀表盤中的數(shù)據(jù)最小值是0,最大是100,單位是MPH。
能夠?qū)?shù)據(jù)的含義展示出來(lái),例如汽車儀表盤中不同速度的顏色指示。
能夠?qū)㈥P(guān)聯(lián)數(shù)據(jù)整合一起展示,例如汽車儀表盤的速度和里程
測(cè)試平臺(tái)
測(cè)試平臺(tái)核心的職責(zé)當(dāng)然就是測(cè)試了,包括單元測(cè)試、集成測(cè)試、接口測(cè)試、性能測(cè)試等,都可以在測(cè)試平臺(tái)來(lái)完成。
測(cè)試平臺(tái)的核心目的是提升測(cè)試效率,從而提升產(chǎn)品質(zhì)量,其設(shè)計(jì)關(guān)鍵就是自動(dòng)化。傳統(tǒng)的測(cè)試方式是測(cè)試人員手工執(zhí)行測(cè)試用例,測(cè)試效率低,重復(fù)的工作多。
通過(guò)測(cè)試平臺(tái)提供的自動(dòng)化能力,測(cè)試用例能夠重復(fù)執(zhí)行,無(wú)須人工參與,大大提升了測(cè)試效率。
為了達(dá)到“自動(dòng)化”的目標(biāo),測(cè)試平臺(tái)的基本架構(gòu)如下圖所示。
- 用例管理
測(cè)試自動(dòng)化的主要手段就是通過(guò)腳本或者代碼來(lái)進(jìn)行測(cè)試,例如單元測(cè)試用例是代碼、接口測(cè)試用例可以用Python來(lái)寫、可靠性測(cè)試用例可以用Shell來(lái)寫。
為了能夠重復(fù)執(zhí)行這些測(cè)試用例,測(cè)試平臺(tái)需要將用例管理起來(lái),管理的維度包括業(yè)務(wù)、系統(tǒng)、測(cè)試類型、用例代碼。例如,網(wǎng)購(gòu)業(yè)務(wù)的訂單系統(tǒng)的接口測(cè)試用例。 - 資源管理
測(cè)試用例要放到具體的運(yùn)行環(huán)境中才能真正執(zhí)行,運(yùn)行環(huán)境包括硬件(服務(wù)器、手機(jī)、平板電腦等)、軟件(操作系統(tǒng)、數(shù)據(jù)庫(kù)、Java虛擬機(jī)等)、業(yè)務(wù)系統(tǒng)(被測(cè)試的系統(tǒng))。
除了性能測(cè)試,一般的自動(dòng)化測(cè)試對(duì)性能要求不高,所以為了提升資源利用率,大部分的測(cè)試平臺(tái)都會(huì)使用虛擬技術(shù)來(lái)充分利用硬件資源,如虛擬機(jī)、Docker等技術(shù)。 - 任務(wù)管理
任務(wù)管理的主要職責(zé)是將測(cè)試用例分配到具體的資源上執(zhí)行,跟蹤任務(wù)的執(zhí)行情況。任務(wù)管理是測(cè)試平臺(tái)設(shè)計(jì)的核心,它將測(cè)試平臺(tái)的各個(gè)部分串聯(lián)起來(lái)從而完成自動(dòng)化測(cè)試。 - 數(shù)據(jù)管理
測(cè)試任務(wù)執(zhí)行完成后,需要記錄各種相關(guān)的數(shù)據(jù)(例如,執(zhí)行時(shí)間、執(zhí)行結(jié)果、用例執(zhí)行期間的CPU、內(nèi)存占用情況等),這些數(shù)據(jù)具備下面這些作用:
展現(xiàn)當(dāng)前用例的執(zhí)行情況。
作為歷史數(shù)據(jù),方便后續(xù)的測(cè)試與歷史數(shù)據(jù)進(jìn)行對(duì)比,從而發(fā)現(xiàn)明顯的變化趨勢(shì)。例如,某個(gè)版本后單元測(cè)試覆蓋率從90%下降到70%。
作為大數(shù)據(jù)的一部分,可以基于測(cè)試的任務(wù)數(shù)據(jù)進(jìn)行一些數(shù)據(jù)挖掘。例如,某個(gè)業(yè)務(wù)一年執(zhí)行了10000個(gè)用例測(cè)試,另外一個(gè)業(yè)務(wù)只執(zhí)行了1000個(gè)用例測(cè)試,兩個(gè)業(yè)務(wù)規(guī)模和復(fù)雜度差不多,為何差異這么大?
數(shù)據(jù)平臺(tái)
數(shù)據(jù)平臺(tái)的核心職責(zé)主要包括三部分:數(shù)據(jù)管理、數(shù)據(jù)分析和數(shù)據(jù)應(yīng)用。每一部分又包含更多的細(xì)分領(lǐng)域,詳細(xì)的數(shù)據(jù)平臺(tái)架構(gòu)如下圖所示。
- 數(shù)據(jù)管理
數(shù)據(jù)管理包含數(shù)據(jù)采集、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)訪問和數(shù)據(jù)安全四個(gè)核心職責(zé),是數(shù)據(jù)平臺(tái)的基礎(chǔ)功能。
數(shù)據(jù)采集:從業(yè)務(wù)系統(tǒng)搜集各類數(shù)據(jù)。例如,日志、用戶行為、業(yè)務(wù)數(shù)據(jù)等,將這些數(shù)據(jù)傳送到數(shù)據(jù)平臺(tái)。
數(shù)據(jù)存儲(chǔ):將從業(yè)務(wù)系統(tǒng)采集的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)平臺(tái),用于后續(xù)數(shù)據(jù)分析。
數(shù)據(jù)訪問:負(fù)責(zé)對(duì)外提供各種協(xié)議用于讀寫數(shù)據(jù)。例如,SQL、Hive、Key-Value等讀寫協(xié)議。
數(shù)據(jù)安全:通常情況下數(shù)據(jù)平臺(tái)都是多個(gè)業(yè)務(wù)共享的,部分業(yè)務(wù)敏感數(shù)據(jù)需要加以保護(hù),防止被其他業(yè)務(wù)讀取甚至修改,因此需要設(shè)計(jì)數(shù)據(jù)安全策略來(lái)保護(hù)數(shù)據(jù)。 - 數(shù)據(jù)分析
數(shù)據(jù)分析包括數(shù)據(jù)統(tǒng)計(jì)、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等幾個(gè)細(xì)分領(lǐng)域。
數(shù)據(jù)統(tǒng)計(jì):根據(jù)原始數(shù)據(jù)統(tǒng)計(jì)出相關(guān)的總覽數(shù)據(jù)。例如,PV、UV、交易額等。
數(shù)據(jù)挖掘:數(shù)據(jù)挖掘這個(gè)概念本身含義可以很廣,為了與機(jī)器學(xué)習(xí)和深度學(xué)習(xí)區(qū)分開,這里的數(shù)據(jù)挖掘主要是指?jìng)鹘y(tǒng)的數(shù)據(jù)挖掘方式。
例如,有經(jīng)驗(yàn)的數(shù)據(jù)分析人員基于數(shù)據(jù)倉(cāng)庫(kù)構(gòu)建一系列規(guī)則來(lái)對(duì)數(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ù)平臺(tái)在實(shí)現(xiàn)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)時(shí),需要針對(duì)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)獨(dú)立進(jìn)行設(shè)計(jì)。 - 數(shù)據(jù)應(yīng)用
數(shù)據(jù)應(yīng)用很廣泛,既包括在線業(yè)務(wù),也包括離線業(yè)務(wù)。例如,推薦、廣告等屬于在線應(yīng)用,報(bào)表、欺詐檢測(cè)、異常檢測(cè)等屬于離線應(yīng)用。
數(shù)據(jù)應(yīng)用能夠發(fā)揮價(jià)值的前提是需要有“大數(shù)據(jù)”,只有當(dāng)數(shù)據(jù)的規(guī)模達(dá)到一定程度,基于數(shù)據(jù)的分析、挖掘才能發(fā)現(xiàn)有價(jià)值的規(guī)律、現(xiàn)象、問題等。
如果數(shù)據(jù)沒有達(dá)到一定規(guī)模,通常情況下做好數(shù)據(jù)統(tǒng)計(jì)就足夠了,尤其是很多初創(chuàng)企業(yè),無(wú)須一開始就參考BAT來(lái)構(gòu)建自己的數(shù)據(jù)平臺(tái)。
管理平臺(tái)
管理平臺(tái)的核心職責(zé)就是權(quán)限管理,無(wú)論是業(yè)務(wù)系統(tǒng)(例如,淘寶網(wǎng))、中間件系統(tǒng)(例如,消息隊(duì)列Kafka),還是平臺(tái)系統(tǒng)(例如,運(yùn)維平臺(tái)),都需要進(jìn)行管理。
如果每個(gè)系統(tǒng)都自己來(lái)實(shí)現(xiàn)權(quán)限管理,效率太低,重復(fù)工作很多,因此需要統(tǒng)一的管理平臺(tái)來(lái)管理所有的系統(tǒng)的權(quán)限。
權(quán)限管理主要分為兩部分:身份認(rèn)證、權(quán)限控制,其基本架構(gòu)如下圖所示。
- 身份認(rèn)證
確定當(dāng)前的操作人員身份,防止非法人員進(jìn)入系統(tǒng)。例如,不允許匿名用戶進(jìn)入系統(tǒng)。為了避免每個(gè)系統(tǒng)都自己來(lái)管理用戶,通常情況下都會(huì)使用企業(yè)賬號(hào)來(lái)做統(tǒng)一認(rèn)證和登錄。 - 權(quán)限控制
根據(jù)操作人員的身份確定操作權(quán)限,防止未經(jīng)授權(quán)的人員進(jìn)行操作。例如,不允許研發(fā)人員進(jìn)入財(cái)務(wù)系統(tǒng)查看別人的工資。
關(guān)鍵詞:平臺(tái),技術(shù),模板