企業(yè)應(yīng)用架構(gòu)分析_第1頁
企業(yè)應(yīng)用架構(gòu)分析_第2頁
企業(yè)應(yīng)用架構(gòu)分析_第3頁
企業(yè)應(yīng)用架構(gòu)分析_第4頁
企業(yè)應(yīng)用架構(gòu)分析_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 企業(yè)應(yīng)用架構(gòu)分析在軟件開發(fā)領(lǐng)域,自從架構(gòu)這個(gè)詞被廣泛傳播之后,產(chǎn)生的架構(gòu)模式也非常多,架構(gòu)關(guān)注點(diǎn)也在增加。但回到“道”的層面,架構(gòu)的定義或者說本質(zhì)還是(來自百度百科):架構(gòu),又名軟件架構(gòu),是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。很多做業(yè)務(wù)功能的增刪改查開發(fā)感受到無趣的小伙伴常把做架構(gòu)想象成一片樂土,沒有嘈雜的業(yè)務(wù)聲音干擾,可以專心做一番牛 X 的技術(shù)。會(huì)把架構(gòu)單純的理解成,牛 X 的性能、牛 X 的 TPS、高可用,支撐了多少 PV 等等。但是其實(shí)這些只是架構(gòu)很小的一部分,并不是全部。在互聯(lián)網(wǎng)時(shí)代之前都是 C/S 程序的天下,那個(gè)時(shí)候并沒有對(duì)性能等有像現(xiàn)在這樣

2、的關(guān)注度,但是就已經(jīng)有架構(gòu)之說了。 世上本無架構(gòu),只是由于團(tuán)隊(duì)越大越需要對(duì)整體的規(guī)則做約定,好讓大家往同一個(gè)方向發(fā)力,避免各自為戰(zhàn),產(chǎn)生大量的內(nèi)耗,所以才逐漸形成了架構(gòu)。這條路就是“世上本無路,只是因?yàn)樽叩娜硕嗔俗兂闪寺贰?。為什么說一個(gè)軟件架構(gòu)是很重要的呢?當(dāng)我們的團(tuán)隊(duì)人數(shù)只有 2、3 個(gè)人,甚至只有 1 個(gè)人單槍匹馬的情況下,可能架構(gòu)凸顯的作用不是那么的明顯,但是如果團(tuán)隊(duì)大了之后相信下面的這些現(xiàn)象會(huì)比較常見:新上一個(gè)系統(tǒng),往往不是獨(dú)立存在的,一般都需要與現(xiàn)存的系統(tǒng)進(jìn)行交互,而需要集成交互的地方可能還很多,哪些集成是本系統(tǒng)需要實(shí)現(xiàn)的?同時(shí),一般會(huì)劃分為多個(gè)階段開發(fā),怎樣界定系統(tǒng)的邊界呢?軟件系

3、統(tǒng)是一個(gè)由多個(gè)模塊組成的整體。因此當(dāng)上游開發(fā)與我們負(fù)責(zé)的模塊銜接老是出問題時(shí),自己再做更多的努力也無法扭轉(zhuǎn)上游模塊的質(zhì)量差帶來的負(fù)面效果。(我想大家這時(shí)候肯定是抓狂的)每次看到別人寫的代碼,老覺得自己來寫的話肯定不會(huì)這么寫。比他寫的更好。(我們做技術(shù)的,自我感覺良好是個(gè)常態(tài))在某些場(chǎng)景下,自己腦子里有多套方案來實(shí)現(xiàn),但是對(duì)孰優(yōu)孰劣沒太大感覺,最終基本上就是拍腦袋選了一個(gè)。某塊代碼維護(hù)的次數(shù)多了,特別是中間由多個(gè)人接手過后,代碼風(fēng)格各異,難以理解。相似的代碼在好幾個(gè)地方出現(xiàn),特別是一些非業(yè)務(wù)性的代碼,比如日志處理等。再甚是在大型的分布式系統(tǒng)中,不同子程序使用了不同的同類型中間件,同樣導(dǎo)致維護(hù)成本

4、大增。在 2 個(gè)相依賴項(xiàng)目邊界處的設(shè)計(jì)產(chǎn)生了分歧,并且站在各自的角度看都有道理。任何事物都是有兩面性的,并不是說上面的這些問題,我們通過架構(gòu)就要往另外一個(gè)極端去走。比如在大型的分布式系統(tǒng)中,不同子程序的確有必要在某些時(shí)刻選擇同類型的其它中間件。如 Kafka 和 RabbitMQ 雖都是 MQ,但在特定的場(chǎng)景下能發(fā)揮的價(jià)值是無法相互替代的。所以我們做架構(gòu)有一點(diǎn)也是比較重要的,就是去 Balance,選擇一個(gè)投入產(chǎn)出比最優(yōu)的方案。關(guān)于這點(diǎn)第四段中會(huì)多說幾句。除此之外,架構(gòu)的主要目的是為了讓大家往同一個(gè)方向,在同一個(gè)標(biāo)準(zhǔn)之上去發(fā)散擴(kuò)張。一是把控硬性的下限標(biāo)準(zhǔn),提高整體的最短版,二是提高上限水平位,

5、也就是天花板位置,提供更大的發(fā)展空間。好比造一幢大樓,把框架結(jié)構(gòu)設(shè)計(jì)好搭好,讓大家形成一個(gè)共識(shí),什么是承重墻不能破壞,什么是創(chuàng)變空間可以自定義。在這樣的基礎(chǔ)下各自發(fā)展。這個(gè)看上去是個(gè)限制,但卻是做架構(gòu)最重要的任務(wù),所謂 再多的文檔,再多的最佳實(shí)踐都比不上一條約束。降低復(fù)雜度、降低理解難度,是實(shí)實(shí)在在的收益。最怕的就是憑空假設(shè)帶來的過度浪費(fèi)。更甚之,我們做架構(gòu)追求的理想國度是一個(gè)大家擁有一致共識(shí)的世界,架構(gòu)是大家都像吃飯喝水這樣習(xí)以為常的習(xí)慣。去理解或者接手其它人負(fù)責(zé)的項(xiàng)目的時(shí)候就好像是自己寫的一樣。這個(gè)時(shí)候就消滅架構(gòu)了,就好比現(xiàn)在沒有人會(huì)教你如何吃飯一樣。做架構(gòu)的最佳實(shí)踐 上面提到更多的是做架

6、構(gòu)的目的,那么要做好架構(gòu),主要就是要做好抽象,做抽象的方式是類比,做類比的方式可以使用用例圖。所以建議大家多畫圖,通過畫圖來將大腦中抽象的結(jié)果直觀的體現(xiàn)在前面,再來進(jìn)一步分析合理性。主要推薦 2 種圖的類別,一種就是前面提到的用例圖。如下圖:另外一種是魯棒圖,如圖:整個(gè)過程的主要目的是:描述其與外部實(shí)體(系統(tǒng)和最終用戶)的交互。標(biāo)識(shí)系統(tǒng)和外部實(shí)體間的信息和控制流。最后附一篇之前整理的軟件開發(fā)中會(huì)用到的圖的文章地址,有興趣的同學(xué)可以擴(kuò)展閱讀下:/Zachary-Fan/p/developdiagram.html理想的世界里,我們程序的邊界設(shè)計(jì)恰好匹配于業(yè)務(wù)邊界。然而我們作為工程師首先要承擔(dān)業(yè)務(wù)需

7、求的壓力,只能擠時(shí)間去做這些非業(yè)務(wù)性工作。也因此老項(xiàng)目的業(yè)務(wù)邊界也并不總是如新項(xiàng)目那樣明晰。這意味著做任何架構(gòu)的改動(dòng)要考慮優(yōu)先級(jí),特別在拆分業(yè)務(wù)領(lǐng)域之前認(rèn)真地思考業(yè)務(wù)的邊界。排定優(yōu)先級(jí),考量拆分的收益與風(fēng)險(xiǎn)。劃分業(yè)務(wù)的邊界,則需要更多的思考拆分后的未來將如何溝通協(xié)作,然后再考慮技術(shù)因素。在技術(shù)因素前,主要考量這幾點(diǎn):是否擁有獨(dú)立的團(tuán)隊(duì)來維護(hù),以及是否擁有發(fā)展為一項(xiàng)獨(dú)立業(yè)務(wù)的潛力。(非必要的情況下,一定要避免共享內(nèi)核的開發(fā)方式)圍繞領(lǐng)域而非 feature,有明確的維護(hù)團(tuán)隊(duì),避免過于細(xì)粒度。拆分或者組合之后,能否改善現(xiàn)有的協(xié)作流程。能否幫助區(qū)分核心、非核心業(yè)務(wù),改善穩(wěn)定性。上面這些完成了之后,便

8、是選擇合適的中間件、技術(shù)框架來滿足技術(shù)層面的要求,這個(gè)的選拔主要以下面幾點(diǎn)來考量:如果是直接引入第三方的中間件的話,成熟度如何?是否有大公司在用?(有大公司的口碑背書的肯定大大加分)近期的社區(qū)活躍度如何?(用于考量是否有更多的人在一起踩坑,降低各自遇到坑的數(shù)量和概率)硬指標(biāo),當(dāng)前場(chǎng)景的硬性要求是否滿足。如性能、對(duì)關(guān)鍵部分或者未來的可擴(kuò)展性等。軟指標(biāo),復(fù)雜度、可維護(hù)性等。這里可以羅列幾個(gè)競(jìng)品的優(yōu)劣勢(shì)。最重要的是要自己去親自驗(yàn)證上面的幾點(diǎn),并且做一定的模擬工作。如果曾經(jīng)用過或者有其中一部分的經(jīng)驗(yàn)可復(fù)用,這是加分項(xiàng),畢竟在使用的過程中才發(fā)現(xiàn) hold 不住它,那是災(zāi)難性的!什么是好架構(gòu) 之前有聽到過

9、一句話,概括的很精辟。好的架構(gòu)必須需要貼合業(yè)務(wù),那么把業(yè)務(wù) + 技術(shù)演變成一個(gè)數(shù)學(xué)公式來表達(dá)可以理解為:2 個(gè)數(shù)字的和等于 10,求如何組合能得到最大的乘積。那不是 3 * 7,也不似乎4 * 6,而是5 * 5。所以架構(gòu)不是生搬硬套,為了架構(gòu)(搞事情)而架構(gòu),趕時(shí)髦,或者說裝 X。我們應(yīng)避免通過個(gè)人的主觀意愿來主導(dǎo)。比如自己覺得某個(gè)中間件好,就”拿著錘子到處找釘子“,這一敲下來,看著不錯(cuò),但是帶來的成本和風(fēng)險(xiǎn)被忽略了??赡苡懈玫慕鉀Q方案,或者完全沒必要在當(dāng)下敲這一釘子下去。好的架構(gòu)需要評(píng)判投入產(chǎn)出比,收益更高的就是更好的架構(gòu),就如下圖的公式。產(chǎn)出可以理解為我們因此獲得的好處(諸如可靠性、安

10、全性、可擴(kuò)展性、可維護(hù)性、可伸縮性、性能等),成本是我們改造花費(fèi)的投入,如人力物力和時(shí)間。特別注意的是風(fēng)險(xiǎn)這點(diǎn),是很重要也是很容易被大家忽略的一點(diǎn),是起到指數(shù)級(jí)作用的。選擇的方案再好,如果都是一些 hold 不住的技術(shù),那么風(fēng)險(xiǎn)就是無窮大,導(dǎo)致減號(hào)右側(cè)無限趨近于 0,最終的結(jié)果就是收益是負(fù)數(shù),投入的成本打水漂,甚至還要加上其它額外的付出。如何成為架構(gòu)師 上面提到的這些關(guān)注點(diǎn)都是架構(gòu)師的職責(zé),另外特別重要的一點(diǎn)是,架構(gòu)師必須要是個(gè)有追求的“好碼農(nóng)”?。▌澲攸c(diǎn))。軟件架構(gòu)師不像建筑師,其面對(duì)的本身是一個(gè)抽象的事物,如果再脫離了實(shí)操,這基本和紙上談兵無異。所以實(shí)際工作中的難點(diǎn)、要點(diǎn)都得清楚,并且能夠

11、給出解決方案或者方向。另外只有熟悉實(shí)操才能更準(zhǔn)確的評(píng)估成本成為了一個(gè)真正的“好碼農(nóng)”就向架構(gòu)師邁出第一步了。而后呢,需要不斷以深 -廣 -深 -廣的節(jié)奏去開疆?dāng)U土,擴(kuò)大自己的知識(shí)領(lǐng)域,當(dāng)然需要以貼近當(dāng)前工作內(nèi)容的知識(shí)為主,這是第二步。到了這還沒完,還有打造三板斧:業(yè)務(wù)能力、溝通能力、個(gè)人魅力。題外話,在國內(nèi),純技術(shù)的架構(gòu)師沒有應(yīng)用型的架構(gòu)師吃的開。所以此文皆以應(yīng)用型架構(gòu)師的職能要求為參考。結(jié)語 回到文章開頭,架構(gòu)的表現(xiàn)形式有很多,從本質(zhì)上單體應(yīng)用的架構(gòu)設(shè)計(jì)思想和分布式系統(tǒng)是一致的,所謂服務(wù)化其實(shí)也是模塊化的思想,只是維度的不同,導(dǎo)致用到的一些工具或者環(huán)境不同,但這都是“術(shù)”層面的東西。光學(xué)這些招數(shù),永遠(yuǎn)也學(xué)不完。架構(gòu)之路漫長(zhǎng),繼續(xù)前行,共勉。關(guān)于作者:張帆,在電商領(lǐng)域工作了 7 年,7 年在職于上??傻镁W(wǎng)絡(luò)科技 (集團(tuán)) 有限公司,現(xiàn)任職首席

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論