架構(gòu)師,這個(gè) title 就和總監(jiān)之類的 title 一樣,已經(jīng)徹底被用爛了。但在一個(gè)軟件產(chǎn)品的生命周期中,架構(gòu)師是實(shí)實(shí)在在的一個(gè)極度重要的角色。 架構(gòu)師非常重要的職責(zé)是編寫整個(gè)系統(tǒng)中核心部分的代碼。這個(gè)部分并不一定是技術(shù)挑戰(zhàn)最高的,但對(duì)整個(gè)系統(tǒng)的質(zhì)量甚至成敗起到非常關(guān)鍵的控制作用。 架構(gòu)師必須是從寫核心代碼的人中誕生而來(lái)。這篇文章主要講作者理解的架構(gòu)師到底應(yīng)該具備什么素質(zhì)。 業(yè)務(wù)理解和抽象能力 架構(gòu)師的第一職責(zé)是理解業(yè)務(wù),并轉(zhuǎn)換為可被研發(fā)理解的實(shí)現(xiàn)方案,因此業(yè)務(wù)理解能力是架構(gòu)師的必備技能。 通常來(lái)說一個(gè)資深的業(yè)務(wù)架構(gòu)師,對(duì)業(yè)務(wù)會(huì)有非常深的認(rèn)識(shí)和積累。一個(gè)極好的業(yè)務(wù)架構(gòu)師應(yīng)該能大概預(yù)判業(yè)務(wù)未來(lái)的發(fā)展趨勢(shì),以便在系統(tǒng)的可擴(kuò)展性上留好一定的空間。 所以也會(huì)很自然的出現(xiàn)有些業(yè)務(wù)架構(gòu)師做著做著就干脆轉(zhuǎn)為 PD 類型的角色。 抽象能力是通過對(duì)業(yè)務(wù)的理解轉(zhuǎn)換為系統(tǒng)實(shí)現(xiàn)的模型,這顯然也是重要的能力。抽象很多時(shí)候也承擔(dān)了分解清楚多個(gè)團(tuán)隊(duì)的職責(zé),分工清晰化。 NB 的代碼能力 之所以現(xiàn)在很多的架構(gòu)師都會(huì)被認(rèn)為是大忽悠,就是有一堆頂著架構(gòu)師頭銜,又不干活的人(甚至?xí)霈F(xiàn)對(duì)技術(shù)幾乎不太懂的人),光說不干,再加上說的不靠譜的話,自然很容易被認(rèn)為是大忽悠。 在一個(gè)跨多領(lǐng)域的大型系統(tǒng)中,架構(gòu)師不太可能什么都擅長(zhǎng),不可能寫各個(gè)部分的核心代碼。 這種時(shí)候架構(gòu)師一定要知道怎么判斷非自己知識(shí)領(lǐng)域的部分實(shí)現(xiàn)是否 OK,以確保各部分組合在一起的時(shí)候是符合架構(gòu)設(shè)計(jì)預(yù)期的。 通常這種確保各部分組織在一起 work 的機(jī)制部分的代碼應(yīng)該由架構(gòu)師自己操刀。 最關(guān)鍵素質(zhì):全面、全局、權(quán)衡 全面 全面是一個(gè)架構(gòu)師展現(xiàn)出來(lái)的最關(guān)鍵素質(zhì),全面體現(xiàn)為以下三點(diǎn): 在面對(duì)業(yè)務(wù)問題上,架構(gòu)師腦海里是否會(huì)浮現(xiàn)出多種技術(shù)方案這點(diǎn)挺重要的。 否則可能就會(huì)出現(xiàn)明明有一個(gè)簡(jiǎn)單成熟的方案,但由于不知道而做了其他復(fù)雜不成熟的方案,所以廣闊的技術(shù)視野是架構(gòu)師的必備。 另外架構(gòu)師不可能全部擅長(zhǎng),在自己不擅長(zhǎng)的點(diǎn)上,需要知道找哪個(gè)專業(yè)的人是靠譜的,這點(diǎn)也非常重要。 在做系統(tǒng)設(shè)計(jì)時(shí)是否考慮到了足夠多的方方面面。例如很多系統(tǒng)設(shè)計(jì)容易遺漏上線環(huán)節(jié)的細(xì)節(jié),導(dǎo)致在上線時(shí)發(fā)現(xiàn)漏掉了什么考慮,臨時(shí)解決或只能重來(lái)。 記得有一年我做的一個(gè)設(shè)計(jì)沒有考慮到上線階段的一個(gè)細(xì)節(jié),導(dǎo)致上線的時(shí)候發(fā)現(xiàn)由于網(wǎng)段的問題完全不 work,并且沒有臨時(shí)解決方案,只好重來(lái)。 系統(tǒng)設(shè)計(jì)不僅僅指導(dǎo)研發(fā)同學(xué)怎么寫代碼,也包括指導(dǎo)其他所有相關(guān)技術(shù)同學(xué)的工作。 又例如我 2008 年在做服務(wù)框架設(shè)計(jì)的時(shí)候,集群和集群之間通過硬件負(fù)載均衡設(shè)備來(lái)訪問的,連接的方式是單個(gè)長(zhǎng)連接。 這個(gè)設(shè)計(jì)導(dǎo)致了運(yùn)行過程中如果要發(fā)布被調(diào)用的服務(wù)方,很容易出現(xiàn)壓力都集中在前面重啟的機(jī)器上,這也是典型的整個(gè)鏈路沒有考慮清楚造成的設(shè)計(jì)問題。 再例如 2013 年我在做一個(gè)比較大范圍的系統(tǒng)改造的設(shè)計(jì)時(shí),由于對(duì)其中一部分的軟件了解得不夠,判斷錯(cuò)誤,導(dǎo)致后來(lái)這個(gè)改造在進(jìn)行過程中才發(fā)現(xiàn)有些需要改造的關(guān)鍵軟件設(shè)計(jì)做得太粗糙。 最后上線進(jìn)度差不多推遲了一個(gè)多月,而且那些后來(lái)補(bǔ)的設(shè)計(jì)都是緊急做的,風(fēng)險(xiǎn)非常高。 回顧自己設(shè)計(jì)過的軟件,發(fā)現(xiàn)在這個(gè)點(diǎn)上犯的錯(cuò)可以講好幾天,看來(lái)我應(yīng)該整理另外一篇文檔《我在系統(tǒng)設(shè)計(jì)上犯過的xxx個(gè)錯(cuò)誤》,里面有些其實(shí)靠一份好的系統(tǒng)設(shè)計(jì)模板也許就能避免掉。 一份好的系統(tǒng)設(shè)計(jì)模板是可以幫助架構(gòu)師思考全面些的。 在做系統(tǒng)設(shè)計(jì)時(shí)是否考慮到了未來(lái)的一些發(fā)展?盡可能不要出現(xiàn)未來(lái)的一點(diǎn)變化就導(dǎo)致現(xiàn)在白干或要花大量力氣來(lái)改造的現(xiàn)象。 想當(dāng)年做服務(wù)框架的時(shí)候,后來(lái)就發(fā)現(xiàn)由于當(dāng)年做設(shè)計(jì)的時(shí)候沒有考慮到將來(lái)服務(wù)調(diào)用 trace 的問題,導(dǎo)致了后來(lái)為了彌補(bǔ)這點(diǎn)花了巨大的力氣(不是技術(shù)上,而是實(shí)施上)。 全面需要架構(gòu)師有足夠廣的技術(shù)領(lǐng)域知識(shí)和足夠多的經(jīng)驗(yàn)積累,從全面這點(diǎn)就可以看到架構(gòu)師的工作絕不是畫幾個(gè)框,連幾根線那么簡(jiǎn)單。 對(duì)架構(gòu)師“全面”這點(diǎn)的挑戰(zhàn),會(huì)隨著系統(tǒng)的范圍越大(一個(gè)系統(tǒng)的設(shè)計(jì),和 100 個(gè)系統(tǒng)組成的大系統(tǒng)的設(shè)計(jì)挑戰(zhàn)是完全不同的)而變得越難。 無(wú)論是知識(shí)的廣度、考慮的點(diǎn)的覆蓋度、還是未來(lái)趨勢(shì),更復(fù)雜的情況甚至?xí)霈F(xiàn)架構(gòu)的調(diào)整對(duì)應(yīng)著組織結(jié)構(gòu)的調(diào)整,這種也要考慮到。 例如服務(wù)化這種大的架構(gòu)改造,就意味著專職的專業(yè)領(lǐng)域服務(wù)團(tuán)隊(duì)的成立。 全局 全局觀通常是指在系統(tǒng)設(shè)計(jì)時(shí)是否考慮到了對(duì)上下游系統(tǒng)的影響。 畢竟通常所設(shè)計(jì)的系統(tǒng)不是一個(gè)孤立的系統(tǒng),如果沒有足夠好的全局觀,有可能會(huì)導(dǎo)致自己的系統(tǒng)做完上線,其他上下游系統(tǒng)(尤其有些連上下游是誰(shuí),怎么用都不知道的情況下)出現(xiàn)問題,這種案例同樣不少。 權(quán)衡 權(quán)衡同樣也是架構(gòu)師極度重要的能力。或者也可以認(rèn)為是決策能力,技術(shù)方案的拍板是一個(gè)架構(gòu)師最重要的職責(zé)。 上面說的“全面”是架構(gòu)師在思考時(shí)“放”的過程,而權(quán)衡就是“收”的過程。收的過程結(jié)束基本就意味著技術(shù)方案的確定,同時(shí)也確定了節(jié)奏。 權(quán)衡在兩點(diǎn)上會(huì)體現(xiàn)得特別突出: 技術(shù)方案決策原則 通常一個(gè)問題都會(huì)有多種可解決的技術(shù)方案。怎么來(lái)決策就至關(guān)重要了,而決策通常又和全面相關(guān)。 大的來(lái)說通常決策的原則就是性價(jià)比和可持續(xù)發(fā)展。性價(jià)比簡(jiǎn)單來(lái)說是方案的實(shí)現(xiàn)成本,這個(gè)成本要包括非常多的方面。 例如有些場(chǎng)景可能會(huì)是用硬件解決看起來(lái)是花錢,但最終折算成本是最劃算的,很多系統(tǒng)設(shè)計(jì)在決策性價(jià)比時(shí)都過于隨意。 例如一個(gè)另外常見的場(chǎng)景就是建設(shè)一套新系統(tǒng)替代舊系統(tǒng),這個(gè)時(shí)候可能完全沒考慮舊系統(tǒng)的遷移代價(jià)甚至超過了改造舊系統(tǒng)的代價(jià)。 可持續(xù)發(fā)展簡(jiǎn)單來(lái)說就是所選擇的技術(shù)方案在公司是否可持續(xù)。例如簡(jiǎn)單的案例是公司主體的研發(fā)人員都是 PHP,卻搞一個(gè)其他語(yǔ)言,且只有極少人懂的。 當(dāng)然,這還是要看性價(jià)比,如果搞一個(gè)其他語(yǔ)言帶來(lái)的效益超過了語(yǔ)言/人才體系的更換成本。又例如引入一個(gè)開源產(chǎn)品,有無(wú)專業(yè)團(tuán)隊(duì)維護(hù)這都是要考慮的關(guān)鍵因素。 優(yōu)先級(jí)和節(jié)奏控制 經(jīng)常我會(huì)問做系統(tǒng)設(shè)計(jì)的同學(xué)一個(gè)問題:對(duì)于這個(gè)業(yè)務(wù)場(chǎng)景而言,在系統(tǒng)設(shè)計(jì)上最需要把握的一個(gè)點(diǎn)是什么。 這是一個(gè)關(guān)鍵問題,全面意味著考慮到了很多地方的問題,但通常業(yè)務(wù)需求實(shí)現(xiàn)都是有很強(qiáng)的時(shí)間要求的,因此在這個(gè)時(shí)候必須考慮清楚不同點(diǎn)的優(yōu)先級(jí)。 同時(shí)也包括技術(shù)方案在決策時(shí)也要做出取舍,有可能選了一個(gè)不是那么好的技術(shù)方案,但通過留下一些可改造的空間,為以后的重構(gòu)做好鋪墊,那就是很不錯(cuò)的。 尤其技術(shù)同學(xué)有些時(shí)候比較容易陷入解決技術(shù)問題的場(chǎng)景去,但那個(gè)問題其實(shí)有可能不是現(xiàn)階段最重要的。 優(yōu)先級(jí)和節(jié)奏控制是我認(rèn)為一個(gè)最 NB 的架構(gòu)師的最佳體現(xiàn):
作者:林昊(花名畢玄) |
|