對(duì)工作多年的程序員而言,日后的職業(yè)發(fā)展無(wú)非是專精技術(shù),轉(zhuǎn)型管理,晉升架構(gòu)師三種選擇。成為一名優(yōu)秀的架構(gòu)師,是大多數(shù)技術(shù)人的追求。想要做架構(gòu),空有一身技術(shù)是遠(yuǎn)遠(yuǎn)不夠的,知識(shí)的深度和廣度,往往會(huì)決定一個(gè)架構(gòu)師的架構(gòu)能力。而這些知識(shí),從你踏入IT行業(yè)那一刻起,甚至更早就應(yīng)該開(kāi)始儲(chǔ)備了。那么到底什么是架構(gòu)師?如果有一天把你丟到架構(gòu)師的位置上你會(huì)怎么做?做什么呢?以下來(lái)具體闡述下一些看法和建議! 先看看IT市場(chǎng)對(duì)于架構(gòu)師的職位要求: 架構(gòu)師要求 1 綜述: 系統(tǒng)性,知其然知其所以然。是某一個(gè)領(lǐng)域的專家,在專業(yè)領(lǐng)域具備一定的預(yù)見(jiàn)性,可獨(dú)立領(lǐng)導(dǎo)跨部門(mén)的項(xiàng)目。 項(xiàng)目管理: 具備較高復(fù)雜度的(項(xiàng)目如鏈路較長(zhǎng)/模塊復(fù)雜度較高/風(fēng)險(xiǎn)較大/發(fā)布周期較緊/技術(shù)驅(qū)動(dòng)等任意兩項(xiàng)及以上)的PM經(jīng)驗(yàn)和能力。 開(kāi)發(fā)語(yǔ)言技能及架構(gòu)能力: 1、可以寫(xiě)出比較優(yōu)秀的代碼,能夠基于設(shè)計(jì)原則及模式掌握代碼演變的方向和節(jié)奏;具備技術(shù)攻堅(jiān)的能力; 2、具備高復(fù)雜度的平臺(tái)/框架/業(yè)務(wù)系統(tǒng)技術(shù)與架構(gòu)設(shè)計(jì)能力,掌握常見(jiàn)的架構(gòu)設(shè)計(jì)方法和模式,理解大型網(wǎng)站所需要用到的架構(gòu)和技術(shù); 3、熟悉業(yè)務(wù)的價(jià)值、特點(diǎn)及對(duì)系統(tǒng)的要求,掌握領(lǐng)域建模的方法,可以對(duì)業(yè)務(wù)進(jìn)行必要的抽象,并推進(jìn)技術(shù)實(shí)現(xiàn); 4、能夠負(fù)責(zé)復(fù)雜度高,平臺(tái)級(jí)產(chǎn)品或跨團(tuán)隊(duì)的產(chǎn)品架構(gòu),系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)。 業(yè)務(wù)理解: 1、行業(yè)開(kāi)發(fā):開(kāi)發(fā)熟悉自己直接負(fù)責(zé)的及上下游相關(guān)的業(yè)務(wù),關(guān)注業(yè)務(wù)發(fā)展相關(guān)的數(shù)據(jù)并能有效的分析解讀; 2、平臺(tái)開(kāi)發(fā):熟悉所在業(yè)務(wù)域,并且負(fù)責(zé)核心業(yè)務(wù)目標(biāo)的分解&落地;能夠把縱向行業(yè)需求落地為橫向產(chǎn)品化形態(tài); 3、在業(yè)務(wù)及產(chǎn)品規(guī)劃方面有自己獨(dú)立的思考,能夠影響業(yè)務(wù)及產(chǎn)品的發(fā)展方向。 影響: 1、在所處的業(yè)務(wù)線具有廣泛的影響力,對(duì)相應(yīng)涉及的技術(shù)和業(yè)務(wù)都能有足夠的公信力;2、具備輔導(dǎo)他人的能力和技能,有良好的分享習(xí)慣,對(duì)團(tuán)隊(duì)有正向影響和幫助。 一 架構(gòu)師職責(zé) 架構(gòu)師是一個(gè)既需要掌控整體又要洞悉局部瓶頸,并依據(jù)具體的業(yè)務(wù)場(chǎng)景給出解決方案的團(tuán)隊(duì)領(lǐng)導(dǎo)型人物,他需要參與項(xiàng)目開(kāi)發(fā)的全部過(guò)程,包括需求分析、架構(gòu)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)、集成、測(cè)試和部署各個(gè)階段,負(fù)責(zé)在整個(gè)項(xiàng)目中對(duì)技術(shù)活動(dòng)和技術(shù)說(shuō)明進(jìn)行指導(dǎo)和協(xié)調(diào)。 架構(gòu)師主要職責(zé)有4條: 01 確認(rèn)需求 在項(xiàng)目開(kāi)發(fā)過(guò)程中,架構(gòu)師是在需求規(guī)格說(shuō)明書(shū)完成后介入的,需求規(guī)格說(shuō)明書(shū)必須得到架構(gòu)師的認(rèn)可。架構(gòu)師需要和分析人員反復(fù)交流,以保證自己完整并準(zhǔn)確地理解用戶需求。 02 系統(tǒng)分解 依據(jù)用戶需求,架構(gòu)師將系統(tǒng)整體分解為更小的子系統(tǒng)和組件,從而形成不同的邏輯層或服務(wù)。隨后,架構(gòu)師會(huì)確定各層的接口,層與層相互之間的關(guān)系。架構(gòu)師不僅要對(duì)整個(gè)系統(tǒng)分層,進(jìn)行“縱向”分解,還要對(duì)同一邏輯層分塊,進(jìn)行“橫向”分解。 架構(gòu)師的功力基本體現(xiàn)于此,這是一項(xiàng)相對(duì)復(fù)雜的工作。 03 技術(shù)選型 架構(gòu)師通過(guò)對(duì)系統(tǒng)的一系列的分解,最終形成了軟件的整體架構(gòu)。技術(shù)選擇主要取決于軟件架構(gòu)。Web Server運(yùn)行在Windows上還是Linux上?數(shù)據(jù)庫(kù)采用MSSql、Oracle還是Mysql?需要不需要采用MVC或者Spring等輕量級(jí)的框架?前端采用富客戶端還是瘦客戶端方式?類似的工作,都需要在這個(gè)階段提出,并進(jìn)行評(píng)估。 架構(gòu)師對(duì)產(chǎn)品和技術(shù)的選型僅僅限于評(píng)估,沒(méi)有決定權(quán),最終的決定權(quán)歸項(xiàng)目經(jīng)理。架構(gòu)師提出的技術(shù)方案為項(xiàng)目經(jīng)理提供了重要的參考信息,項(xiàng)目經(jīng)理會(huì)從項(xiàng)目預(yù)算、人力資源、時(shí)間進(jìn)度等實(shí)際情況進(jìn)行權(quán)衡,最終進(jìn)行確認(rèn)。 04 制定技術(shù)規(guī)格說(shuō)明 架構(gòu)師在項(xiàng)目開(kāi)發(fā)過(guò)程中,是技術(shù)權(quán)威。他需要協(xié)調(diào)所有的開(kāi)發(fā)人員,與開(kāi)發(fā)人員一直保持溝通,始終保證開(kāi)發(fā)者依照它的架構(gòu)意圖去實(shí)現(xiàn)各項(xiàng)功能。 架構(gòu)師與開(kāi)發(fā)者溝通的最重要的形式是技術(shù)規(guī)格說(shuō)明書(shū),它可以是UML視圖、Word文檔,Visio文件等各種表現(xiàn)形式。通過(guò)架構(gòu)師提供的技術(shù)規(guī)格說(shuō)明書(shū),保證開(kāi)發(fā)者可以從不同角度去觀察、理解各自承擔(dān)的子系統(tǒng)或者模塊。 架構(gòu)師不僅要保持與開(kāi)發(fā)者的溝通,也需要與項(xiàng)目經(jīng)理、需求分析員,甚至與最終用戶保持溝通。所以,對(duì)于架構(gòu)師來(lái)講,不僅有技術(shù)方面的要求,還有人際交流方面的要求。 二 架構(gòu)師綜合能力 作為架構(gòu)師,必須成為所在開(kāi)發(fā)團(tuán)隊(duì)的技術(shù)路線引導(dǎo)者,具有很強(qiáng)的系統(tǒng)思維的能力;需要從大量互相沖突的系統(tǒng)方法和工具中區(qū)分出哪些是有效的,哪些是無(wú)效的。架構(gòu)師應(yīng)當(dāng)是一個(gè)成熟的、豐富的、有經(jīng)驗(yàn)的、學(xué)習(xí)快捷、善溝通和決策能力強(qiáng)的人。他必須廣泛了解各種技術(shù)并精通一種特定技術(shù),至少了解計(jì)算機(jī)通用技術(shù)以便確定哪種技術(shù)最優(yōu),或組織團(tuán)隊(duì)開(kāi)展技術(shù)評(píng)估。優(yōu)秀的架構(gòu)師能考慮并評(píng)估所有可用來(lái)解決問(wèn)題的總體技術(shù)方案。需要良好的書(shū)面和口頭溝通技巧,一般通過(guò)可視化模型和小組討論來(lái)溝通指導(dǎo)團(tuán)隊(duì)確保開(kāi)發(fā)人員按照架構(gòu)建造系統(tǒng)。 所以作為架構(gòu)師需要如下的綜合能力: 01 溝通能力 為了提高效率,架構(gòu)師必須贏得團(tuán)隊(duì)成員、項(xiàng)目經(jīng)理、客戶或用戶認(rèn)同,這就需要架構(gòu)師具有較強(qiáng)的溝通能力。溝通能力是人類最普遍性的素質(zhì)要求,技術(shù)人員好像容易忽略,想成為架構(gòu)師就不能忽略。千萬(wàn)不要抱著這樣的觀念:懷才跟懷孕似的,時(shí)間久了總會(huì)被人發(fā)現(xiàn)的。還是天橋上賣大力丸的哥們說(shuō)得對(duì):光說(shuō)不練假把式,光練不說(shuō)傻把式??纯茨阒車念^頭腦腦們,哪一個(gè)不是此中高手,我們千萬(wàn)不要鄙視,認(rèn)為這是阿諛?lè)畛?、投機(jī)鉆營(yíng),凡事都要看到積極的一面,“溝通”的確是一種能力。我認(rèn)為自己是一個(gè)略內(nèi)向的人,因?yàn)槲沂寝r(nóng)村出來(lái)的孩子,普通話都說(shuō)不好,以前或多或少帶有點(diǎn)自卑感,幻想著是金子總會(huì)發(fā)光,所以在職業(yè)生涯中吃了不少虧?,F(xiàn)在,我深深懂得了溝通的重要性,我會(huì)很主動(dòng)地跟同事們,跟老大們不定時(shí)地溝通,感覺(jué)工作起來(lái)順暢多了。 這一條我認(rèn)為最為重要,所以排在首位。我甚至認(rèn)為下面幾條都可以忽略,唯一這一條得牢記,而且要常常提醒自己 02 技術(shù)能力 架構(gòu)師最好精通1-2個(gè)技術(shù),具備這種技術(shù)能力可以更加深入的理解有關(guān)架構(gòu)的工作原理,也可以拉近和開(kāi)發(fā)人員的距離,并形成團(tuán)隊(duì)中的影響力。 架構(gòu)師的技術(shù)知識(shí)廣度也很重要,需要了解盡可能多的技術(shù),所謂見(jiàn)多識(shí)廣,只有這樣,才可能綜合各種技術(shù),選擇更加適合項(xiàng)目的解決方案。有的人說(shuō),架構(gòu)師技術(shù)廣度的要求高于技術(shù)深度的要求,這是很有道理的??偠灾?,一句話:架構(gòu)師是項(xiàng)目團(tuán)隊(duì)中的技術(shù)權(quán)威。 03 架構(gòu)能力 架構(gòu)是架構(gòu)師洞察內(nèi)在結(jié)構(gòu)、原則、規(guī)律與邏輯的過(guò)程,架構(gòu)師要做到清晰理解系統(tǒng)、簡(jiǎn)潔描述,除此之外,一個(gè)架構(gòu)師還必須具備極強(qiáng)的分析能力,要做到根據(jù)產(chǎn)品宗旨和目標(biāo),分析清楚產(chǎn)品定位、產(chǎn)品業(yè)務(wù),再整合利用現(xiàn)有的技術(shù)領(lǐng)域,找出最佳方案,實(shí)現(xiàn)產(chǎn)品概念。 04 抽象分析 架構(gòu)師必須具備抽象思維和分析的能力,這是你進(jìn)行系統(tǒng)分析和系統(tǒng)分解的基本素質(zhì)。只有具備這樣的能力,架構(gòu)師才能看清系統(tǒng)的整體,掌控全局,這也是架構(gòu)師大局觀的形成基礎(chǔ)。你如何具備這種能力呢?一是來(lái)自于經(jīng)驗(yàn),二是來(lái)自于學(xué)習(xí)。架構(gòu)師不僅要具備在問(wèn)題領(lǐng)域上的經(jīng)驗(yàn),也需要具備在軟件工程領(lǐng)域內(nèi)的經(jīng)驗(yàn)。也就是說(shuō),架構(gòu)師必須能夠準(zhǔn)確得理解需求,然后用軟件工程的思想,把需求轉(zhuǎn)化和分解成可用計(jì)算機(jī)語(yǔ)言實(shí)現(xiàn)的程度。經(jīng)驗(yàn)的積累是需要一個(gè)時(shí)間過(guò)程的,這個(gè)過(guò)程誰(shuí)也幫不了你,是需要你去經(jīng)歷的。但是,如果你有意識(shí)地去培養(yǎng),不斷吸取前人的經(jīng)驗(yàn)的話,還是可以縮短這個(gè)周期的。 05 決策能力 決策能力是一個(gè)架構(gòu)師最重要的職責(zé)。 1. 技術(shù)方案決策原則 通常一個(gè)問(wèn)題都會(huì)有多種可解決的技術(shù)方案,怎么來(lái)決策就至關(guān)重要了,而決策通常又和全面相關(guān),大的來(lái)說(shuō)通常決策的原則就是性價(jià)比和可持續(xù)發(fā)展。性價(jià)比簡(jiǎn)單來(lái)說(shuō)是方案的實(shí)現(xiàn)成本,這個(gè)成本要包括非常多的方面,例如有些場(chǎng)景可能會(huì)是用硬件解決看起來(lái)是花錢(qián),但最終折算成本是最劃算的,很多系統(tǒng)設(shè)計(jì)在決策性價(jià)比時(shí)都過(guò)于隨意,例如一個(gè)另外常見(jiàn)的場(chǎng)景就是建設(shè)一套新系統(tǒng)替代舊系統(tǒng),這個(gè)時(shí)候可能完全沒(méi)考慮舊系統(tǒng)的遷移代價(jià)甚至超過(guò)了改造舊系統(tǒng)的代價(jià); 可持續(xù)發(fā)展簡(jiǎn)單來(lái)說(shuō)就是所選擇的技術(shù)方案在公司是否可持續(xù),例如簡(jiǎn)單的案例是公司主體的研發(fā)人員都是php,卻搞一個(gè)其他語(yǔ)言,且只有極少人懂的(當(dāng)然,這還是要看性價(jià)比,如果搞一個(gè)其他語(yǔ)言帶來(lái)的效益超過(guò)了語(yǔ)言/人才體系的更換成本),又例如引入一個(gè)開(kāi)源產(chǎn)品,有無(wú)專業(yè)團(tuán)隊(duì)維護(hù)這都是要考慮的關(guān)鍵因素。 2. 優(yōu)先級(jí)和節(jié)奏控制 經(jīng)常我會(huì)問(wèn)做系統(tǒng)設(shè)計(jì)的同學(xué)一個(gè)問(wèn)題:對(duì)于這個(gè)業(yè)務(wù)場(chǎng)景而言,在系統(tǒng)設(shè)計(jì)上最需要把握的一個(gè)點(diǎn)是什么;這是一個(gè)關(guān)鍵問(wèn)題,全面意味著考慮到了很多地方的問(wèn)題,但通常業(yè)務(wù)需求實(shí)現(xiàn)都是有很強(qiáng)的時(shí)間要求的,因此在這個(gè)時(shí)候必須考慮清楚不同點(diǎn)的優(yōu)先級(jí),同時(shí)也包括技術(shù)方案在決策時(shí)也要做出取舍,有可能選了一個(gè)不是那么好的技術(shù)方案,但通過(guò)留下一些可改造的空間,為以后的重構(gòu)做好鋪墊,那就是很不錯(cuò)的,尤其技術(shù)同學(xué)有些時(shí)候比較容易陷入解決技術(shù)問(wèn)題的場(chǎng)景去,但那個(gè)問(wèn)題其實(shí)有可能不是現(xiàn)階段最重要的。 優(yōu)先級(jí)和節(jié)奏控制是我認(rèn)為一個(gè)優(yōu)秀的架構(gòu)師的最佳體現(xiàn),優(yōu)先級(jí)意味著把握住了重點(diǎn),可以確保在所設(shè)計(jì)的架構(gòu)指導(dǎo)下業(yè)務(wù)實(shí)現(xiàn)不會(huì)出現(xiàn)大問(wèn)題,節(jié)奏控制則意味著全面,知道隨著業(yè)務(wù)發(fā)展該在什么時(shí)間點(diǎn)做什么事,為將來(lái)做好鋪墊。 三 架構(gòu)師技能 技能樹(shù) 架構(gòu)優(yōu)化思路 架構(gòu)優(yōu)化一方面是優(yōu)化系統(tǒng)交易鏈上的每個(gè)環(huán)節(jié)進(jìn)行分析并優(yōu)化,另一方面是對(duì)單一架構(gòu)進(jìn)行瓶頸點(diǎn)分析和調(diào)優(yōu)。但是優(yōu)化的目標(biāo)大致相同,最終目的是提高系統(tǒng)的響應(yīng)速度、吞吐量、降低各個(gè)模塊之間的耦合。 優(yōu)化原則
后端優(yōu)化手段
數(shù)據(jù)庫(kù)優(yōu)化 數(shù)據(jù)庫(kù)優(yōu)化原則
數(shù)據(jù)庫(kù)垂直、水平拆分 數(shù)據(jù)拆分前其實(shí)是要首先做準(zhǔn)備工作的,然后才是開(kāi)始數(shù)據(jù)拆分,我先講拆分前需要做的事情: 第一步:采用分布式緩存redis、memcached等降低對(duì)數(shù)據(jù)庫(kù)的讀操作。 第二步:如果緩存使用過(guò)后,數(shù)據(jù)庫(kù)訪問(wèn)量還是非常大,可以考慮數(shù)據(jù)庫(kù)讀、寫(xiě)分離原則。 第三步:當(dāng)我們使用讀寫(xiě)分離、緩存后,數(shù)據(jù)庫(kù)的壓力還是很大的時(shí)候,這就需要使用到數(shù)據(jù)庫(kù)拆分了。 數(shù)據(jù)庫(kù)拆分原則:就是指通過(guò)某種特定的條件,按照某個(gè)維度,將我們存放在同一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)分散存放到多個(gè)數(shù)據(jù)庫(kù)(主機(jī))上面以達(dá)到分散單庫(kù)(主機(jī))負(fù)載的效果。 垂直拆分 一個(gè)數(shù)據(jù)庫(kù)由很多表的構(gòu)成,每個(gè)表對(duì)應(yīng)著不同的業(yè)務(wù),垂直切分是指按照業(yè)務(wù)將表進(jìn)行分類,分布到不同的數(shù)據(jù)庫(kù)上面,這樣也就將數(shù)據(jù)或者說(shuō)壓力分擔(dān)到不同的庫(kù)上面 。 比如淘寶中期開(kāi)始的數(shù)據(jù)庫(kù)端按照業(yè)務(wù)垂直拆分:按照業(yè)務(wù)交易數(shù)據(jù)庫(kù)、用戶數(shù)據(jù)庫(kù)、商品數(shù)據(jù)庫(kù)、店鋪數(shù)據(jù)庫(kù)等進(jìn)行拆分。 優(yōu)缺點(diǎn) 優(yōu)點(diǎn): 1. 拆分后業(yè)務(wù)清晰,拆分規(guī)則明確。 2. 系統(tǒng)之間整合或擴(kuò)展容易。 3. 數(shù)據(jù)維護(hù)簡(jiǎn)單。 缺點(diǎn): 1. 部分業(yè)務(wù)表無(wú)法join,只能通過(guò)接口方式解決,提高了系統(tǒng)復(fù)雜度。 2. 受每種業(yè)務(wù)不同的限制存在單庫(kù)性能瓶頸,不易數(shù)據(jù)擴(kuò)展跟性能提高。 3. 事務(wù)處理復(fù)雜。 水平拆分 垂直拆分后遇到單機(jī)瓶頸,可以使用水平拆分。相對(duì)于垂直拆分的區(qū)別是:垂直拆分是把不同的表拆到不同的數(shù)據(jù)庫(kù)中,而水平拆分是把同一個(gè)表拆到不同的數(shù)據(jù)庫(kù)中。 相對(duì)于垂直拆分,水平拆分不是將表的數(shù)據(jù)做分類,而是按照某個(gè)字段的某種規(guī)則來(lái)分散到多個(gè)庫(kù)之中,每個(gè)表中包含一部分?jǐn)?shù)據(jù)。簡(jiǎn)單來(lái)說(shuō),我們可以將數(shù)據(jù)的水平切分理解為是按照數(shù)據(jù)行的切分,就是將表中 的某些行切分到一個(gè)數(shù)據(jù)庫(kù),而另外的某些行又切分到其他的數(shù)據(jù)庫(kù)中。 分庫(kù)分表需要涉及到對(duì)應(yīng)的SQL路由規(guī)則主庫(kù)備庫(kù)等,例如:淘寶設(shè)計(jì)了一套TDDL來(lái)解決這些問(wèn)題,應(yīng)用端只需配置對(duì)應(yīng)的規(guī)則即可,對(duì)應(yīng)用端的沒(méi)有任何侵入的設(shè)計(jì)。 水平拆分,總之,一般先分庫(kù),如果分庫(kù)后查詢?nèi)匀宦?,于是按照分?kù)的思想開(kāi)始做分表的工作數(shù)據(jù)庫(kù)采用分布式數(shù)據(jù)庫(kù)(所有節(jié)點(diǎn)的數(shù)據(jù)加起來(lái)才算是整體數(shù)據(jù)),文件系統(tǒng)采用分布式文件系統(tǒng)任何強(qiáng)大的單一服務(wù)器都滿足不了大型系統(tǒng)持續(xù)增長(zhǎng)的業(yè)務(wù)需求,數(shù)據(jù)庫(kù)讀寫(xiě)分離隨著業(yè)務(wù)的發(fā)展最終也將無(wú)法滿足需求,需要使用分布式數(shù)據(jù)庫(kù)及分布式文件系統(tǒng)來(lái)支撐。 總結(jié) 架構(gòu)師是一個(gè)充滿挑戰(zhàn)的職業(yè),知識(shí)面的寬窄往往決定著一個(gè)架構(gòu)師的架構(gòu)能力,所以在這一點(diǎn)上我比較贊成,就是要閱讀大量的技術(shù)書(shū)籍,但我希望你不要僅限于軟件相關(guān)的書(shū)籍,經(jīng)常泡技術(shù)論壇,一方面可以結(jié)交朋友,一方面可以增加自己的知識(shí)面。 總之,想要成為架構(gòu)師,需要有耐心,不斷學(xué)習(xí),拓寬自己的視野,不僅僅局限于自己眼前的項(xiàng)目,關(guān)注開(kāi)源技術(shù),關(guān)注熱門(mén)技術(shù)社區(qū)的新動(dòng)向。
|
|