什么是架構(gòu),什么是架構(gòu)師铆遭?這似乎是聊架構(gòu)話題時永恒的問題扁藕。
從內(nèi)心講我真的不想回答架構(gòu)具體需要做什么,架構(gòu)師應(yīng)該具體負責什么疚脐。因為從實際情況看亿柑,在不同的系統(tǒng)層級,不同的需求下架構(gòu)師的職責也會不同棍弄;從不同的技術(shù)角度看望薄,架構(gòu)師又是個變色龍——一時是技術(shù)的大拿,一時是技術(shù)的規(guī)劃者呼畸,一時是技術(shù)團隊的指揮者痕支。
那么,該如何回答“什么是架構(gòu)蛮原,什么是架構(gòu)師”這個問題呢卧须?這或許需要先搞清楚另外一個問題——一名程序員是如何走上架構(gòu)師之路的?我從許多朋友那里了解到了很多實際案例儒陨,程序員走上架構(gòu)師之路花嘶,總結(jié)起來最多的原因是因為他早前代碼寫的好。
那么蹦漠,代碼寫的好就是架構(gòu)嗎椭员?顯然不是。代碼寫的好只是表象笛园,做所有事情都需要規(guī)劃隘击,尤其是一個復(fù)雜的軟件系統(tǒng),這更需要規(guī)劃研铆,否則可能連一行代碼都寫不出埋同。復(fù)雜的軟件系統(tǒng)一定會需要做很多抽象設(shè)計、對象規(guī)劃棵红、接口規(guī)劃等準備動作凶赁。也就是“上一輩程序員”口中所說的:詳細設(shè)計。做架構(gòu)主要的事情也依舊如此窄赋,需要對整個系統(tǒng)進行系統(tǒng)的規(guī)劃:模塊哟冬、通訊楼熄、邊界忆绰、擴展、技術(shù)下沉等工作可岂。這樣的規(guī)劃完成之后項目方能正常跑起來错敢。
當然,架構(gòu)也不僅僅是規(guī)劃,還要做的另一件大事就是技術(shù)識別稚茅。識別出系統(tǒng)中技術(shù)的難易區(qū)域纸淮,并分解復(fù)雜技術(shù),使之成為一個個技術(shù)的黑盒子亚享,在此之上再進行新的技術(shù)規(guī)劃咽块,使整個系統(tǒng)從技術(shù)角度來看是分層次的,從難到易欺税,從大到小侈沪,但各層之間又是互相的黑盒。這也常說的讓系統(tǒng)模塊間達到“雞犬相聞老死不相往來“的狀態(tài)晚凿。
系統(tǒng)技術(shù)的識別完成之后還要對另一種技術(shù)進行識別亭罪,即人的技術(shù)。什么樣的工程師適合寫哪一層的代碼歼秽,那一層的技術(shù)對程序員技術(shù)的深入程度要求到哪個點上应役。在做完這些事情整個架構(gòu)表面上看是平穩(wěn)進行了。
但實際上燥筷,架構(gòu)的問題一定會再次前來打擾:首先是測試工程師來詢問“對于整體系統(tǒng)架構(gòu)而言這個應(yīng)用該如何更好的被測試箩祥?”“我們需要用什么樣的技術(shù)來更好地保證軟件的質(zhì)量?”然后是運維工程師來詢問“該系統(tǒng)將跑在什么樣的環(huán)境之上肆氓?”“我們應(yīng)該提供什么樣的服務(wù)器滥比?”“服務(wù)器上我們會做哪些配置和安裝哪些基礎(chǔ)軟件?”“我們需要提供一個什么樣的網(wǎng)絡(luò)環(huán)境做院?”“有什么樣特殊的網(wǎng)絡(luò)配置盲泛?”“我們需要做哪些安全策略?”……此時键耕,架構(gòu)師不時會像是一個掉入冰洞的獵人無比無助寺滚,頭頂成群的蒼蠅飛著,這些問題屈雄,有的懂點村视,有的不專業(yè),還有的聽說過沒干過酒奶,有些僅限知道原理蚁孔。其實這些辣手的事情是考驗架構(gòu)師的一種能力:技術(shù)的寬度。
一個架構(gòu)師需要足夠的技術(shù)的寬度惋嚎。從軟件到硬件杠氢,從開發(fā)到測試,從運維到安全等都需要面面俱到的了解另伍。當然你可能不是這單方面領(lǐng)域里面最深入的人鼻百,但是你需要知道它們是怎么做的(不僅僅是皮毛,要深入原理),并且要知道它們組合起來是個什么樣的東西温艇。技術(shù)面也足夠?qū)捔酥笠虮遣皇蔷蜁蔀橥昝兰軜?gòu)師呢?
答案是不會勺爱,因為還有新的問題要過來晃琳。這次的問題諸如“系統(tǒng)在未來的運行過程中運維需要做什么?”“系統(tǒng)在未來的功能迭代中如何更方便的擴展琐鲁?”“系統(tǒng)應(yīng)該怎么修改蝎土?”“系統(tǒng)應(yīng)該被怎么樣升級?”這時的你是不時很困惑绣否?是不是感覺這個架構(gòu)的世界好長啊誊涯,怎么像保姆一樣什么都要管。但仔細想想這是應(yīng)該的蒜撮,因為一個系統(tǒng)初次開發(fā)并交付只是它生命周期中的一小部分而已暴构。后面的維護、改造段磨、升級才占了整個軟件生命周期的絕大部分時間取逾。你是它的架構(gòu)設(shè)計者,是它靈魂之所在苹支,你當然應(yīng)該設(shè)計好它的未來砾隅。這也是架構(gòu)師做好的最后一件事情:系統(tǒng)未來的設(shè)計。
仔細想想债蜜,上文提到的這些案例全是架構(gòu)的糗事晴埂,但糗事其實是架構(gòu)師成長路上的必經(jīng)之路。因為一個沒有經(jīng)歷失敗的架構(gòu)師一定不是個好的架構(gòu)師寻定。只有經(jīng)歷各種苦難儒洛,越過各種坑和各種痛苦之后才能成為一個優(yōu)秀的架構(gòu)師。架構(gòu)師也是一個很獨特職業(yè),不像現(xiàn)代教育里已經(jīng)很成熟的人文和物理教育體系,勤奮的人大都能經(jīng)過系統(tǒng)的閱讀和教育能走向成功咙俩。架構(gòu)更像一種藝術(shù)、一門哲學恼蓬,架構(gòu)師們也仿佛經(jīng)過多年積累后忽然間就像打通了任督二脈。那么走向架構(gòu)師的路是不是無跡可尋呢僵芹?——這個問題留個大家來思考处硬。
架構(gòu)師的定義?
個人覺得架構(gòu)師需要具有以下幾特點:
知識廣度:需要知道主流技術(shù)為什么誕生淮捆,能解決什么問題郁油?如果同一種業(yè)務(wù)用不用的技術(shù)來實現(xiàn),會有什么哪些優(yōu)缺點攀痊?比如:流行的ORM框架Mybatis 和 hibernate 桐腌,他們之間的優(yōu)缺點是什么?要有清晰的認識會能在技術(shù)造型時做出正確的決定苟径。
抽象能力:對業(yè)務(wù)和技術(shù)進行抽象案站。業(yè)務(wù)抽象就是對需求進行分析后,能夠建立完美的實體類以及他們之間的聯(lián)系棘街。技術(shù)抽象是對整體架構(gòu)進行一個分層蟆盐,各層之間的交互。這至關(guān)重要遭殉,如果技術(shù)抽象能力不足石挂,這會導致整個系統(tǒng)的架構(gòu)不靈活,難以維護和擴展险污。
知識的深度:至少是某個領(lǐng)域的專家痹愚,比如消息隊列,activeMQ熟悉其源碼蛔糯,知道其實現(xiàn)拯腮。
優(yōu)秀的學習能力:對新的技術(shù)和前沿性的技術(shù)進行學習,使用它來解決工作中的業(yè)務(wù)問題蚁飒。
那么你該如何去做呢?我覺得可以從以下幾個步驟開始:
1: 扎實的JAVA 基礎(chǔ)动壤,Think in java上介紹的內(nèi)容都能理解,做到這一步恭喜成為了程序員淮逻。
2:熟練使用主流框架琼懊,如:mybatis,spring 等爬早。
3:研究過至少一種以web框架的源碼肩碟,如spring mvc ,struts 等凸椿。
4:架構(gòu)過或者參與過高并發(fā)系統(tǒng)設(shè)計削祈,知道如何應(yīng)對突發(fā)情況。
5:對自己所處的業(yè)務(wù)能夠根據(jù)自己的知識維度脑漫,提出優(yōu)化建議或者預(yù)測其風險點髓抑。
其實能否成為架構(gòu)師跟機遇有很大關(guān)系,比如一個程序員优幸,以上都做到了吨拍,但是公司并沒有給他這個機會去做,一個真正架構(gòu)的機會网杆。因為之前的架構(gòu)師不離職他就沒有機會羹饰,這就是現(xiàn)實伊滋!
如果你想學習Java工程化、高性能及分布式队秩、高性能笑旺、深入淺出。性能調(diào)優(yōu)馍资、Spring筒主,MyBatis,Netty源碼分析和大數(shù)據(jù)等知識點可以來找我鸟蟹。而現(xiàn)在我就有一個平臺可以提供給你們學習乌妙,你想拿高薪的,想學習的建钥,想就業(yè)前景好的藤韵,想跟別人競爭能取得優(yōu)勢的,想進阿里面試但擔心面試不過的熊经,你都可以來荠察,群號為:668395460
注:加群要求
1、具有1-5工作經(jīng)驗的奈搜,面對目前流行的技術(shù)不知從何下手悉盆,需要突破技術(shù)瓶頸的可以加。
2馋吗、在公司待久了焕盟,過得很安逸,但跳槽時面試碰壁宏粤。需要在短時間內(nèi)進修脚翘、跳槽拿高薪的可以加。
3绍哎、如果沒有工作經(jīng)驗来农,但基礎(chǔ)非常扎實,對java工作機制崇堰,常用設(shè)計思想沃于,常用java開發(fā)框架掌握熟練的,可以加海诲。
4繁莹、覺得自己很牛B,一般需求都能搞定特幔。但是所學的知識點沒有系統(tǒng)化咨演,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加。
5.阿里Java高級大牛直播講解知識點蚯斯,分享知識薄风,多年工作經(jīng)驗的梳理和總結(jié)饵较,帶著大家全面、科學地建立自己的技術(shù)體系和技術(shù)認知遭赂!
6.小號加群一律不給過循诉,謝謝。