本人曾就職于58, 三星 ,阿里 歡迎大家評論,關(guān)注。
本想自己定義一下架構(gòu)設(shè)計的要點,發(fā)現(xiàn)百度百科中總結(jié)的就很好“系統(tǒng)架構(gòu)既需要掌控整體又需要洞悉局部瓶頸并依據(jù)具體的業(yè)務(wù)場景給出解決方案,并能把各種目標(biāo)需求進行不同維度的擴展?!碧釤捯幌拢?/p>
熟悉業(yè)務(wù):技術(shù)本身是無“價值”的,要落地到具體的使用場景中為客戶/用戶解決問題。
掌控整體又要洞悉局部瓶頸:我們時常要對技術(shù)實現(xiàn)進行優(yōu)化、時常要解決各種隱藏的bug,但是正如“過早優(yōu)化是萬惡之源”這句話的深刻含義一般,我們應(yīng)該在明晰全局的基礎(chǔ)上再去確定需要解決哪個局部問題。
不同維度的擴展:面對不斷的變化,靈活性與可擴展性是我們進行架構(gòu)設(shè)計所追求的目標(biāo)。
這是一些做架構(gòu)的核心要點,其中還有很多其他的點??纯次业狞c滴領(lǐng)悟。
第一階段:外包生涯
作為技術(shù)人員仿佛會本能的排斥去做IT外包的工作,仿佛這樣就會成為IT界“藍(lán)翔”的代言人。其實做外包人員并不意味著低端和無成長性,特別是對于在一些有著嚴(yán)格規(guī)范和標(biāo)準(zhǔn)的外包企業(yè)中,有對代碼規(guī)范、注釋和文檔的要求;由于只需要做業(yè)務(wù)中的一部分,這就要求把業(yè)務(wù)功能和接口設(shè)計的足夠分離。正是這段經(jīng)歷讓我形成了規(guī)范的代碼習(xí)慣和有了功能接口化、模塊化的思維。
參考:華為代碼規(guī)范文檔,?Google?開源項目風(fēng)格指南?;書籍—《代碼大全》
第二階段:研發(fā)單機軟件
這是自己第一次獨立負(fù)責(zé)研發(fā)一款軟件,開始接觸客戶了解業(yè)務(wù),然后訴諸于代碼實現(xiàn)。在這個過程中有一個印象極深的片段,接手的代碼有一個長達(dá)千行的函數(shù),代碼命名隨意也沒有注釋,看得我云里霧里。最后導(dǎo)致自己付出了大量的時間,包括利用debug工具一行行跟代碼才了解清楚業(yè)務(wù)邏輯,心里默默地走了數(shù)百遍的草泥馬。隨后我便用第一階段養(yǎng)成的好習(xí)慣開始進行眾多功能的分割,把這個千行的龐然大物分離成一個個套用的小函數(shù),另外在代碼(命名和注釋)上進行規(guī)范,不但利于自己后期的維護,我想也不至于難為下一個接手的研發(fā)人員。在這段經(jīng)歷中,我開始有了把一些工具函數(shù)抽出來寫成工具類的意識(這期間還看了很多開源的代碼,從其中抽出不少工具函數(shù))。另外一個重點,就是對單一程序插件機制的利用,比如可以靈活的調(diào)節(jié)界面展現(xiàn)元素,利用程序的動態(tài)加載機制(動態(tài)庫)來對程序進行局部升級和邏輯改變。
參考:snort和 tcpdump的源碼充分實踐了程序的插件機制;博客文章—《提高工作效率的工具“類”》
第三階段:Client/Server端編程
C(B)/S架構(gòu)意味著開始接觸網(wǎng)絡(luò)編程、web編程。這個階段對自己影響最大的應(yīng)該是分層的思想。網(wǎng)絡(luò)協(xié)議棧分層的精妙設(shè)計和java SSH框架的使用都深深影響了自己,比如自己一個即時聊天系統(tǒng)的架構(gòu)設(shè)計就充分使用了分層的思想,包括后期使用分層的思想搭建了一些業(yè)務(wù)無關(guān)的技術(shù)平臺,便利了自身也充實了公司的技術(shù)貨架。
參考:博客文章—《IM系統(tǒng)架構(gòu)設(shè)計之淺見》,技術(shù)平臺源碼github—高性能TCP網(wǎng)絡(luò)服務(wù)器程序,基于TCP協(xié)議的遠(yuǎn)程過程調(diào)用框架客戶端實現(xiàn)
第四階段:轉(zhuǎn)向Linux系統(tǒng)、服務(wù)端編程
2011年時隨著互聯(lián)網(wǎng)/移動互聯(lián)網(wǎng)的風(fēng)暴愈加狂烈,90%以上的后端服務(wù)都是Linux承載,客戶端技術(shù)又太碎片化,所以自己提前預(yù)判,將自己的技術(shù)棧從Windows全面轉(zhuǎn)向Linux,從客戶端轉(zhuǎn)向服務(wù)端。如果說自己的架構(gòu)生涯里轉(zhuǎn)折點只能選一個,我會選這個階段。Linux體系和windows就是兩種不同的文化,其中《Unix編程藝術(shù)》這本書可以說是我的精神導(dǎo)師,我閱讀了不下四遍。書中的很多思想都成為我今后做架構(gòu)的依據(jù)和準(zhǔn)則,比如“模塊原則:使用簡潔的接口拼合簡單的部件;”,濃縮成一個詞一句話“KISS——Keep?It?Simple,Stupid!”。當(dāng)Martin?Fowler?與?James?Lewis 還未提出微服務(wù)的概念時,依據(jù)這些思想我已經(jīng)做了很多微服務(wù)的設(shè)計和實踐。
參考:博客文章—《三讀《UNIX編程藝術(shù)》——UNIX哲學(xué)》《服務(wù)端架構(gòu)中的“網(wǎng)關(guān)服務(wù)器”》
第五階段:搭建互聯(lián)網(wǎng)平臺級產(chǎn)品
這個階段因為自己的角色已經(jīng)不僅僅是個技術(shù)人員,而是已經(jīng)深入到業(yè)務(wù)和產(chǎn)品設(shè)計以及運營中去。這時的思路是一定要以業(yè)務(wù)指導(dǎo)架構(gòu)設(shè)計,我們不可能考慮全面所有事,架構(gòu)可以隨著業(yè)務(wù)發(fā)展慢慢演化。但此時的架構(gòu)范疇已經(jīng)不單單是某個程序的架構(gòu),而是技術(shù)選型、架構(gòu)設(shè)計、性能優(yōu)化、?安全、系統(tǒng)發(fā)布、運維監(jiān)控、業(yè)務(wù)數(shù)據(jù)分析等對整個業(yè)務(wù)鏈的支撐。
參考:待總結(jié)(包含移動APP,智能硬件、web開發(fā)、數(shù)據(jù)庫、云服務(wù)、高并發(fā)等等)