阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

本文已收錄GitHub,更有互聯網大廠面試真題,面試攻略,高效學習資料等git

學習架構呢,要掌握的東西有不少,你是否是開始擔憂本身一生都學不完呢?其實,咱們也不須要一會兒鋪開學習全部的架構技能,重要的是把控好學習的節奏,在適當的時間學習適當的內容,咱們能夠結合實際工做,一步步地成長。因此今天這一講,我想給你提供一些架構學習的重點方向和路徑建議。github

架構原則彙總

在技術架構篇,我針對系統的高可用、高性能、可伸縮和低成本,給你介紹了不少的架構設計原則,不一樣的原則對應着不一樣的目標,這裏我把這些架構原則和目標彙總成一個表格,來幫助你更直觀地瞭解它們。面試

阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

限於篇幅,這裏我挑選幾個原則來重點說下:算法

可回滾 / 可禁用數據庫

  • 可回滾原則確保了系統能夠向後兼容,當系統升級出現問題的時候,咱們能夠回滾到舊版本,保證系統始終可用。不過有些時候,系統回滾很困難。舉個例子,若是數據庫的新舊錶結構差別很大,除了回滾代碼,咱們還要回滾數據庫,這樣操做起來每每須要很長時間,系統的可回滾性就比較差。因此在設計時,咱們要儘可能考慮數據庫修改和代碼的兼容性,並提早作好系統回滾的預案。
  • 可禁用原則要求咱們提供功能是否可用的配置,在系統出現故障時,咱們可以快速下線相應的功能。好比說,新的商品推薦算法有問題,咱們能夠經過程序開關禁用這個功能。

使用成熟技術設計模式

  • 做爲開發人員,咱們都很想嘗試新技術,但咱們知道,新的技術尚未通過充分的驗證,它每每會存在不少隱藏的 Bug。
  • 因此,做爲架構師,咱們在作方案設計的時候,一方面,要從系統的穩定性出發,儘可能選擇成熟的技術,避免由於新技術的坑而致使系統可用性出現問題;另外一方面,選擇成熟的技術也意味着選擇了團隊熟悉的技術,這樣學習成本低,落地快。

使用同質化硬件緩存

  • 咱們在作硬件選型的時候,要儘可能選擇相同的硬件和相同的配置。
  • 好比說,對於服務器,咱們選擇一樣的 CPU 和內存配置,以及一樣的操做系統版本,這樣咱們更容易經過統一的自動化腳本,對節點進行配置,對系統作水平擴展時也會更加容易。

架構落地過程

這些架構原則都是咱們要深刻理解,而且在實踐中要逐漸運用和掌握的。那麼下面,我就帶你來了解一下架構的具體落地過程,幫助你更好地理解架構師的職責和技能要求。服務器

簡單地說,架構師的職責就是負責設計架構,並跟蹤架構的實施過程,解決過程當中出現的疑難問題,確保架構順利落地。在以前的文章中介紹過架構師的能力模型,好比抽象思惟、平衡取捨、溝通能力等等。接下來,我就結合架構的落地過程和架構師的能力模型,來具體說下架構師是如何開展工做的。網絡

阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

架構師的工做從接到項目需求,或者從本身主動識別系統當前的問題開始,TA 的工做過程能夠分爲三個大階段。數據結構

首先,架構師要和產品經理或者業務人員溝通,瞭解業務;和開發人員溝通,瞭解系統。瞭解完系統和業務後,架構師接下來就要設計具體的方案,方案設計要分三步走:

  • 首先,架構師針對業務需求,分解相應功能到現有的各個系統,把系統的各個部分串起來,這個初版的方案至少要可以在表面上解決當前的問題,這樣就造成一個草根的方案。
  • 而後,架構師要進一步深刻思考業務的本質,對現有的草根方案進行昇華,好比說,經過抽象,讓方案更加通用,能夠解決多個相似的或潛在的業務需求,這樣,草根的方案就變成了一個高大上的方案,這裏很考驗架構師的透過問題看本質抽象總結的能力,
  • 接下來,基於現有的各項約束,好比時間、資金和人員技術能力等因素,架構師要對方案進行簡化,把高大上的方案變成一個接地氣的方案,以最小的代價實現最大的價值,這裏很考驗架構師的平衡取捨能力

方案設計好以後,最後還要進行宣講,架構師須要說服相關的人員接受方案,而且在後續的方案執行中,負責跟蹤架構的落地,若是過程當中有疑難問題,架構師還要協助解決。

因此,咱們能夠看到,架構師在設計方案時,會有一個反覆迭代的過程,最終才能獲得一個簡約而不簡單的方案。而且在方案設計的先後,架構師還須要和大量的人員進行溝通,這些都須要架構師具有寬廣的知識面和良好的溝通能力。

架構師知識結構

那麼,架構師都須要掌握哪些具體的技能呢?這裏我給你提供了一個簡化的架構師技能圖譜,能夠幫助你按部就班地學習這些架構技能。

阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

首先,做爲架構師,咱們須要瞭解計算機硬件和操做系統的相關知識,它們是負責具體幹活的,若是對它們有深刻的瞭解,咱們就能知道系統底層是怎麼執行的,在作具體設計的時候,咱們也就能夠作各類優化。好比說,在設計 RPC 通信框架時,咱們能夠經過 IO 多路複用和內存零拷貝技術,來提高服務端併發處理請求的能力。

在這之上就是具體技術相關的內容,從淺到深能夠分爲三個部分:

  • 第一部分是開發相關的基本知識,好比數據結構和算法、具體的開發語言、經常使用的設計模式以及開發框架等等,這樣你就具有了基本的開發能力。
  • 第二部分是各類中間件知識,經常使用的中間件包括數據庫、緩存、消息系統、微服務框架等等,對於這些核心中間件,咱們不但要了解具體的用法,還要深刻理解它們的適用場景。這樣你就能寫出高效健壯的代碼,可以獨立承擔一個子系統的開發。
  • 繼續往下深刻,你還要學習分佈式系統相關的知識,包括底層網絡和分佈式通訊技術,這樣你就能夠了解系統是怎麼鏈接在一塊兒的。除此以外,你還要了解一些周邊的系統,好比大數據平臺、運維監控系統、接入系統等等,這樣,你就能夠了解系統端到端的運行過程,從技術架構上保證系統的穩定可用。

掌握了這些技術能力以後,你就能夠逐漸往全面的架構師發展了。好比說,你能夠結合業務,來設計應用體系,包括數據模型和服務設計;你能夠了解各類應用架構模型,知道它們的優缺點和適用場景,可以定義一個良好的應用依賴關係。

再往上,就是成爲業務領域專家。在這個階段,你已經知道如何經過業務拆分,實現業務之間的解耦;如何經過業務抽象,實現業務的擴展和重用。

到最後,你已經對各類架構設計的目標和架構原則都很是瞭解了,知道面對一個具體的問題,大體都有哪些解決的手段;而後,通過大量的實踐,你可以把技術架構、應用架構、業務架構融會貫通,並針對具體狀況,對架構的各個目標作良好的平衡。固然,做爲架構師,你還要和一系列的人員打交道,這時候就須要你培養更多的軟技能,能把複雜的架構問題以簡單的方式表達出來。

架構師成長路徑

如今,你已經清楚了做爲一個架構師,TA 須要具有什麼樣的知識結構。若是你想成爲一名架構師,在不一樣的成長階段,你還須要學習不一樣的內容。這裏,我以 Java 爲例,進一步給出學習的重點內容,給你提供更具體的參考。

阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

第一個階段是初級開發階段

在這個階段,你須要深刻學習數據結構和算法,而且必定要深刻掌握單體應用的分層架構,由於這是架構設計的基礎。

另外,對 JDK 的一些核心類,你不能僅僅停留在使用層面,而是要深刻研讀源代碼,瞭解它的內部設計。這樣你就知道如何開發一個高效的程序,如何進行各類代碼級的調優。

第二個階段是高級開發階段

首先,你須要很是瞭解設計模式,每一個設計模式均可以看作是一個小型的架構設計,這裏面有很好的設計原則和抽象思惟,你在作系統設計時能夠借鑑它們。

而後,你須要很是瞭解核心的中間件,包括 DB、微服務框架、緩存和消息系統,要清楚地瞭解它們的適用場景(好比消息系統的削峯、解耦和異步),知道如何對它們進行調優,以及瞭解它們都有哪些常見的坑等等,核心中間件是咱們作技術選型的基礎。

同時,你要深刻掌握數據庫設計和服務接口設計,瞭解它們的最佳設計實踐,它們承載了系統核心的業務數據和業務邏輯。

最後,你須要進一步研讀源碼,源碼是活的教材,它包含了大量實用的設計原則和技巧。這裏我建議你選擇一些開源的開發框架和 RPC 通訊框架,去深刻了解它們內部的實現原理,好比 Spring 和 Netty。

第三個階段是架構師階段,成爲技術專家。

首先,你須要深刻了解網絡通訊,好比說網絡分層和 HTTP/TCP 協議,還有各類常見的RPC 通信框架,瞭解它們的特性和適用場景,這樣你在設計分佈式系統時,就可以進行合理的技術選型。

而後是瞭解底層系統,包括 JVM、操做系統和硬件原理,再往上延伸到系統的接入部分,瞭解常見的負載均衡特性和用法,這樣你能夠對總體的系統有個透徹的瞭解,把各個環節能夠很好地銜接起來。這裏,我特別建議你去讀下 Java 和 JVM 的規格說明書,瞭解 Java 的底層設計。

最後,你須要熟練掌握各類設計工具和方法論,好比領域驅動設計和 UML,瞭解經常使用的架構設計原則,這樣你就可以結合業務,選擇合適的應用架構和技術架構並進行落地。在這一階段,對你總的要求就是可以從端到端的角度進行業務分析和系統設計。

第四階段是大師階段

在這個階段,你須要對架構的各個目標都很是瞭解,除了業務系統設計,你還要對運維和監控有深刻的認知。同時,你須要瞭解業界的架構實踐,跟蹤技術的發展趨勢,若是出來一項新技術,你能夠比較準確地對它進行定位,把它歸入到本身的能力體系當中。

另外,在這個階段,你也已經經過大量的實踐,培養了很好的軟技能,好比溝通能力、項目管理能力等等。那麼最後,你就能作到技術和業務的融會貫通,能夠平衡各類架構目標,設計很是實用和接地氣的架構,並保障它的順利落地。

架構師境界

你能夠發現,架構師的能力是一個逐漸提高的過程,若是從架構師的境界來看,由淺到深能夠分爲四層:第一層看山不是山,第二層看山是山,第三層看山不是山,第四層看山是山。

這是一個螺旋式上升的過程,那麼它到底是什麼意思呢?

阿里架構師分享丨Java架構設計的重點知識和學習路徑(建議收藏)

剛接手項目的時候,你對業務還不太瞭解,常常會被業務方冒出的術語弄得一愣一愣的,若是把現有問題比做山,那就是橫當作嶺側成峯,你根本摸不透,此時看山不是山

通過業務梳理和深刻了解系統之後,你可以設計出一個簡單的方案,把各個系統串起來,能解決當前的問題,對當前的這個「山」可以看清楚全貌,此時就作到了看山是山。但這樣的方案每每設計不夠,只能解決表面問題,碰到其它相似問題或者問題稍微變形,系統還須要從新開發。

經過進一步抽象,你可以發現問題的本質,明白了原來這個問題是共性的,後續還會有不少相似的問題。而後你就對設計進行總結和昇華,獲得一個通用的方案,它不光能解決當前的問題,還能夠解決潛在的問題。此時,你看到的已是問題的本質,看山不是山。但這樣的方案每每會過分設計,太追求通用化,會創造出過多的抽象概念,理解和實現起來都特別困難,過猶不及。

最後回到問題自己,你可以去除過分的抽象,給出的設計簡潔明瞭,增之一分嫌肥,減之一分嫌瘦,既能解決當前的問題,又保留了必定的擴展能力,此時問題仍是那個問題,山仍是那個山。這樣的方案在瞭解問題本質的基礎上,同時考慮到了現狀,評估了將來,很少作,很多作。

你能夠對照這四個境界,來評估你當前的架構能力,不斷地提高對本身的要求。

總結

本文彙總了常見的技術架構設計原則,它們都是實踐的總結,你在作架構設計時,能夠參考這些原則,在項目中採起相應的手段來實現架構目標。值得注意的是,在作具體的架構設計時,你須要對設計進行反覆迭代,才能最終獲得一個高性價比的方案。

針對架構師的成長,我也給你提供了相應的知識結構和可行的進階之路,但願你可以一步步成長,最終實現本身的理想。

讀萬卷書,行萬里路。架構師的成長尤爲如此,架構沒有速成之路,咱們先要「讀萬卷書」,學習各類架構須要的技能,而後「行萬里路」,經過大量的實踐把架構知識變成架構能力。

相關文章
相關標籤/搜索