成為一名架構(gòu)師是每個(gè)程序員的夢想,但這并不意味著如果您做得好,就能成為一名架構(gòu)師。 好的程序員和架構(gòu)師之間存在的差距是非常明顯的,這個(gè)差距是“不確定性”。對于編程,基本上沒有不確定性。而就架構(gòu)設(shè)計(jì)而言,它本質(zhì)是不確定的,對于同一個(gè)系統(tǒng),公司A和公司B制作的體系結(jié)構(gòu)可能會非常不同,但最終它們都可以正常工作。 對于相同的解決方案,設(shè)計(jì)者A認(rèn)為應(yīng)該這樣做,設(shè)計(jì)師B認(rèn)為應(yīng)該做到這一點(diǎn),這似乎是有道理的。與編程相比,架構(gòu)設(shè)計(jì)沒有像編程語言那樣的語法來約束,更多的時(shí)候是面對多種可能性時(shí)進(jìn)行選擇。
在充分了解眾多的互聯(lián)網(wǎng)公司架構(gòu)設(shè)計(jì)后,會發(fā)現(xiàn)有幾個(gè)共性的原則隱含其中,這就是:合適原則、簡單原則、演化原則,架構(gòu)設(shè)計(jì)時(shí)遵循這幾個(gè)原則,有助于做出最好的選擇。
合適原則
合適原則宣言:“合適優(yōu)于業(yè)界領(lǐng)先”。
優(yōu)秀的技術(shù)人員都有很強(qiáng)的技術(shù)情結(jié),當(dāng)他們做方案或者架構(gòu)時(shí),總想不斷地挑戰(zhàn)自己,想達(dá)到甚至優(yōu)于業(yè)界領(lǐng)先水平是其中一個(gè)典型表現(xiàn),因?yàn)檫@樣才能夠展現(xiàn)自己的優(yōu)秀,才能在年終KPI績效總結(jié)里面驕傲地寫上“設(shè)計(jì)了XX方案,達(dá)到了和Google相同的技術(shù)水平”“XX方案的性能測試結(jié)果大大優(yōu)于阿里集團(tuán)的YY方案”。
但現(xiàn)實(shí)是,大部分這樣想和這樣做的架構(gòu),最后可能都以失敗告終!我在互聯(lián)網(wǎng)行業(yè)見過“億級用戶平臺”的失敗案例,2011年的時(shí)候,某個(gè)幾個(gè)人規(guī)模的業(yè)務(wù)團(tuán)隊(duì),雄心勃勃的提出要做一個(gè)和騰訊QQ(那時(shí)候微信還沒起來)一拼高下的“億級用戶平臺”,最后結(jié)果當(dāng)然是不出所料的失敗了。
簡單原則
簡單原則宣言:“簡單優(yōu)于復(fù)雜”。
軟件架構(gòu)設(shè)計(jì)是一門技術(shù)活。所謂技術(shù)活,從歷史上看,無論是瑞士的鐘表,還是瓦特的蒸汽機(jī);無論是萊特兄弟發(fā)明的飛機(jī),還是摩托羅拉發(fā)明的手機(jī),無一不是越來越精細(xì)、越來越復(fù)雜。因此當(dāng)我們進(jìn)行架構(gòu)設(shè)計(jì)時(shí),會自然而然地想把架構(gòu)做精美、做復(fù)雜,這樣才能體現(xiàn)我們的技術(shù)實(shí)力,也才能夠?qū)⒓軜?gòu)做成一件藝術(shù)品。
由于軟件架構(gòu)和建筑架構(gòu)表面上的相似性,我們也會潛意識地將對建筑的審美觀點(diǎn)移植到軟件架構(gòu)上面。我們驚嘆于長城的宏偉、泰姬陵的精美、悉尼歌劇院的藝術(shù)感、迪拜帆船酒店的豪華感,因此,對于我們自己親手打造的軟件架構(gòu),我們也希望它宏偉、精美、藝術(shù)、豪華……總之就是不能寒酸、不能簡單。
團(tuán)隊(duì)的壓力有時(shí)也會有意無意地促進(jìn)我們走向復(fù)雜的方向,因?yàn)榇蟛糠秩嗽谠u價(jià)一個(gè)方案水平高低的時(shí)候,復(fù)雜性是其中一個(gè)重要的參考指標(biāo)。例如設(shè)計(jì)一個(gè)主備方案,如果你用心跳來實(shí)現(xiàn),可能大家都認(rèn)為這太簡單了。但如果你引入ZooKeeper來做主備決策,可能很多人會認(rèn)為這個(gè)方案更加“高大上”一些,畢竟ZooKeeper使用的是ZAB協(xié)議,而ZAB協(xié)議本身就很復(fù)雜。其實(shí),真正理解ZAB協(xié)議的人很少(我也不懂),但并不妨礙我們都知道ZAB協(xié)議很優(yōu)秀。
演化原則
演化原則宣言:“演化優(yōu)于一步到位”。
軟件架構(gòu)從字面意思理解和建筑結(jié)構(gòu)非常類似,事實(shí)上“架構(gòu)”這個(gè)詞就是建筑領(lǐng)域的專業(yè)名詞,維基百科對“軟件架構(gòu)”的定義中有一段話描述了這種相似性:從和目的、主題、材料和結(jié)構(gòu)的聯(lián)系上來說,軟件架構(gòu)可以和建筑物的架構(gòu)相比擬。例如,軟件架構(gòu)描述的是一個(gè)軟件系統(tǒng)的結(jié)構(gòu),包括各個(gè)模塊,以及這些模塊的關(guān)系;建筑架構(gòu)描述的是一幢建筑的結(jié)構(gòu),包括各個(gè)部件,以及這些部件如何有機(jī)地組成成一幢完美的建筑。然而,字面意思上的相似性卻掩蓋了一個(gè)本質(zhì)上的差異:建筑一旦完成(甚至一旦開建)就不可再變,而軟件卻需要根據(jù)業(yè)務(wù)的發(fā)展不斷地變化。
通過上述關(guān)于架構(gòu)設(shè)計(jì)三原則的介紹,相信您對架構(gòu)設(shè)計(jì)有了進(jìn)一步的理解吧,想了解更多關(guān)于架構(gòu)設(shè)計(jì)的信息,請繼續(xù)關(guān)注中培偉業(yè)。