
每一位程序員都有一顆成為架構(gòu)師的心。好多人都在問,架構(gòu)到底是什么?本文來展開探討一下~
1、架構(gòu)與框架的區(qū)別
架構(gòu)有很多說法,例如:
? ??1)開源系統(tǒng)(MySQL、Nginx)架構(gòu)
? ??2)大公司架構(gòu)實(shí)現(xiàn)(支付寶、微信)
那兩者的區(qū)別是什么呢?
架構(gòu):架構(gòu)本身不是軟件,而是關(guān)于軟件如何設(shè)計(jì)的策略。是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計(jì)。
框架:面向特定領(lǐng)域的、可復(fù)用的“半成品”軟件,它實(shí)現(xiàn)了該領(lǐng)域的共性基礎(chǔ)部分,并提供了一些定義良好的可變點(diǎn)以保證靈活性和可擴(kuò)展性。是領(lǐng)域內(nèi)、特定語言和技術(shù)的架構(gòu)應(yīng)用解決方案。
總結(jié):架構(gòu)關(guān)注的是“結(jié)構(gòu)”,框架關(guān)注的是“規(guī)范”。
框架是軟件,目的是抽象通用化高效解決問題;架構(gòu)是軟件的抽象解決方案,目的是便于進(jìn)行大局拆解與局部細(xì)化。
2、架構(gòu)是什么?
軟件架構(gòu)(Software Architecture)
有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計(jì)。
--來自維基百科
系統(tǒng)是由一群關(guān)聯(lián)個體的組成的,系統(tǒng)中的個體需要“根據(jù)某種規(guī)則”協(xié)作,架構(gòu)需要明確這種協(xié)作規(guī)則。
架構(gòu)=骨架、結(jié)構(gòu),來源于建筑學(xué)。前者揭示架構(gòu)中內(nèi)在的支撐物,后者則表明架構(gòu)關(guān)心支撐物相互結(jié)合的某種構(gòu)造方式。
為什么會出現(xiàn)架構(gòu)設(shè)計(jì)?
主要可歸納為以下幾個原因:
? ? 1)業(yè)務(wù)需求多,而且易變
? ? 2)軟件系統(tǒng)越來越復(fù)雜
? ? 3)參與的人越來越多
? ? 4)跨項(xiàng)目共性/特殊性的問題越來越多
? ? 5)技術(shù)發(fā)展日異月新
基于以上多種因素,導(dǎo)致系統(tǒng)維護(hù)成本越來越高:
? ? 1)系統(tǒng)規(guī)模龐大、內(nèi)部耦合嚴(yán)重,開發(fā)效率低;
? ??2)系統(tǒng)耦合嚴(yán)重,牽一發(fā)動全身,后續(xù)修改和擴(kuò)展困難;
? ??3)系統(tǒng)邏輯復(fù)雜,容易出問題,出問題后很難排查和修復(fù)。
3、架構(gòu)的目的是什么?
為了解決軟件系統(tǒng)復(fù)雜度帶來的問題。
其終極目標(biāo)是:用最小的人力成本來滿足構(gòu)建和維護(hù)系統(tǒng)的需求。
架構(gòu)設(shè)計(jì)的好處有哪些?
? ? 1)做到心中有數(shù),而不是一頭霧水(“新手”架構(gòu)師)
? ? 2)有的放矢,而不是貪大求全(“老鳥”架構(gòu)師)
一些Case:
? ? “我們的系統(tǒng)一定要能夠支撐到QPS 10w+...”
? ? “微信朋友圈的架構(gòu)就是這么做的,我們也這樣來吧...”
? ? “Docker現(xiàn)在很熱,我們的架構(gòu)應(yīng)該將Docker引入進(jìn)來...”
總結(jié)
隨著業(yè)務(wù)的發(fā)展,跨系統(tǒng)架構(gòu)設(shè)計(jì)必將成為我們重要的解決難題,屆時可能需要重新優(yōu)化設(shè)計(jì)。我們期望一張很大的架構(gòu)圖,囊括所有的業(yè)務(wù)相關(guān)的設(shè)計(jì),事實(shí)上如果不深入了解業(yè)務(wù),架構(gòu)圖就是紙上談兵。
架構(gòu)的本質(zhì)在于合理,合理表現(xiàn)為兩個方面:?
? ? 1)提高效率:用更少的人力承接更多的工作
? ??2)降低預(yù)算:用更少的機(jī)器承接更多的任務(wù)
?- END -
作者:架構(gòu)精進(jìn)之路,專注軟件架構(gòu)研究,技術(shù)學(xué)習(xí)與個人成長,關(guān)注并私信我回復(fù)“01”,送你一份程序員成長進(jìn)階大禮包。
Thanks for reading!