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

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

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

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

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

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

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

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

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