優(yōu)秀的架構(gòu)師的核心能力模型包含:編程、性能調(diào)優(yōu)、架構(gòu)設(shè)計等能力等。
編程能力
對工程師而言,編程是最基礎(chǔ)的能力,必備技能,其本質(zhì)是一個翻譯能力,將業(yè)務(wù)需求翻譯成機器能懂的語言。
提升編程能力的書籍有很多,精通面向?qū)ο蠛驮O(shè)計模式是高效編程的基礎(chǔ)。初級工程師應(yīng)該多寫代碼、多看代碼。找高手做CodeReview,也是提升編程水平的捷徑。
常見的編程范圍:
數(shù)據(jù)結(jié)構(gòu)算法,比如:經(jīng)典排序:插入排序、冒泡排序、快排(分劃交換排序)、直接選擇排序、堆排序、合并排序等。
高級語言特性:JVM、類裝載機制、多線程并發(fā)
設(shè)計模式:常見的單例、工廠等。
UML建模:詳細設(shè)計必備。
網(wǎng)絡(luò)與安全:網(wǎng)絡(luò)協(xié)議、安全等。
開源系列:spring、maven、redis、memcached、activeMQ等。
調(diào)試能力
本質(zhì)上講,工程師們通過不斷調(diào)試可以持續(xù)強化其通過靜態(tài)代碼去預(yù)測運行狀態(tài)的能力。所以調(diào)試能力也是工程師編程能力提升的關(guān)鍵手段。
調(diào)試能力是項目能否按時、高質(zhì)量提交的關(guān)鍵。即使一個稍具復(fù)雜度的項目,大部分工程師也無法一次性準確無誤的完成。大項目都是通過不斷地調(diào)試進行優(yōu)化和糾錯的。所以調(diào)試能力是不可或缺的能力。
編譯部署能力
編譯并在線上部署運行程序是系統(tǒng)上線的最后一個環(huán)節(jié),隨著SOA架構(gòu)的普及以及業(yè)務(wù)復(fù)雜度的增加,大部分系統(tǒng)只是一個完整業(yè)務(wù)的一個環(huán)節(jié),因此,本地編譯和運行并不能完全模擬系統(tǒng)在線運行。為了快速驗證所編寫程序的正確性,編譯并在線上部署就成了必要環(huán)節(jié)。所以編譯部署能力是一個必備技能。
讓盤根錯節(jié)的眾多子系統(tǒng)運行起來是個不小的挑戰(zhàn)。得益于SOA架構(gòu)的普及以及大量編譯、部署工具的發(fā)展,編譯部署的門檻已經(jīng)大大降低。基于應(yīng)用層進行開發(fā)的公司,已經(jīng)很少有“編譯工程師”的角色了。但是對于初級工程師而言,編譯部署仍然不是一個輕松的事情。
性能優(yōu)化能力
衡量一個系統(tǒng)成功的一個重要指標是使用量。隨著使用量的增加和業(yè)務(wù)復(fù)雜度的增加,大部分系統(tǒng)最終都會碰到性能問題。性能優(yōu)化能力是一個綜合能力。因為:
影響系統(tǒng)性能的因素眾多,包括:數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、虛擬機、CPU、存儲、網(wǎng)絡(luò)等。為了對系統(tǒng)性能進行調(diào)優(yōu),架構(gòu)師需要掌握所有相關(guān)的技術(shù)。
精通性能優(yōu)化意味著深刻理解可用性、可靠性、一致性、可維護性、可擴展性等的本質(zhì)。
性能調(diào)優(yōu)集中在:JVM調(diào)優(yōu),線程池調(diào)優(yōu)、SQL調(diào)優(yōu)、索引優(yōu)化、數(shù)據(jù)庫垂直拆分等。
在線運維能力
如果說性能優(yōu)化能力體現(xiàn)的是架構(gòu)師的靜態(tài)思考能力,在線運維能力考驗的就是動態(tài)反應(yīng)能力。殘酷的現(xiàn)實是,無論程序多么完美,Bug永遠存在。與此同時,職位越高、責任越大,很多架構(gòu)師需要負責非常重要的在線系統(tǒng)。對于線上故障,如果不能提前預(yù)防以及快速解決,損失可能不堪設(shè)想,所以在線運維能力是優(yōu)秀架構(gòu)師的必備技能。
為了對線上故障進行快速處理,標準化的監(jiān)控、上報、升級,以及基本應(yīng)對機制當然很重要。通過所觀察到的現(xiàn)象,快速定位、緩解以及解決相關(guān)癥狀也相當關(guān)鍵。這要求架構(gòu)師對故障系統(tǒng)的業(yè)務(wù)、技術(shù)具備通盤解讀能力。解決線上故障的架構(gòu)師就好比一個在參加比賽F1的車手。賽車手必須要了解自身、賽車、對手、同伴、天氣、場地等所有因素,快速決策,不斷調(diào)整。架構(gòu)師必須要了解所有技術(shù)細節(jié)、業(yè)務(wù)細節(jié)、處理規(guī)范、同伴等眾多因素,快速決斷,迅速調(diào)整。
在線運維本質(zhì)上是一個強化學(xué)習(xí)的過程。很多能力都可以通過看書、查資料來完成,但在線運維能力往往需要大量的實踐來提升。
架構(gòu)設(shè)計能力:業(yè)務(wù)和技術(shù)
工程師抱怨產(chǎn)品經(jīng)理的故事屢見不鮮,抱怨最多的主要原因來自于需求的頻繁變更。需求變更主要有兩個來源:第一個原因是市場改變或戰(zhàn)略調(diào)整,第二個原因是偽需求。對于第一個原因,無論是工程師還是產(chǎn)品經(jīng)理,都只能無奈的接受。優(yōu)秀的架構(gòu)師應(yīng)該具備減少第二種原因所導(dǎo)致的需求變更的概率。
偽需求的產(chǎn)生有兩個原因:
第一個原因是需求傳遞變形。從信息論的角度來講,任何溝通都是一個編碼和解碼的過程。典型的需求從需求方到產(chǎn)品經(jīng)理,最終到開發(fā)工程師,最少需要經(jīng)歷三次編碼和解碼過程。而信息的每一次傳遞都存在一些損失并帶來一些噪音,這導(dǎo)致有些時候開發(fā)出來的產(chǎn)品完全對不上需求。此外,需求方和產(chǎn)品經(jīng)理在需求可行性、系統(tǒng)可靠性,開發(fā)成本控制方面的把控比較弱,也會導(dǎo)致需求變形。
第二個原因就是需求方完全沒有想好自己的需求。
優(yōu)秀的架構(gòu)師應(yīng)該具備辨別真?zhèn)涡枨蟮哪芰?。?yīng)該花時間去了解客戶的真實業(yè)務(wù)場景,具備較強的業(yè)務(wù)抽象能力,洞悉客戶的真實需求。系統(tǒng)的真正實施方是工程師,在明確客戶真實需求后,高明的架構(gòu)師應(yīng)該具備準確判斷項目對可行性、可靠性、可用性等方面的要求,并能具備成本意識。最后,由于需求與在線系統(tǒng)的緊耦合關(guān)系,掌握在線系統(tǒng)的各種細節(jié)也是成功的業(yè)務(wù)架構(gòu)的關(guān)鍵。隨著級別的提升,工程師所面對的需求會越來越抽象。承接抽象需求,提供抽象架構(gòu)是架構(gòu)師走向卓越的必經(jīng)之途。
市場上有一些關(guān)于如何成為架構(gòu)師的書,大家可以參考。但是架構(gòu)能力的提升,實踐可能是更重要的方式。業(yè)務(wù)架構(gòu)師應(yīng)該關(guān)注客戶的痛點而不是PRD文檔,應(yīng)該深入關(guān)注真實業(yè)務(wù)。掌握現(xiàn)存系統(tǒng)的大量技術(shù)和業(yè)務(wù)細節(jié)也是業(yè)務(wù)架構(gòu)師的必備知識。
技術(shù)架構(gòu)設(shè)計主要集中在:架構(gòu)選型、中間件掌握、負載均衡、大數(shù)據(jù)性能等領(lǐng)域。
最后為大家附上一套最新Java架構(gòu)師在線視頻,希望大家在進階的道路上學(xué)有所成,資源可以在北大青鳥長沙麓谷校區(qū)IT培訓(xùn)官網(wǎng)在線客服回復(fù)“Java架構(gòu)師資源”