Java程序員如何運(yùn)用所掌握的技術(shù)構(gòu)建一個(gè)完整的業(yè)務(wù)架構(gòu)?
近幾年開(kāi)始做一些新系統(tǒng)架構(gòu)設(shè)計(jì)的工作,也參與了兩三個(gè)新系統(tǒng)的建設(shè)工作,我就按照我的理解,說(shuō)一下我的工作步驟,由于經(jīng)驗(yàn)也不多,所以有錯(cuò)誤的地方請(qǐng)留言指正。
業(yè)務(wù)的理解
首先,業(yè)務(wù)的理解是必不可少的,你不可能脫離業(yè)務(wù)去空想一個(gè)架構(gòu),這個(gè)是不切實(shí)際的:
1.前期的業(yè)務(wù)溝通我都是會(huì)參加的,并且我參與的系統(tǒng)大多數(shù)都是老系統(tǒng)的重構(gòu),所以老系統(tǒng)是什么樣子,都需要進(jìn)行了解。
2.業(yè)務(wù)的需求究竟是一個(gè)什么樣子的,需要深度挖掘,避免遇到假需求。
3.和周邊系統(tǒng)有哪些交互,這個(gè)是必須了解的。
4.老系統(tǒng)有哪些缺陷,是需要在新系統(tǒng)避免的。
5.對(duì)新系統(tǒng)的業(yè)務(wù)壓力和數(shù)據(jù)量,需要有一個(gè)評(píng)估。
如何設(shè)計(jì)
在設(shè)計(jì)的過(guò)程中,技術(shù)知識(shí)的儲(chǔ)備很重要,你需要了解每項(xiàng)技術(shù)的優(yōu)缺點(diǎn)和適用場(chǎng)景,常見(jiàn)問(wèn)題的解決方案。
1.首先說(shuō)說(shuō)什么是“假需求”,比如一個(gè)人管你接紙巾(需求),你沒(méi)有(無(wú)法滿足需求),你是直接說(shuō)“我沒(méi)有”還是說(shuō)“你要紙巾做什么(挖掘客戶真實(shí)需求)”。對(duì)方說(shuō)“我要紙巾擦桌子(真實(shí)需求)”。你正好有抹布,不就滿足對(duì)方真實(shí)的需求了么。挖掘出用戶真實(shí)的需求之后,才能避免一些無(wú)用的機(jī)構(gòu)設(shè)計(jì)。
2.和周邊系統(tǒng)交互問(wèn)題,這個(gè)也很關(guān)鍵:如果有系統(tǒng)會(huì)請(qǐng)求你的服務(wù),并且對(duì)方系統(tǒng)是24小時(shí)運(yùn)行的,那么你必須考慮集群部署+灰度發(fā)布了;如果你和另外一個(gè)系統(tǒng)的交易實(shí)時(shí)性要求不是那么的高但是請(qǐng)求很頻繁,那么就可以考慮引入消息中間件。
3.老系統(tǒng)的缺陷,是一定要避免再次入坑的。比如老系統(tǒng)某些功能在效率上很差,那么在新系統(tǒng)的設(shè)計(jì)中,是不是就可以考慮引入內(nèi)存數(shù)據(jù)庫(kù)。
4.業(yè)務(wù)壓力的評(píng)估,是必不可少的。如果并發(fā)量比較高,那么需要多少資源實(shí)現(xiàn)都要評(píng)估出來(lái),并且集群+負(fù)載均衡。如果數(shù)據(jù)量很大的話,是不是考慮讀寫(xiě)分離,甚至分庫(kù)分表。
5.架構(gòu)設(shè)計(jì)包括系統(tǒng)功能結(jié)構(gòu)設(shè)計(jì)、系統(tǒng)技術(shù)架構(gòu)設(shè)計(jì)(所用技術(shù)及分層)、數(shù)據(jù)架構(gòu)設(shè)計(jì)、系統(tǒng)部署方案、網(wǎng)絡(luò)部署方案等等。

