我的“技術架構”之旅

導語:很久沒寫過涉及技術的文章了,因爲進行職業轉型後對技術有種很糾結的心態。熱愛——每每看到五顏六色的代碼窗口就會心裏發酸,想起曾經那是生活中的一份燦爛心情;不自信——這麼久離開技術會不會已經落後生疏(雖然一直沒有脫離技術的學習與參與,但是失去了一線寫代碼的實踐)。今天恰好去參加AWS(亞馬遜雲服務)的一個區域討論會,一位亞馬遜的架構師在爲大家講解AWS雲服務及一些案例的架構設計,很多熟悉的概念,還有這位架構師的謙遜和真實,一切是那麼親切。所以心血來潮,想回顧一下自己做架構的職業之旅。




本想自己定義一下架構設計的要點,發現百度百科中總結的就很好“系統架構既需要掌控整體又需要洞悉局部瓶頸並依據具體的業務場景給出解決方案,並能把各種目標需求進行不同維度的擴展。”提煉一下:

  • 熟悉業務:技術本身是無“價值”的,要落地到具體的使用場景中爲客戶/用戶解決問題。

  • 掌控整體又要洞悉局部瓶頸:我們時常要對技術實現進行優化、時常要解決各種隱藏的bug,但是正如“過早優化是萬惡之源”這句話的深刻含義一般,我們應該在明晰全局的基礎上再去確定需要解決哪個局部問題。

  • 不同維度的擴展:面對不斷的變化,靈活性與可擴展性是我們進行架構設計所追求的目標。

這是一些做架構的核心要點,其中還有很多其他的點。看看我的點滴領悟。


第一階段:外包生涯

作爲技術人員彷彿會本能的排斥去做IT外包的工作,彷彿這樣就會成爲IT界“藍翔”的代言人。其實做外包人員並不意味着低端和無成長性,特別是對於在一些有着嚴格規範和標準的外包企業中,有對代碼規範、註釋和文檔的要求;由於只需要做業務中的一部分,這就要求把業務功能和接口設計的足夠分離。正是這段經歷讓我形成了規範的代碼習慣和有了功能接口化、模塊化的思維。

參考:華爲代碼規範文檔, Google 開源項目風格指南 ;書籍—《代碼大全》


第二階段:研發單機軟件

這是自己第一次獨立負責研發一款軟件,開始接觸客戶瞭解業務,然後訴諸於代碼實現。在這個過程中有一個印象極深的片段,接手的代碼有一個長達千行的函數,代碼命名隨意也沒有註釋,看得我雲裏霧裏。最後導致自己付出了大量的時間,包括利用debug工具一行行跟代碼才瞭解清楚業務邏輯,心裏默默地走了數百遍的草泥馬。隨後我便用第一階段養成的好習慣開始進行衆多功能的分割,把這個千行的龐然大物分離成一個個套用的小函數,另外在代碼(命名和註釋)上進行規範,不但利於自己後期的維護,我想也不至於難爲下一個接手的研發人員。在這段經歷中,我開始有了把一些工具函數抽出來寫成工具類的意識(這期間還看了很多開源的代碼,從其中抽出不少工具函數)。另外一個重點,就是對單一程序插件機制的利用,比如可以靈活的調節界面展現元素,利用程序的動態加載機制(動態庫)來對程序進行局部升級和邏輯改變。

參考:snort和 tcpdump的源碼充分實踐了程序的插件機制;博客文章—《提高工作效率的工具“類”》


第三階段:Client/Server端編程

C(B)/S架構意味着開始接觸網絡編程、web編程。這個階段對自己影響最大的應該是分層的思想。網絡協議棧分層的精妙設計和java SSH框架的使用都深深影響了自己,比如自己一個即時聊天系統的架構設計就充分使用了分層的思想,包括後期使用分層的思想搭建了一些業務無關的技術平臺,便利了自身也充實了公司的技術貨架。

參考:博客文章—《IM系統架構設計之淺見》,技術平臺源碼github—高性能TCP網絡服務器程序基於TCP協議的遠程過程調用框架客戶端實現


第四階段:轉向Linux系統、服務端編程

2011年時隨着互聯網/移動互聯網的風暴愈加狂烈,90%以上的後端服務都是Linux承載,客戶端技術又太碎片化,所以自己提前預判,將自己的技術棧從Windows全面轉向Linux,從客戶端轉向服務端。如果說自己的架構生涯裏轉折點只能選一個,我會選這個階段。Linux體系和windows就是兩種不同的文化,其中《Unix編程藝術》這本書可以說是我的精神導師,我閱讀了不下四遍。書中的很多思想都成爲我今後做架構的依據和準則,比如“模塊原則:使用簡潔的接口拼合簡單的部件;”,濃縮成一個詞一句話“KISS——Keep It Simple,Stupid!”。當Martin Fowler 與 James Lewis 還未提出微服務的概念時,依據這些思想我已經做了很多微服務的設計和實踐。

參考:博客文章—《三讀《UNIX編程藝術》——UNIX哲學》  《服務端架構中的“網關服務器”》


第五階段:搭建互聯網平臺級產品

這個階段因爲自己的角色已經不僅僅是個技術人員,而是已經深入到業務和產品設計以及運營中去。這時的思路是一定要以業務指導架構設計,我們不可能考慮全面所有事,架構可以隨着業務發展慢慢演化。但此時的架構範疇已經不單單是某個程序的架構,而是技術選型、架構設計、性能優化、 安全、系統發佈、運維監控、業務數據分析等對整個業務鏈的支撐。

參考:待總結(包含移動APP,智能硬件、web開發、數據庫、雲服務、高併發等等)




以上就是今天心血來潮的一些主要節點的回憶,其實還有很多的點點滴滴,正是由於這些點滴構成了自己的技術思想和職業生涯。敬曾經作爲技術人員的自己,敬所有還在技術崗位的程序猿兄弟美眉們。 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章