架構(gòu)設(shè)計(jì)70-質(zhì)量管理02-性能優(yōu)化03-規(guī)范

架構(gòu)設(shè)計(jì)系列文章,請參見連接图谷。

背景

一個(gè)架構(gòu)師在平時(shí)工作中的重點(diǎn)注意的工作內(nèi)容蔗崎,就指明架構(gòu)師所設(shè)計(jì)的產(chǎn)品架構(gòu)的各方面特性。重點(diǎn)是數(shù)據(jù)庫的架構(gòu)師會將認(rèn)為所有的工作核心就是數(shù)據(jù)庫促绵。重點(diǎn)在運(yùn)營模式的架構(gòu)師會認(rèn)為所有的工作都是業(yè)務(wù)模式,運(yùn)營方法。

再加上公司整體規(guī)劃與方向有著非常明顯的弱化技術(shù)的要求败晴,架構(gòu)師為了KPI浓冒、OKR放棄對產(chǎn)品架構(gòu)的關(guān)心。就會造成整個(gè)公司少了架構(gòu)師還是正常運(yùn)轉(zhuǎn)的情況位衩。但是做一個(gè)真是的比喻裆蒸,就如同下圖一樣:

少了技術(shù)型架構(gòu)師的驅(qū)動(dòng)的公司熔萧,就像上圖一樣糖驴。在不做變更的時(shí)候會使用的很正常,很穩(wěn)定佛致。但是如果稍微做一點(diǎn)變更整個(gè)系統(tǒng)就會進(jìn)入崩潰狀態(tài)贮缕。

每一個(gè)上線的產(chǎn)品,最主要的問題就是穩(wěn)定性俺榆。為了應(yīng)用能夠穩(wěn)定的提供服務(wù)感昼,需要考慮很多內(nèi)容。其中性能優(yōu)化就是很重要的一個(gè)考慮項(xiàng)罐脊。性能優(yōu)化是事后解決性能問題的方法定嗓,也有很多事前解決性能問題的方法。下面整體介紹性能優(yōu)化的各個(gè)方面萍桌。

前期規(guī)劃

在做一件事情之前宵溅,需要對這件事情有深入的認(rèn)識與理解。然后基于認(rèn)識和理解之后上炎,對事情進(jìn)行分析恃逻。分析后做出整體做事的規(guī)劃或方法,然后再著手進(jìn)行實(shí)施藕施。

根據(jù)上面做事方式的指導(dǎo)寇损。先對性能優(yōu)化這件事情進(jìn)行整體的規(guī)劃。因?yàn)樾阅軆?yōu)化是項(xiàng)目實(shí)施過程中的一個(gè)步驟裳食,所以在這里將說明在項(xiàng)目實(shí)施過程與性能優(yōu)化之間的關(guān)系:

項(xiàng)目實(shí)施規(guī)劃

上圖中淺藍(lán)色部分是項(xiàng)目管理過程中要做的矛市。深藍(lán)色部分是性能優(yōu)化設(shè)計(jì)到的步驟。藍(lán)黑色部分是項(xiàng)目研發(fā)過程中的內(nèi)容诲祸。在上產(chǎn)品環(huán)境后浊吏,肯定還需要各種各樣的性能調(diào)優(yōu)工作。例如:最近幾年淘寶烦绳,京東都在做《全鏈路壓測》的事情卿捎。所以這件事情需要一直做下去。

  • 調(diào)研
    在整體項(xiàng)目實(shí)施規(guī)劃中径密,非功能需求是一個(gè)很容易被忽略的部分午阵。我們在做設(shè)計(jì)的一個(gè)基本依據(jù)就是非功能需求。有了它之后就可以估算出系統(tǒng)的整體性能要求大概范圍。根據(jù)這個(gè)范圍以及成本底桂、時(shí)間約束就可以對系統(tǒng)中需要使用的技術(shù)植袍,不使用的技術(shù)做出一個(gè)前期規(guī)劃與設(shè)計(jì)。

    針對產(chǎn)品型的性能數(shù)據(jù)評估籽懦。因?yàn)楫a(chǎn)品是已經(jīng)上線的于个,所以,就可以根據(jù)現(xiàn)有的數(shù)據(jù)以及即將來到的運(yùn)營策劃數(shù)據(jù)進(jìn)行性能數(shù)據(jù)的評估暮顺。這里就需要了解現(xiàn)有系統(tǒng)的使用情況數(shù)據(jù)厅篓,性能、穩(wěn)定性表現(xiàn)情況之后捶码。在作出相關(guān)的評估與設(shè)計(jì)羽氮。

  • 設(shè)計(jì)
    設(shè)計(jì)階段中根據(jù)前面收集的功能需求,非功能需求以及約束進(jìn)行分析惫恼。分析出問題域中的核心問題档押,周邊問題并將這些問題域的問題使用解決域提供的工具進(jìn)行解決。解決域中的工具取決于架構(gòu)師準(zhǔn)備了那些工具祈纯。所以令宿,在同一個(gè)問題域下,架構(gòu)師的解決域確定了解決的方式腕窥。

    因?yàn)樾阅苁窃O(shè)計(jì)的依據(jù)粒没,而性能有事從非功能需求來的。所以油昂,對性能的交付也是需要有驗(yàn)收過程與驗(yàn)收方法的革娄。在設(shè)計(jì)過程中需要將性能的驗(yàn)收方法,驗(yàn)收標(biāo)準(zhǔn)一并進(jìn)行設(shè)計(jì)冕碟。

    在產(chǎn)品型的性能設(shè)計(jì)過程中是有相對應(yīng)的《性能驗(yàn)收軟件架構(gòu)》需要同時(shí)進(jìn)行設(shè)計(jì)的拦惋。因?yàn)樾阅茯?yàn)收也是一套獨(dú)立的軟件系統(tǒng)。不過這套軟件系統(tǒng)的目標(biāo)就是幫助業(yè)務(wù)系統(tǒng)達(dá)到更高的性能指標(biāo)而存在的安寺。

  • 開發(fā)
    開發(fā)過程中需要有規(guī)范的流程厕妖。從代碼質(zhì)量到交付方式,都需要一套標(biāo)準(zhǔn)出來挑庶。這樣就可以有效的保證產(chǎn)品可以按時(shí)按點(diǎn)保質(zhì)的方式進(jìn)行交付言秸。

  • 監(jiān)控
    在產(chǎn)品上線后運(yùn)維比較關(guān)注的是APM,開發(fā)比較關(guān)注的是Tracing迎捺。監(jiān)控的主要目的是為整個(gè)產(chǎn)品提供運(yùn)行時(shí)數(shù)據(jù)举畸。因?yàn)橹笆褂酶鞣N方法評估的內(nèi)容,都是通過不準(zhǔn)確手段獲取到的數(shù)據(jù)凳枝。真實(shí)的數(shù)據(jù)就可以體現(xiàn)出之前評估節(jié)點(diǎn)所做的評估的偏差抄沮“虾耍可以利用這個(gè)偏差對系統(tǒng)進(jìn)行調(diào)整。也可以利用這個(gè)偏差對評估數(shù)據(jù)進(jìn)行校正叛买,以使之后的評估中的數(shù)據(jù)會更加準(zhǔn)確砂代。

    在提供產(chǎn)品的性能優(yōu)化數(shù)據(jù)之外,還需要在系統(tǒng)中制定多維度的《度量指標(biāo)》用來幫助之后進(jìn)行各方面的評估率挣。例如:用戶轉(zhuǎn)化率刻伊,產(chǎn)品銷售率,熱點(diǎn)頁面等等椒功。這些數(shù)據(jù)對之后的運(yùn)維捶箱,運(yùn)營都是有著非常大的幫助。

  • 調(diào)優(yōu)
    這個(gè)是前期調(diào)優(yōu)蛾茉,在項(xiàng)目制或者產(chǎn)品制第一次上線之前進(jìn)行調(diào)優(yōu)讼呢。還有后期調(diào)優(yōu)撩鹿,即產(chǎn)品上線之后根據(jù)使用情況對系統(tǒng)進(jìn)行有針對性的調(diào)整谦炬。這兩類調(diào)整都是以性能指標(biāo)為輸入,以達(dá)到性能指標(biāo)要求為輸出的节沦。所以键思,在下面會對其中每一步再做詳細(xì)討論。

  • 上線
    在調(diào)優(yōu)過程中可能會對系統(tǒng)的局部架構(gòu)甫贯,部署設(shè)計(jì)吼鳞,數(shù)據(jù)庫設(shè)計(jì)等作出調(diào)整。所以叫搁,在上線時(shí)需要需要考慮針對這些變化怎樣才能將變化推到生產(chǎn)環(huán)境赔桌。基本上就考慮三種類型的升級:部署升級渴逻,數(shù)據(jù)升級疾党,服務(wù)升級。

    • 部署升級:部署過程進(jìn)行了升級惨奕,比如說之前直接部署在邏輯環(huán)境上雪位,現(xiàn)在變成部署在K8S上。
    • 數(shù)據(jù)升級:數(shù)據(jù)結(jié)構(gòu)發(fā)生了變更梨撞,需要有數(shù)據(jù)結(jié)構(gòu)上的升級工作雹洗。
    • 服務(wù)升級:服務(wù)內(nèi)部實(shí)現(xiàn)發(fā)生了變化,需要同時(shí)運(yùn)行老版本卧波,并驗(yàn)證新版本的要求时肿。

實(shí)施過程

性能調(diào)優(yōu)和壓力測試有很多內(nèi)容都是可以重復(fù)利用的。例如測試時(shí)需要編寫測試方案港粱,測試計(jì)劃螃成。都可以在性能調(diào)優(yōu)時(shí)使用。下面是性能調(diào)優(yōu)的實(shí)施步驟:

具體實(shí)施
  • 性能目標(biāo)
    不管做什么,第一步都是要明確需要做什么锈颗。性能目標(biāo)在上面已經(jīng)可以通過評估顷霹,實(shí)際數(shù)據(jù)等獲取到性能目標(biāo)。

  • 環(huán)境準(zhǔn)備
    現(xiàn)在的項(xiàng)目基本上都是用微服務(wù)的方式進(jìn)行發(fā)布击吱。所以環(huán)境準(zhǔn)備階段需要知道服務(wù)的具體部署情況淋淀。需要知道哪些開源組件需要部署,哪些服務(wù)需要配置覆醇。并且還需要設(shè)置性能環(huán)境和發(fā)送性能請求的測試環(huán)境之間的部署結(jié)構(gòu)朵纷,使性能驗(yàn)證過程中受到的外界干擾最小化。

    根據(jù)之前的目標(biāo)對性能環(huán)境進(jìn)行部署設(shè)計(jì)永脓。在性能環(huán)境中的部署設(shè)計(jì)最終可以推到生產(chǎn)環(huán)境袍辞,但是需要針對性能指標(biāo)進(jìn)行相關(guān)的節(jié)點(diǎn)數(shù)評估,服務(wù)器上的硬件環(huán)境的評估常摧。

    需要根據(jù)并發(fā)量考慮性能環(huán)境和測試環(huán)境之間的帶寬搅吁。以及測試環(huán)境的配置,以保證并發(fā)量可以達(dá)到性能要求的水平落午。

  • 工具準(zhǔn)備
    工具準(zhǔn)備需要準(zhǔn)備壓測工具和監(jiān)控工具谎懦。一些壓測工具順帶就可以做監(jiān)控的事情但是很多時(shí)候還是要進(jìn)行獨(dú)立準(zhǔn)備±U可以使用JMeter界拦、Load Runner作為壓測工具。也可以使用分布式性能測試工具控制多臺主機(jī)進(jìn)行測試梗劫。

    監(jiān)控工具要滿足即可以檢測到APM又可以檢測到Tracing的內(nèi)容享甸。并且可以監(jiān)控多項(xiàng)數(shù)據(jù),監(jiān)控主機(jī)性能梳侨,監(jiān)控?cái)?shù)據(jù)庫性能蛉威,監(jiān)控中間件性能等。

  • 測試方法
    即需要驗(yàn)證的場景猫妙,以及驗(yàn)證這些場景所需要的腳本過程瓷翻。在測試計(jì)劃中會編寫要測試的場景,并對場景中的請求內(nèi)容進(jìn)行設(shè)計(jì)割坠。

  • 優(yōu)化確認(rèn)
    已經(jīng)有了工具齐帚,有了測試方法,并且有運(yùn)行環(huán)境彼哼。就可以進(jìn)行測試了对妄,測試會形成測試結(jié)果。再針對測試結(jié)果有針對性的優(yōu)化敢朱。例如某個(gè)方法執(zhí)行時(shí)間過長剪菱,就可以想辦法降低這個(gè)方法的執(zhí)行時(shí)間摩瞎。數(shù)據(jù)庫查詢時(shí)間過長就可以優(yōu)化數(shù)據(jù)庫查詢。

    在優(yōu)化完之后孝常,在對優(yōu)化的內(nèi)容進(jìn)行一遍性能驗(yàn)證旗们。如果驗(yàn)證通過則進(jìn)行下一步。如果沒有通過則构灸,在此優(yōu)化上渴。往復(fù)循環(huán)這個(gè)過程指導(dǎo)性能驗(yàn)證通過,就可以進(jìn)行進(jìn)入到下一步喜颁。

  • 功能測試
    在做完性能調(diào)優(yōu)之后稠氮,還是需要再進(jìn)行一遍功能驗(yàn)證的。因?yàn)樵趦?yōu)化過程中可能對之前的功能產(chǎn)生了未知的影響半开。所以需要在性能調(diào)優(yōu)完成之后再進(jìn)行一遍功能驗(yàn)證隔披。

總結(jié)

選用性能指標(biāo)是非常重要的,這樣一眼看過去就知道哪里有問題寂拆。在有目標(biāo)的情況下進(jìn)行奢米,針對目標(biāo)進(jìn)行優(yōu)化的效率在開發(fā)過程中猜測可能有性能問題的點(diǎn)并優(yōu)化的效率要高的多。在實(shí)施這套方法時(shí)漓库,也可以享受性能提升帶來的成就感恃慧。

參考:

如何制定 Java 性能調(diào)優(yōu)標(biāo)準(zhǔn)?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渺蒿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彪薛,更是在濱河造成了極大的恐慌茂装,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善延,死亡現(xiàn)場離奇詭異少态,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)易遣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門彼妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豆茫,你說我怎么就攤上這事侨歉。” “怎么了揩魂?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵幽邓,是天一觀的道長。 經(jīng)常有香客問我火脉,道長牵舵,這世上最難降的妖魔是什么柒啤? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮畸颅,結(jié)果婚禮上担巩,老公的妹妹穿的比我還像新娘。我一直安慰自己没炒,他們只是感情好兵睛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窥浪,像睡著了一般祖很。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漾脂,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天假颇,我揣著相機(jī)與錄音,去河邊找鬼骨稿。 笑死笨鸡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坦冠。 我是一名探鬼主播形耗,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辙浑!你這毒婦竟也來了激涤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤倦踢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后侠草,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辱挥,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年边涕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晤碘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡功蜓,死狀恐怖园爷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霞赫,我是刑警寧澤腮介,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站端衰,受9級特大地震影響叠洗,放射性物質(zhì)發(fā)生泄漏甘改。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一灭抑、第九天 我趴在偏房一處隱蔽的房頂上張望十艾。 院中可真熱鬧,春花似錦腾节、人聲如沸忘嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盗尸。三九已至酬诀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間史辙,已是汗流浹背份氧。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工亮航, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留同辣,地道東北人拷姿。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像旱函,于是被迫代替她去往敵國和親响巢。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容