本文已收錄GitHub,更有互聯網大廠面試真題,面試攻略,高效學習資料等git
學習架構呢,要掌握的東西有不少,你是否是開始擔憂本身一生都學不完呢?其實,咱們也不須要一會兒鋪開學習全部的架構技能,重要的是把控好學習的節奏,在適當的時間學習適當的內容,咱們能夠結合實際工做,一步步地成長。因此今天這一講,我想給你提供一些架構學習的重點方向和路徑建議。github
在技術架構篇,我針對系統的高可用、高性能、可伸縮和低成本,給你介紹了不少的架構設計原則,不一樣的原則對應着不一樣的目標,這裏我把這些架構原則和目標彙總成一個表格,來幫助你更直觀地瞭解它們。面試
限於篇幅,這裏我挑選幾個原則來重點說下:算法
可回滾 / 可禁用數據庫
使用成熟技術設計模式
使用同質化硬件緩存
這些架構原則都是咱們要深刻理解,而且在實踐中要逐漸運用和掌握的。那麼下面,我就帶你來了解一下架構的具體落地過程,幫助你更好地理解架構師的職責和技能要求。服務器
簡單地說,架構師的職責就是負責設計架構,並跟蹤架構的實施過程,解決過程當中出現的疑難問題,確保架構順利落地。在以前的文章中介紹過架構師的能力模型,好比抽象思惟、平衡取捨、溝通能力等等。接下來,我就結合架構的落地過程和架構師的能力模型,來具體說下架構師是如何開展工做的。網絡
架構師的工做從接到項目需求,或者從本身主動識別系統當前的問題開始,TA 的工做過程能夠分爲三個大階段。數據結構
首先,架構師要和產品經理或者業務人員溝通,瞭解業務;和開發人員溝通,瞭解系統。瞭解完系統和業務後,架構師接下來就要設計具體的方案,方案設計要分三步走:
方案設計好以後,最後還要進行宣講,架構師須要說服相關的人員接受方案,而且在後續的方案執行中,負責跟蹤架構的落地,若是過程當中有疑難問題,架構師還要協助解決。
因此,咱們能夠看到,架構師在設計方案時,會有一個反覆迭代的過程,最終才能獲得一個簡約而不簡單的方案。而且在方案設計的先後,架構師還須要和大量的人員進行溝通,這些都須要架構師具有寬廣的知識面和良好的溝通能力。
那麼,架構師都須要掌握哪些具體的技能呢?這裏我給你提供了一個簡化的架構師技能圖譜,能夠幫助你按部就班地學習這些架構技能。
首先,做爲架構師,咱們須要瞭解計算機硬件和操做系統的相關知識,它們是負責具體幹活的,若是對它們有深刻的瞭解,咱們就能知道系統底層是怎麼執行的,在作具體設計的時候,咱們也就能夠作各類優化。好比說,在設計 RPC 通信框架時,咱們能夠經過 IO 多路複用和內存零拷貝技術,來提高服務端併發處理請求的能力。
在這之上就是具體技術相關的內容,從淺到深能夠分爲三個部分:
掌握了這些技術能力以後,你就能夠逐漸往全面的架構師發展了。好比說,你能夠結合業務,來設計應用體系,包括數據模型和服務設計;你能夠了解各類應用架構模型,知道它們的優缺點和適用場景,可以定義一個良好的應用依賴關係。
再往上,就是成爲業務領域專家。在這個階段,你已經知道如何經過業務拆分,實現業務之間的解耦;如何經過業務抽象,實現業務的擴展和重用。
到最後,你已經對各類架構設計的目標和架構原則都很是瞭解了,知道面對一個具體的問題,大體都有哪些解決的手段;而後,通過大量的實踐,你可以把技術架構、應用架構、業務架構融會貫通,並針對具體狀況,對架構的各個目標作良好的平衡。固然,做爲架構師,你還要和一系列的人員打交道,這時候就須要你培養更多的軟技能,能把複雜的架構問題以簡單的方式表達出來。
如今,你已經清楚了做爲一個架構師,TA 須要具有什麼樣的知識結構。若是你想成爲一名架構師,在不一樣的成長階段,你還須要學習不一樣的內容。這裏,我以 Java 爲例,進一步給出學習的重點內容,給你提供更具體的參考。
第一個階段是初級開發階段。
在這個階段,你須要深刻學習數據結構和算法,而且必定要深刻掌握單體應用的分層架構,由於這是架構設計的基礎。
另外,對 JDK 的一些核心類,你不能僅僅停留在使用層面,而是要深刻研讀源代碼,瞭解它的內部設計。這樣你就知道如何開發一個高效的程序,如何進行各類代碼級的調優。
第二個階段是高級開發階段。
首先,你須要很是瞭解設計模式,每一個設計模式均可以看作是一個小型的架構設計,這裏面有很好的設計原則和抽象思惟,你在作系統設計時能夠借鑑它們。
而後,你須要很是瞭解核心的中間件,包括 DB、微服務框架、緩存和消息系統,要清楚地瞭解它們的適用場景(好比消息系統的削峯、解耦和異步),知道如何對它們進行調優,以及瞭解它們都有哪些常見的坑等等,核心中間件是咱們作技術選型的基礎。
同時,你要深刻掌握數據庫設計和服務接口設計,瞭解它們的最佳設計實踐,它們承載了系統核心的業務數據和業務邏輯。
最後,你須要進一步研讀源碼,源碼是活的教材,它包含了大量實用的設計原則和技巧。這裏我建議你選擇一些開源的開發框架和 RPC 通訊框架,去深刻了解它們內部的實現原理,好比 Spring 和 Netty。
第三個階段是架構師階段,成爲技術專家。
首先,你須要深刻了解網絡通訊,好比說網絡分層和 HTTP/TCP 協議,還有各類常見的RPC 通信框架,瞭解它們的特性和適用場景,這樣你在設計分佈式系統時,就可以進行合理的技術選型。
而後是瞭解底層系統,包括 JVM、操做系統和硬件原理,再往上延伸到系統的接入部分,瞭解常見的負載均衡特性和用法,這樣你能夠對總體的系統有個透徹的瞭解,把各個環節能夠很好地銜接起來。這裏,我特別建議你去讀下 Java 和 JVM 的規格說明書,瞭解 Java 的底層設計。
最後,你須要熟練掌握各類設計工具和方法論,好比領域驅動設計和 UML,瞭解經常使用的架構設計原則,這樣你就可以結合業務,選擇合適的應用架構和技術架構並進行落地。在這一階段,對你總的要求就是可以從端到端的角度進行業務分析和系統設計。
第四階段是大師階段。
在這個階段,你須要對架構的各個目標都很是瞭解,除了業務系統設計,你還要對運維和監控有深刻的認知。同時,你須要瞭解業界的架構實踐,跟蹤技術的發展趨勢,若是出來一項新技術,你能夠比較準確地對它進行定位,把它歸入到本身的能力體系當中。
另外,在這個階段,你也已經經過大量的實踐,培養了很好的軟技能,好比溝通能力、項目管理能力等等。那麼最後,你就能作到技術和業務的融會貫通,能夠平衡各類架構目標,設計很是實用和接地氣的架構,並保障它的順利落地。
你能夠發現,架構師的能力是一個逐漸提高的過程,若是從架構師的境界來看,由淺到深能夠分爲四層:第一層看山不是山,第二層看山是山,第三層看山不是山,第四層看山是山。
這是一個螺旋式上升的過程,那麼它到底是什麼意思呢?
剛接手項目的時候,你對業務還不太瞭解,常常會被業務方冒出的術語弄得一愣一愣的,若是把現有問題比做山,那就是橫當作嶺側成峯,你根本摸不透,此時看山不是山。
通過業務梳理和深刻了解系統之後,你可以設計出一個簡單的方案,把各個系統串起來,能解決當前的問題,對當前的這個「山」可以看清楚全貌,此時就作到了看山是山。但這樣的方案每每設計不夠,只能解決表面問題,碰到其它相似問題或者問題稍微變形,系統還須要從新開發。
經過進一步抽象,你可以發現問題的本質,明白了原來這個問題是共性的,後續還會有不少相似的問題。而後你就對設計進行總結和昇華,獲得一個通用的方案,它不光能解決當前的問題,還能夠解決潛在的問題。此時,你看到的已是問題的本質,看山不是山。但這樣的方案每每會過分設計,太追求通用化,會創造出過多的抽象概念,理解和實現起來都特別困難,過猶不及。
最後回到問題自己,你可以去除過分的抽象,給出的設計簡潔明瞭,增之一分嫌肥,減之一分嫌瘦,既能解決當前的問題,又保留了必定的擴展能力,此時問題仍是那個問題,山仍是那個山。這樣的方案在瞭解問題本質的基礎上,同時考慮到了現狀,評估了將來,很少作,很多作。
你能夠對照這四個境界,來評估你當前的架構能力,不斷地提高對本身的要求。
本文彙總了常見的技術架構設計原則,它們都是實踐的總結,你在作架構設計時,能夠參考這些原則,在項目中採起相應的手段來實現架構目標。值得注意的是,在作具體的架構設計時,你須要對設計進行反覆迭代,才能最終獲得一個高性價比的方案。
針對架構師的成長,我也給你提供了相應的知識結構和可行的進階之路,但願你可以一步步成長,最終實現本身的理想。
讀萬卷書,行萬里路。架構師的成長尤爲如此,架構沒有速成之路,咱們先要「讀萬卷書」,學習各類架構須要的技能,而後「行萬里路」,經過大量的實踐把架構知識變成架構能力。