導語:好久沒寫過涉及技術的文章了,由於進行職業轉型後對技術有種很糾結的心態。熱愛——往往看到五光十色的代碼窗口就會內心發酸,想起曾經那是生活中的一份燦爛心情;不自信——這麼久離開技術會不會已經落後生疏(雖然一直沒有脫離技術的學習與參與,可是失去了一線寫代碼的實踐)。今天剛好去參加AWS(亞馬遜雲服務)的一個區域討論會,一位亞馬遜的架構師在爲你們講解AWS雲服務及一些案例的架構設計,不少熟悉的概念,還有這位架構師的謙遜和真實,一切是那麼親切。因此心血來潮,想回顧一下本身作架構的職業之旅。java
本想本身定義一下架構設計的要點,發現百度百科中總結的就很好「系統架構既須要掌控總體又須要洞悉局部瓶頸並依據具體的業務場景給出解決方案,並能把各類目標需求進行不一樣維度的擴展。」提煉一下:
git
熟悉業務:技術自己是無「價值」的,要落地到具體的使用場景中爲客戶/用戶解決問題。github
掌控總體又要洞悉局部瓶頸:咱們時常要對技術實現進行優化、時常要解決各類隱藏的bug,可是正如「過早優化是萬惡之源」這句話的深入含義通常,咱們應該在明晰全局的基礎上再去肯定須要解決哪一個局部問題。web
不一樣維度的擴展:面對不斷的變化,靈活性與可擴展性是咱們進行架構設計所追求的目標。數據庫
這是一些作架構的核心要點,其中還有不少其餘的點。看看個人點滴領悟。編程
第一階段:外包生涯windows
做爲技術人員彷彿會本能的排斥去作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開發、數據庫、雲服務、高併發等等)
以上就是今天心血來潮的一些主要節點的回憶,其實還有不少的點點滴滴,正是因爲這些點滴構成了本身的技術思想和職業生涯。敬曾經做爲技術人員的本身,敬全部還在技術崗位的程序猿兄弟美眉們。