架構(gòu)師之路一-架構(gòu)師入門指引

點擊箭頭處
“JAVA日知錄”
,關(guān)注并星標(biāo)喲!!
導(dǎo)讀:本系列文章教你怎么樣成為一名架構(gòu)師,而本篇文章則帶你先認識一下什么是架構(gòu)師,架構(gòu)師的工作是什么?
為什么需要架構(gòu)師
為什么需要架構(gòu)師或者說架構(gòu)師能解決什么樣的問題,我們不妨先從兩個不同的視角來看一下。
技術(shù)高手的視角
小張作為一名擁有3-5年開發(fā)經(jīng)驗的技術(shù)高手,他經(jīng)常會思考以下幾個問題:
? 我已經(jīng)工作好幾年了,將來如何發(fā)展?是要一直寫代碼嗎?
? 是不是要往上走就得做管理?
? 在中國35歲之后不能再做技術(shù)了嗎?
? 繼續(xù)做技術(shù)是不是待遇上不如做管理?
? 如果繼續(xù)做技術(shù)我還要學(xué)習(xí)什么?
? 如果改做管理我應(yīng)該如何轉(zhuǎn)型?
? 我適合做技術(shù)還是做管理,還是別的什么?
軟件企業(yè)的視角
軟件企業(yè)在的產(chǎn)品開發(fā)過程中也經(jīng)常會思考以下幾個問題:
? 為什么我們的產(chǎn)品交付周期為什么需要那么長時間?競爭對手可能只要半年,為什么我們需要1年?
? 為什么我們的產(chǎn)品總有這樣那樣的質(zhì)量問題?程序員在開發(fā)的時候為什么不好好把控質(zhì)量,上完線出這樣那樣的問題?
? 為什么當(dāng)初這個產(chǎn)品會選擇這樣的技術(shù)路線,技術(shù)選型的時候為什么不慎重?導(dǎo)致現(xiàn)在要用另一種技術(shù)推翻重做,帶來巨大的人力成本?
? 網(wǎng)站的用戶越來越多,性能非常吃緊,想擴展卻很難?
? 為什么這個產(chǎn)品的代碼這么難維護,找誰改都說不敢動?
? 究竟誰能在技術(shù)上保證我們的產(chǎn)品或項目取得成功?
從不同的角度出發(fā)會引發(fā)出一連串的疑惑,那么能解決以上疑惑的角色就是系統(tǒng)架構(gòu)師,也可以說我們需要系統(tǒng)架構(gòu)師來解決這些問題。
架構(gòu)、架構(gòu)設(shè)計與架構(gòu)師的相關(guān)概念
架構(gòu)
架構(gòu),又名軟件架構(gòu),也稱為軟件體系結(jié)構(gòu)。軟件架構(gòu)就是一個系統(tǒng)的藍圖,是一種設(shè)計方案,將客戶的不同需求抽象成為抽象組件,并且能夠描述這些抽象組件之間的通信和調(diào)用,及包括一些內(nèi)部的關(guān)鍵機制。它有下面三個關(guān)鍵概念:
組件 通常是指開發(fā)或部署的一個單元,根據(jù)考查對象的大小,組件的粒度也有所區(qū)別。在做架構(gòu)的時候我們需要把握好這個力度,不能陷入代碼細節(jié),如果過度的關(guān)注代碼層面的力度,那對系統(tǒng)的整體把握可能會出問題。 組件與組件之間的關(guān)系 是架構(gòu)要考慮的重要因素,來自系統(tǒng)外部的請求通常是由多個組件協(xié)作完成的,系統(tǒng)內(nèi)部結(jié)構(gòu)是否良好,很大程度上取決于組件之間的關(guān)系。 關(guān)鍵機制 是指影響到系統(tǒng)可用性、安全性、性能等重要非功能特性的一些技術(shù)方案,比如技術(shù)選型、關(guān)鍵設(shè)計、處理流程等等。
系統(tǒng)架構(gòu) vs 架構(gòu)設(shè)計
系統(tǒng)架構(gòu) 是指系統(tǒng)在運行期的實際內(nèi)部結(jié)構(gòu),架構(gòu)設(shè)計是對這種內(nèi)部結(jié)構(gòu)的書面描述。
架構(gòu)設(shè)計 是以需求分析為輸入,通過架構(gòu)師的分析,產(chǎn)出架構(gòu)設(shè)計資料,用于指導(dǎo)后續(xù)概要設(shè)計、詳細設(shè)計、開發(fā)、測試、部署、上線運行。所以說如果架構(gòu)設(shè)計做的不好或者沒做架構(gòu)設(shè)計,那么后面環(huán)節(jié)的開發(fā)測試部署可能會出各種各樣的問題。
架構(gòu)設(shè)計 vs 概要設(shè)計
架構(gòu)設(shè)計是以組件的視角來思考系統(tǒng)如何分解,并定義分解出來的組件之間的關(guān)系。概要設(shè)計是從功能模塊的視角來對系統(tǒng)進行分解,并定義這些功能模塊之間的關(guān)系。現(xiàn)在提的比較少,一般做完架構(gòu)設(shè)計直接做詳細設(shè)計即可!
以用戶登錄為例,從架構(gòu)設(shè)計的角度可能就只是一個用戶服務(wù)組件,而從概要設(shè)計的角度可能就是前端頁面、用戶接口、數(shù)據(jù)庫等一系列功能的設(shè)計。
架構(gòu)師
架構(gòu)師是負責(zé)系統(tǒng)架構(gòu)的人、團隊或組織,架構(gòu)師是團隊技術(shù)領(lǐng)導(dǎo),從技術(shù)角度,承擔(dān)項目技術(shù)的成功或失敗的責(zé)任。在其領(lǐng)域內(nèi)能夠全局把握的人,能夠給出其負責(zé)范圍內(nèi)的總體設(shè)計,并能解決關(guān)鍵問題、指導(dǎo)其他人員落實設(shè)計。
往往后端開發(fā)出生的架構(gòu)師對后臺開發(fā)這一塊有很豐富的相關(guān)經(jīng)驗,但是還需要對前端,APP端、測試、部署等領(lǐng)域也需要了解掌握,需要能做到掌控全局,這也是成為架構(gòu)師需要去修煉的地方。
注解:架構(gòu)師在一個團隊中的權(quán)利很大,在技術(shù)上大家都要聽你的,但是同時你也要承擔(dān)相應(yīng)的義務(wù),一旦項目由于技術(shù)原因失敗,那你就是第一責(zé)任人
架構(gòu)師的價值
李智慧老師在《大型網(wǎng)站技術(shù)架構(gòu) 核心原理與案例分析》說過軟件架構(gòu)師的最大價值不在于掌握多少先進的技術(shù),而在于具有將一個大系統(tǒng)切分成N個低耦合的子模塊的能力,這些子模塊包含橫向的業(yè)務(wù)模塊,也包含縱向的基礎(chǔ)技術(shù)模塊。這種能力一部分源自專業(yè)的技術(shù)和經(jīng)驗,還有一部分源自于架構(gòu)師對業(yè)務(wù)場景的理解、對人性的把握、甚至對世界的認知。”

上面這張圖表示未經(jīng)過架構(gòu)設(shè)計的系統(tǒng),大家想怎么建就怎么建,用過幾年后系統(tǒng)之間的關(guān)系沒人能理清楚,自然自然程序員不敢隨便改其中的代碼。

而經(jīng)過良好的架構(gòu)設(shè)計后系統(tǒng)之間邏輯清晰,可以很容易進行擴展。
架構(gòu)、架構(gòu)師、架構(gòu)設(shè)計之間的關(guān)系
下面一張圖很容易看出架構(gòu)、架構(gòu)師以及架構(gòu)設(shè)計之間的關(guān)系
架構(gòu)師能力模型
作為架構(gòu)師需要擁有以下12個能力模型:

溝通協(xié)作:
架構(gòu)師需要經(jīng)常跟產(chǎn)品經(jīng)理、項目經(jīng)理甚至客戶打交道,所以溝通能力對架構(gòu)師來說非常重要,能力總結(jié)如下
① 具備優(yōu)秀的口頭、書面及表達技巧
② 優(yōu)先的聆聽者和觀察者
③ 傳達和激發(fā)團隊,共享架構(gòu),確保達成一致
④ 個人品牌,值得信任
⑤ 推動良好的團隊協(xié)作,合作共贏自我驅(qū)動:
架構(gòu)師為什么能夠成為架構(gòu)師?因為他們都會有強大的自我驅(qū)動力,總結(jié)如下
① 積極主動,承擔(dān)職責(zé)以外的事情
② 持之以恒,長期保持
③ 嚴格要求自己,不滿足現(xiàn)狀高效學(xué)習(xí):
這個能力所有做開發(fā)的都需要具備
① 發(fā)現(xiàn)自身知識結(jié)構(gòu)的優(yōu)劣
② 形成自己的學(xué)習(xí)模式
③ 目標(biāo)導(dǎo)向,學(xué)習(xí)目標(biāo)要明確
④ 學(xué)習(xí)需要反復(fù)強化,不斷實踐運用良好心態(tài):
① 開放心態(tài),能夠取長補短,要多與分歧者溝通
② 責(zé)任心,敢于決策,為決策結(jié)果負責(zé)
③ 嚴于利己,寬以待人,積極向上識別問題:
公司花錢聘請你來的目的是讓你來解決問題,而解決問題的前提是先識別問題,而架構(gòu)師需要快速準(zhǔn)確的識別問題,主要分為以下幾個方面
① 識別問題以及問題的主體,把問題本身先搞清楚
② 發(fā)現(xiàn)問題永遠比解決問題更加重要
③ 可以通過利益者全面溝通、競爭對手分析等手段來識別問題
④ 問題的優(yōu)先級,可以用錢或者對業(yè)務(wù)的影響面來衡量抽象思維:
作為架構(gòu)師這個能力尤其重要
① 能夠分解出共性和個性,提煉出共性
② 需求概念化(由實到虛總結(jié)升華)并歸類(核心/非核心等),然后分而治之
③ 抽象的前提是對個性的深入理解認識深度
① 深層次挖掘(由虛到實)問題的本質(zhì)
② 技術(shù)的本質(zhì)
③ 業(yè)務(wù)的本質(zhì)
④ 利益相關(guān)者的本質(zhì)平衡取舍
這個能力也非常重要,畢竟公司給你資源是有限的。如果給你無限的資源,那就不需要做架構(gòu)了,架構(gòu)師就是需要在有限的資源中最大化經(jīng)濟效益。往往做架構(gòu)設(shè)計就是一個取舍的過程。
① 利益者之間利益程度的的平衡取舍
② 確保架構(gòu)在現(xiàn)有有限資源約束下最合理,最大化經(jīng)濟效益業(yè)務(wù)能力
不了解業(yè)務(wù)肯定做不出良好的架構(gòu)設(shè)計的,需要了解業(yè)務(wù)的現(xiàn)狀以及未來的發(fā)展趨勢。
① 對于所在業(yè)務(wù)和領(lǐng)域要有較深的理解
② 能夠?qū)I(yè)務(wù)需求進行分解和未來判斷
③ 好的架構(gòu)師也是好的產(chǎn)品經(jīng)理技術(shù)能力
這是作為架構(gòu)師最基本的能力
① 具備編碼/設(shè)計/攻關(guān)等能力,豐富項目經(jīng)驗
② 技術(shù)深度,某一個領(lǐng)域的技術(shù)專家
③ 技術(shù)廣度,技術(shù)知識面比較廣
④ 技術(shù)高度,技術(shù)前瞻和判斷力,技術(shù)支撐和引導(dǎo)業(yè)務(wù)想象力
① 技術(shù)創(chuàng)新,以業(yè)務(wù)為中心的方式識別、評估和注入顛覆性新技術(shù)的能力
② 戰(zhàn)略性規(guī)劃,能夠為實現(xiàn)潛在目標(biāo)設(shè)計戰(zhàn)略路線圖并推動落地
③ 企業(yè)執(zhí)行,企業(yè)精神、承擔(dān)逾期風(fēng)險、交付成果架構(gòu)方法論
① 多學(xué)習(xí)掌握業(yè)內(nèi)/公司成熟的方法論,并且實踐體會
② 自己結(jié)合項目循環(huán)總結(jié),形成自身的架構(gòu)方法論體系
架構(gòu)師修煉方法
架構(gòu)師可以從以下幾個角度進行自我修煉
豐富實戰(zhàn)
1、先在一個產(chǎn)品/項目做的比較深入,然后考慮多產(chǎn)品/項目的實踐;
2、積極主動進行可復(fù)用模塊提煉以及思路和手段的改進,減少無效重復(fù)實踐
3、在完成本職工作的前提下,增加影響力在更大范圍實踐深度思考
1、六步思考:確定與定義問題、分析問題、尋找解決問題的方法、做出決定、采取行動、評估結(jié)果與控制
2、總結(jié)思考,形成自己的知識經(jīng)驗財富融入圈子
1、融入到部門/公司架構(gòu)師的圈子,尤其是要找到自己心中的導(dǎo)師;
2、融入行業(yè)相同的技術(shù)圈子,互相學(xué)習(xí)交流
3、經(jīng)常寫博客、參與開源社區(qū)、演講以及培訓(xùn)等手段不斷學(xué)習(xí)
1、系統(tǒng)化知識體系的學(xué)習(xí),權(quán)威書籍/網(wǎng)站/微信公眾號等
2、新技術(shù)的感知、運用、分析以及場景運用
3、參加各種培訓(xùn)、分享以及交流等,與專家講師碰撞學(xué)習(xí)
架構(gòu)師成長路徑
架構(gòu)師的前身是一名中高級開發(fā)人員,他們通常會具備以下幾個特征:
工作三五年,精通一兩種編程語言; 精通幾個框架,如SSH; 能夠搭建項目的代碼框架,開發(fā)核心模塊,組織共通類庫,編寫示例程序; 能夠解決一些開發(fā)過程中的難題; 能夠?qū)ο录壋绦騿T進行指導(dǎo); 能夠負責(zé)一些中小模塊的設(shè)計; 知識和能力體系與其承擔(dān)什么項目有很大相關(guān)性;
在職業(yè)發(fā)展中他們有以下幾條路徑可走

走管理路線可以成長為項目經(jīng)理、部門經(jīng)理 走技術(shù)路線可以成為某方面的技術(shù)專家、架構(gòu)師、CTO
成為架構(gòu)師 意味著需要具備更高的能力,并承擔(dān)更大的責(zé)任。
架構(gòu)師工作指南
工作職責(zé)
在標(biāo)準(zhǔn)軟件研發(fā)流程體系中,軟件研發(fā)分為構(gòu)思階段、設(shè)計階段、開發(fā)測試階段,運維階段。而架構(gòu)師需要參與整個開發(fā)流程的生命周期。

我們接下來看看架構(gòu)師在每個階段需要干什么事。
立項階段的職責(zé)(主要是向咨詢或需求分析人員提供技術(shù)咨詢)
進行總體架構(gòu)設(shè)想 論證技術(shù)可行性 驗證某些關(guān)鍵技術(shù)問題 業(yè)務(wù)分析和需求分析階段的職責(zé) 協(xié)助業(yè)務(wù)分析人員產(chǎn)出業(yè)務(wù)分析成果,包括以下事項:
協(xié)助需求分析人員完成需求分析,包括以下事項:
對產(chǎn)品團隊進行技術(shù)支撐,解答產(chǎn)品團隊的技術(shù)疑問 把握產(chǎn)品團隊的需求成果,確保形式和內(nèi)容符合架構(gòu)設(shè)計輸入需要,確保功能可實現(xiàn),非功能性需求指標(biāo)合理,成本和工期可接受 完善需求分析 與產(chǎn)品團隊協(xié)作完成業(yè)務(wù)分析文檔 參與系統(tǒng)業(yè)務(wù)價值討論 架構(gòu)設(shè)計階段的職責(zé)(獨立完成架構(gòu)設(shè)計)
邏輯架構(gòu)設(shè)計,將系統(tǒng)分解為非技術(shù)性的邏輯組件,并定義其間的關(guān)系 物理架構(gòu)設(shè)計,將邏輯架構(gòu)中的組件和關(guān)系進行技術(shù)化、具體化 對于沒有經(jīng)驗的技術(shù)點,驗證其可行性 性能驗證 技術(shù)選型時對多種方案對比驗證 架構(gòu)評審,設(shè)計完成時邀請其他成員、組外專家、領(lǐng)導(dǎo)、高階架構(gòu)師對自己的工作成果進行評審 軟硬件采購申請,對設(shè)計、開發(fā)、測試、部署各環(huán)節(jié)需要的硬件及軟件編寫采購清單,提交申請 概要設(shè)計和詳細設(shè)計階段的職責(zé)(與開發(fā)組長一起完成概要設(shè)計)
與開發(fā)組長一同確定詳細設(shè)計的范圍,指導(dǎo)中級開發(fā)人員完成必要的詳細設(shè)計
初期指導(dǎo),說明架構(gòu)設(shè)計意圖、詳細設(shè)計注意事項 設(shè)計檢查與評審,確保詳細設(shè)計符合架構(gòu)設(shè)計要求 參與數(shù)據(jù)庫設(shè)計,確保數(shù)據(jù)庫設(shè)計符合架構(gòu)設(shè)計要求,主要考慮性能、數(shù)據(jù)量等問題 參加界面設(shè)計評審 功能清單整理,根據(jù)系統(tǒng)用例和架構(gòu)設(shè)計中的組件定義推導(dǎo)出功能清單 接口定義,包括組件間的通信機制定義和功能模塊間的接口定義 開發(fā)階段的職責(zé) 指導(dǎo)開發(fā)人員落實架構(gòu)設(shè)計中要開發(fā)組件的實現(xiàn),包括以下事項:初期指導(dǎo):
代碼檢查與評審:
檢查工程結(jié)構(gòu)是否合理 檢查組件的版本是否合適 檢查接口是否與架構(gòu)設(shè)計一致 檢查主要處理流程的調(diào)用關(guān)系 檢查關(guān)鍵功能的實現(xiàn) 檢查通信方式 檢查并發(fā)處理方式 檢查連接池、線程池等資源的利用 檢查緩存的實現(xiàn)方式和策略 檢查配置項實現(xiàn)方式 檢查構(gòu)建腳本 向開發(fā)團隊說明開發(fā)相關(guān)的架構(gòu)設(shè)計意圖 配合開發(fā)組長搭建開發(fā)環(huán)境,建立各組件的代碼工程 解答開發(fā)團隊的疑問 測試階段的職責(zé) 指導(dǎo)測試人員檢驗架構(gòu)設(shè)計中非功能特性的實現(xiàn),包括以下事項:

運維階段的職責(zé) 指導(dǎo)運維人員部署系統(tǒng)以及在后續(xù)運維過程中進行指導(dǎo),包括以下事項:

架構(gòu)師在組織中的職責(zé) 架構(gòu)師是高級技術(shù)人員,在項目之外,還需要承擔(dān)一定的組織建設(shè)職責(zé),包括以下事項:

工作流程
架構(gòu)師在項目中的活動需要有一定的流程,正常過程如下:
制定項目的架構(gòu)工作計劃 完善需求分析 進行架構(gòu)設(shè)計 指導(dǎo)概要設(shè)計 指導(dǎo)詳細設(shè)計 指導(dǎo)開發(fā) 指導(dǎo)測試 指導(dǎo)上線運維 管理架構(gòu)變更
周邊協(xié)作
架構(gòu)師由于需要參與整個項目的生命周期,所以基本需要與所有相關(guān)人員進行協(xié)作,具體可參看下圖:
資源保障
架構(gòu)師在工作過程中會有一些資源需求,可通過以下方式進行獲取:
架構(gòu)師的考核
可以通過以下維度對架構(gòu)師進行綜合考核:
考核架構(gòu)工作計劃執(zhí)行的完整性 考核架構(gòu)設(shè)計文檔的質(zhì)量 考核指導(dǎo)、檢查和評審的效果 考核項目非功能性需求的滿足情況 考核架構(gòu)師知識經(jīng)驗的分享情況 考核架構(gòu)師對公司產(chǎn)品的改進情況
如果覺得這篇文章對你有所幫助的話請掃描下面二維碼加個關(guān)注。"轉(zhuǎn)發(fā)" 加 "在看",養(yǎng)成好習(xí)慣!咱們下期再見!

SpringBoot開發(fā)秘籍 - 集成Graphql Query
Linux 文件搜索神器 find 實戰(zhàn)詳解,建議收藏!
歡迎關(guān)注微信公眾號:互聯(lián)網(wǎng)全棧架構(gòu),收取更多有價值的信息。
