什麼樣的架構師修煉之道文檔,才能幫助大家修煉成為最出色的架構師?

2021-01-09 騰訊網

前言

卓越的軟體架構師從何而來?

所有程式設計師都有成為架構師的潛力,只要掌握了架構師的思維方式和工作方法,你也能成長為架構師。

本文教你如何像架構師那樣思考問題、理解需求、設計架構、評估結果、編寫文檔。

本文不但通過真實案例講解架構設計流程和經驗,還總結了豐富的架構師工作原則和技巧,尤其適合廣大程式設計師進階學習。同時也適合產品經理、測試人員、運維人員和其他行業從業者深入理解軟體架構設計工作。

本文將給廣大程式設計師的幫助:

成為出色的技術領導者

在快速迭代的敏捷開發中開展架構設計

避免項目波動和返工

帶領團隊共同成長

接下來就帶大家一步步來學習本文具體內容講解,希望本文能夠得到大家的喜歡,多多轉發+關注!

目錄

主要內容

本文分為三部分。第一部分與第二部分建議從頭至尾通讀,第三部分則便於參考和檢索。

第一部分介紹軟體架構的基礎知識和架構師必備的設計思維。

第1章成為軟體架構師;除了編程,架構師還有其他職責。他們要從工程角度定義問題。他們要將軟體系統分解成多個可實現的模塊,同時又要兼顧大局、確保系統整體有效工作。他們要在軟體質量屬性(quality attributes,是軟體的非功能性需求)之間進行權衡,並管控不可避免的技術債務。更重要的是,他們要鍛鍊和提升整個團隊的架構設計能力,因為最好的團隊裡人人都應該是架構師。

本章講解架構師要做些什麼。你將明白為什麼理解軟體架構可以讓你成為更優秀的程式設計師和技術領導者。我還會介紹如何開始架構師的職業生涯。

第2章設計思維基礎;無論是從頭設計架構,還是改善已有的軟體系統,我們需要的架構其實就在那裡,等待我們去發現( to be discovered,TBD)。架構設計總是一邊摸索要解決的問題,一邊探求解決方案。

為了完成這項任務,你需要學習一種分析和解決問題的創新方法,即以人為本的設計思維。將注意力放在受設計決策影響的人身上,可以幫助你理清必須解決的問題。這種設計思維強調我們的目標是打造幫助他人的軟體,唯其如此我們的方案才能落地。

本章講解如何在架構設計中運用設計思維。我們首先介紹設計思維的四條基本原則,然後學習用思維模式確保架構設計朝著正確的方向前進。最後,學習挑選合適的思維模式。

第二部分講解架構師需要掌握的核心技能和知識。

第3章制定設計策略;架構設計很容易陷入混亂無序的狀態。哪怕軟體系統充滿了各種不確定性,我們也必須制訂計劃。凡事預則立,只有憑藉穩固的設計策略,才能應付各種不確定性。

設計思維擅長為複雜問題尋找解決方案,它不是一蹴而就地解決問題,而是強調學習和實驗的重要性。有人認為檢驗架構要先將其實現,但我們的做法是在設計過程中逐步驗證架構的各個部分,同時運用思維模式和TDC 循環確定下一步做什麼。

第2章講解了設計思維的基本原則和用法。本章將繼續學習如何根據系統風險選擇思維模式,並將其作為設計策略的一部分。

第4章換位思考;搞清楚到底要解決什麼問題,往往是說起來容易做起來難。我們開發軟體是為了服務於人,因此必須理解受軟體影響的人。只有理解他們的需求,才能搞清楚到底要解決什麼問題。

我們把與軟體有關、受軟體影響的人稱為利益相關方(者)。架構師有責任確定利益相關方並了解他們的需求。利益相關方對系統的期望將直接或間接影響我們的設計方式。

換位思考( empathy,也叫同理心)是推動設計的引擎。只有站在利益相關方的角度思考和處理問題,才能開發出更好的軟體。本章將學習在開始設計架構之前,如何決定與誰討論你要解決的問題,以及你要從他們身上了解什麼。

第5章挖掘關鍵架構需求;關鍵架構需求(architecturally significant requirement,ASR)是顯著影響架構中的結構選擇的需求。架構師有責任確定對架構有重大影響的需求。ASR通常分為四類。

約束:給定或選定的不可更改的設計決策。

質量屬性:外部可見特性,表徵系統在特定環境下的運行情況。

影響較大的功能需求:架構設計需要特別注意的特性和功能。

其他影響因素︰時間、知識、經驗、技術、辦公室政治、你的技術特長,以及其他影響決策的東西。

讓我們仔細研究一下這四類ASR,學習如何與利益相關方合作定義它們。

第6章主動選擇架構;所有軟體系統都有架構,但這並不意味著理想的架構會自動送上門來。如果你把設計決策交給命運,沒人知道命運會帶來什麼結果。積極主動地思考和選擇才能提高成功的機會。

架構設計就是在不確定的情況下做決策。決策就是做取捨,我們不得不做一些妥協——放棄一些東西以避免更壞的情況發生,或者接受不好的條件以便在其他方面做得更出色。只要做出合適的取捨,就可以實現關鍵架構需求,幫助利益相關方完成業務目標。本章學習運用關鍵架構需求制定決策,選擇架構的結構。

第7章架構模式;數百年來,人們一直在提煉解決常見問題的方案,總結可復用的模式。軟體工程繼承了這一傳統。經驗豐富的架構師熟悉許多架構模式,面對新問題,他們會先回顧自己知道的模式,尋找合適的方案。確定架構模式後再根據實際情況做進一步的調整,以滿足特殊的需求。

所有軟體系統都有自己的核心模式,其他設計決策都以此核心模式為基礎。使用模式相當於汲取前人的智慧,可以大大節省工作量。

已知的架構模式數量成百上千,覆蓋各個領域。本章介紹最常見的架構模式,講解如何讓這些通用模式適應具體需求。

第8章建立模型,化繁為簡;再成功的軟體系統也難免走向複雜。用戶數量的增加將給系統的可用性、可伸縮性、性能表現施加前所未有的壓力。新功能不斷插入,補丁越來越多,讓軟體越來越笨重。擴展系統的任務可能壓得開發團隊喘不過氣。如果不保持警惕,軟體系統最終會成為其自身成功的受害者。

當然,複雜性剛剛露出猙獰面目時,我們還是有辦法控制的,比如通過需求變更和代碼裁剪精簡系統,將大件拆分成容易分析和管理的小件,還可以從細節中抽身出來,從更抽象的層面重新思考軟體。

我們曾說過,架構是由結構組成的,而結構又是由元素和關係組成的。本章將學習使用這些基本構件創建有意義的模型,幫助我們分析、構思、推演我們的設計。

第9章召開架構設計研討會;本章學習籌劃和主持架構設計研討會。讀者將學習如何主持設計研討會。良好的主持不僅僅是舉止得當,更要讓討論順利開展。本章講解的方法將有助於提高研討會的效率。

第10章展示設計決策;分享設計想法的最佳方式是把它展示出來。光憑嘴說,別人可能很難理解你的思路。把架構畫出來,大家就能按照自己的節奏和方式來琢磨。開發人員都清楚,討論抽象想法最好找一塊白板,畫點草圖。把想法畫出來才能保證大家的理解是一致的。

架構圖沒必要畫得很精緻,只要能夠有效表達想法就行。第8章曾講解過通過創建準確的模型來推演架構,提升質量屬性。本章將學習繪製架構圖,以便與開發人員溝通。

第11章描述架構;大家都不喜歡寫架構文檔,它佔據了寫代碼的時間,而且看起來總是過時的。另外,文檔格式常常很怪,編輯起來很麻煩。最重要的是,沒有人願意讀!難怪有人說軟體架構描述(縮寫SAD)是一個悲劇。

糟糕的架構描述著實讓人難受,但出色的架構描述卻能向團隊展示清晰的願景。優秀的架構描述是有用的資產,它能促進溝通與協作,將設計決策和思想有效傳遞給每一個人,提高軟體開發的質量。

本章學習描述軟體架構,用人性化的、簡潔的形式向受眾展示確切的信息,讓大家愛上它。愛是一個帶有強烈情緒的詞,但我保證讓人們愛上架構描述比你想像的簡單。

第12章架構評估;對學生、家長、老師來說,成績單是重要的反饋渠道。學生不必等到年底才知道自己的課程是「過了」還是「掛了」——通過每個季度的成績單,就能判斷自己是否獲得了理想的成績,以及哪些地方需要改進。架構評估的作用就像成績單一樣,它讓我們儘早發現問題,從而按計劃交付系統。

架構評估可以提高開發效率,而不是單純地佔用編程時間。順利的話,架構評估一小時就可以完成,它很容易融入現有開發流程中,而且不需要團隊成員掌握什麼新知識。

本章將學習對架構進行評估。評估結果可用於指導團隊、為設計決策提供支持、降低交付風險、提高架構設計水平。

第13章鼓勵團隊參與架構設計;開發現代軟體系統需要藉助團隊的力量。科技進步(容器技術、雲設施等)賦予了開發者更大的靈活性和權力。隨之而來的新架構模式(微服務、FaaS等)則對開發人員提出了更高的要求。他們必須清楚自己的決策會對包括質量屬性在內的系統特性造成什麼樣的影響。

在現代軟體開發中,開發人員與架構師的角色幾乎沒有差別。這並不是說現代軟體開發團隊不需要架構師,而是說我們需要的不再是那種傳統的、居高臨下的技術領導者。

今天的架構師應該與團隊一起設計架構,而不是獨自為團隊設計架構。架構師應該既是技術專家,也是教練和導師。本書前兩部分講解了架構設計的核心原則和方法。現在,你要學習讓團隊與你一起成長,共同設計出色的軟體架構。

第三部分討論一系列實用的架構設計方法。世上沒有萬能鑰匙,每位軟體工程師都有自己的一套經驗、方法、技術。第三部分將介紹我自己的經驗、方法、技術。

第14章理解問題的常用方法;理解模式要求我們主動從利益相關方處獲取信息,用於定義(或重新定義)問題。不僅要理解需求,還要理解誰是利益相關方主體、理解系統的業務目標,同時開始構思如何設計架構滿足需求。

第5章曾提到四類關鍵架構需求.這幾類需求都會對架構產生影響,而質量屬性的影響最大,是架構中的關鍵問題.

約束給定或選定的不可更改的設計決策。

質量屬性外部可見特性,表徵系統在特定環境下的運行情況。影響較大的功能需求架構設計需要特別注意的特性和功能。

其他影響因素時間、知識、經驗、技術、辦公室政治、你的技術特長,以及其他影響決策的東西.

本章介紹的方法能夠讓開發團隊與利益相關方相互理解,從而挖掘出關鍵架構需求。如果你需要更好地理解問題,不妨試試這些方法。

第15章探索解決方案的常用方法;探索模式可以幫助我們發現各種解決問題的設計理念與工程方法。架構探索關注的是受架構控制的部分─—軟體。我們並不是總有機會選擇解決什麼問題,但至少可以選擇怎麼解決。解決方案只受我們的知識、創造力、技能的約束。

探索似乎是沒有邊界的,但設計總是在前人的基礎上開展的,設計思維的四條原則之一是善於借鑑(見第2.1節)。所有設計都是在已有設計基礎上的重新設計和調整創新,探索首先要從這些已知的設計開始(比如第7章介紹的架構模式)。

架構師不僅是設計師,也是工程師,所以我們還要探索另外一些領域。比如軟體的構建方法、已有的框架、經驗法則,它們也會對架構產生影響;還有問題領域的概念和知識,這些是構思解決方案的出發點。當然,還要探索架構元素的關係和功能。

本章介紹的方法將幫助你構思各種架構設計方案。從這些方案中選擇合適的架構,並找到相應的開發方法。

第16章展示設計的常用方法;介紹架構光靠嘴巴講是不夠的,應該設法展示出來。展示模式把抽象的想法(如設計概念)轉變成可感知的對象,方便分享。將設計展示出來不但可以促進交流,而且可以用來檢查設計能在多大程度上滿足需求。設法展示的過程也是推演架構的過程。即使只是製作設計草稿,也是一種有用的思維練習。

除了畫線框圖,還有許多方式展示架構設計,比如製作原型、編寫文檔、開展實驗、比較數據、講故事,甚至表演。這些都可以用來向他人展示架構設計,而且效果都比單純的語言交流更好。

本章介紹的方法將幫助你展示架構設計。你可以按照這裡介紹的方法自己動手,但我建議你與他人一起合作,那樣會更有趣,效果更好。這些方法的耗時一般不會超過30分鐘。

展示的目的是分享,所以要請團隊成員(或利益相關方)評估你製作的展示物。他們應該知道你希望展示什麼樣的想法。評估也是檢查你對問題的理解是否與架構設計一致的過程。第17章將介紹常用的評估方法。

第17章評估設計方案的常用方法;評估模式幫助我們檢查設計決策,確定它們滿足需求的程度。設計不必追求完美,但至少應該夠用。我們的目標是找到夠用的架構,滿足需求。解決方案只要夠用就是合適和恰當的。

評估可以幫助我們發現不夠用的架構部分。我們也許會發現自己對細節的理解還不充分。也許看起來不錯的設計卻有著不可接受的弊端(忽略了重要的約束,或者引入了過多的風險)。這種事知道得越早越好。越往後,修改決策的代價就越高。

評估結束後,我們應該有充足的信息來決定下一步採用哪種思維模式。TDC循環(見第2.3節)的檢查階段當然需要用到評估模式,思考階段同樣也需要。

評估應該是一項持續開展的活動。等到設計結束時才做評估,很可能為時已晚。因此每一步工作都應該做評估。這樣,只要我們認為某個部分的架構設計是恰當和合適的,就可以進一步完善它的細節。架構的所有部分在開始構建之前都應該準備充分。

本章介紹的方法可以幫助團隊深入了解架構,收集採取行動所需的信息。這些方法既可以用來驗證假設、選擇設計方案,也能幫助你決定下一步要做什麼。

這份【架構師修煉之道】總共有313頁,如果需要完整版的小夥伴,可以掃碼來獲取!!

本文的目標讀者

本文是寫給所有曾站在白板前畫方框和線條,試圖解決棘手問題的人看的。如果你是軟體架構設計新手,本文很適合入門學習。我們將從介紹基礎知識開始,由淺入深逐步講解優秀軟體架構師必須掌握的核心技能。

如果你是對架構設計略知一二的程式設計師,本文將有助於你整理思路。你會讀到那些你既陌生又熟悉的概念,填補你自己都未曾意識到的知識空白。讀完本文,你將更加深入地理解架構師的工作,以便日後更好地領導他人。

如果你是久經沙場的軟體架構師,本文將教你從一個全新的視角來審視如何領導團隊。

今天,越來越多的初級程式設計師希望在軟體開發中發揮更大的作用。文中講解的基礎知識將幫助你引導他們全面地參與到設計過程中來。

本文闡述的協作設計方法可以讓你安全高效地與經驗不足的團隊成員進行合作。

希望本文能夠幫助到大家的學習,讓大家快速成長為架構師,也希望本文能夠得到大家的喜歡!!

相關焦點

  • 京東資深架構師在線分享:架構師修煉之道,核心技術修煉實踐文檔
    以上這些技術挑戰的解決方案,只有在工作實踐中持續不斷打磨才能迭代出來,作者在此文中將這些技術實踐進行思考和總結,由淺入深地講給大家,相信會給你帶來更多的思考和收穫。第3章分布式之道重點介紹常見的事務、鎖、限流場景下的知識;分布式系統的架構思想由來已久,網際網路企業的系統架構一定是符合分布式的設計思想的
  • JD高級架構師沉澱3年,在線分享架構修煉之道
    針對上述情況,小編在這裡為大家推薦這篇由京東技術專家撰寫的關於架構和系統的編程之道,相信閱讀完本文,能夠讓那些剛剛踏入開發領域的同學眼前一亮,看到除CURD外更應該關注的系統架構和編程之道。能夠快速從編寫業務代碼進階到更高的階段。
  • 京東T9也要跪求的這份架構修煉之道+Linux歸納筆記,爆贊
    下面會介紹架構修煉之道(億級網關、平臺開放、分布式、微服務容錯等)核心技術修煉實踐,由於篇幅限制原因,就只展示了其中一部分:架構修煉之道(億級網關、平臺開放、分布式、微服務容錯)第1章網關之道1.1認識API網關1.2一個API的生命周期
  • 京東T9大牛沉澱三年終於整理出了這份架構核心修煉之道
    本書的主書名叫作「架構修煉之道&34;,就是被檢驗過的真理、道理,是最普通、最真實的道理。本書還有一個副標題,「億級網關、平臺開放、分布式、微服務、容錯等核心技術修煉實踐」,書中對於這些技術的描述都是我在工作過程中通過反覆實踐得到的總結和感悟。同時,工作中我們敬畏每一行代碼,敬畏每一次線上生產事故,每次大促備戰我們都懷著一顆敬畏之心,這些年來在京東的架構實踐無疑就是一場修煉。這正是本書名字的由來。
  • 35 歲了,終於成為架構師了
    而做架構,需要全局思考各種技術、業務、資源要求,根據要求,尋找最合適的架構方案。事實上,如果你沒有從架構師的角度思考問題,帶領團隊,整體完成一個系統的架構設計與開發,那麼你永遠也不會了解如何做一個架構師。而你不去做一個架構師,又永遠沒有機會帶領一個團隊,完成一個系統的架構設計與開發。
  • 架構老炮兒:談談 80% 的人關於架構師的誤解
    而做架構,需要全局思考各種技術、業務、資源要求,根據要求,尋找最合適的架構方案。事實上,如果你沒有從架構師的角度思考問題,帶領團隊,整體完成一個系統的架構設計與開發,那麼你永遠也不會了解如何做一個架構師。而你不去做一個架構師,又永遠沒有機會帶領一個團隊,完成一個系統的架構設計與開發。
  • 阿里資深專家分享程式設計師三門課:技術精進架構修煉、管理探秘文檔
    業務分析也是系統開發中最重要、最困難的階段,只有依據業務分析的結果,運用合理的思想和方法,才能設計出理想的系統架構。如圖所示,業務分析與設計是程式設計師進階時要具備的最重要的能力,是從產品需求到編碼實現的重要手段。
  • 如何才能真正的提高自己,成為一名出色的架構師?
    二、高度:高度指的是架構師應具備對客觀事物的「拔高」能力,能夠從紛繁雜亂的信息中建立秩序,也就是我們一般所說的抽象能力。三、深度:深度指的是架構師能對主流技術有較為深入的理解,主要包括:1,可以不了解原始碼,但對主流技術的原理,運作機理有一個基本的理解;2,至少對一種技術有深入的認識,是這種技術的專家,熟悉其原始碼以上2點,1為必須,2為非必須深度的學習方法:上文已說。
  • 在職京東架構師的億級系統架構實踐經歷總結:架構修煉之「道」
    這份筆記是在職京東架構師結合實際的生產實踐,分別對網關、平臺開放、分布式、MQ、RPC、I/O、微服務、容錯的內容做了詳細介紹。其中的內容不限於概念,而是會下沉到實踐背後的感悟與總結。比如筆記詳細闡述了網關系統是如何「抗量」,又是如何容錯的,以及在每次大促中的備戰經驗。
  • 通向架構師的道路——漫談架構與設計文檔的寫作技巧
    在此要澄清一點,架構師本身也是」程式設計師「,不是光動嘴皮子的傢伙們,如果你不是一名程式設計師出身那你根本談不上也不可能成為一名架構師。那麼架構師還有哪些是作為一名程式設計師來說不具備的呢?所以這些東西是一個成為架構師的「硬」條件。2.
  • 如何成為前端架構師?
    前端架構師,聽起來像是個很高大上的名詞,在大多數程式設計師眼中,架構師一般都來自於後端開發, Java或 C++,這些人往往有十八般武藝,能夠解決企業中出現的各種問題。前端架構師的概念已經漸漸進入了前端工程師的視野,無論何時,只要前端工程師還在工作,面試官就會問到,你的未來計劃是什麼?
  • 首次分享:阿里P8架構師的學習筆記與歷程
    今天小編把自己的一位朋友如何從職場菜鳥奮鬥至阿里P8架構師的故事分享給大家:小編還特意翻了翻去年和大佬的聊天記錄,現在重新再看,只能說太勵志了!從大學畢業到面試阿里做架構師,總共花費了5個年頭。並把成長曆程分為了三個階段:參加工作1-2年之間在這段時間裡,我覺得還是處於一個對於Java代碼深入了解的過程。
  • 架構師or普通的程式設計師,架構師優秀在哪幾方面?
    經常看到另一種相對簡單的分類方法,該方法將架構師分為軟體架構師和系統架構師。軟體架構師是程式設計師突破的最簡單方法,並且最有可能採取這種方式,例如JAVA架構師,DotNet架構師,LAPM架構師等。系統架構師他更專注於全面使用現有產品和技術來達到客戶期望。系統架構師需要有關軟體和硬體的知識,因此其知識系統相對複雜。
  • java架構師指南:成為java架構師之後該怎麼走
    作為一名java架構師,首先要將自己的主要職責概括為三個「負責」,即為新系統的架構設計、舊系統的架構演進負責;為業務的技術支撐負責;為團隊新人的成長負責;結合多年經驗,小編將java架構師之路分為三個階段:
  • 阿里P8級架構師整理分享全棧技能修煉SpringBoot文檔
    前言本篇文章給大家分享的內容是全棧技能修煉:使用Angular和Spring Boot打造全棧應用的技術文檔。全棧經過多年的發展,技術體系變得非常龐雜。看看層出不窮的技術知識圖就知道了,但是你是否曾注意到很多同樣的思想被到處套用?
  • 如何成為一個合格的數據架構師?
    21世紀以來,數據量進入每兩年翻一番的增長期,越來越多人意識到了數據的價值,數據架構師閃亮登場。數據成為企業不可忽視的重要資產。而數據架構師則是企業數據資產最重要的「奠基者」。最早,數據架構師在IOE上工作;2009年,阿里雲最早提出「去IOE」的口號,初代數據架構師革了自己的命;2015年,這一年產生的數據量是人類過去歷史上所產生數據量的總和,從此進入了指數級增長階段。數據架構師也演化出了2個大方向(平臺型數據架構師、數倉型數據架構師)。本文以作者親歷視角,主要分享數倉型數據架構師的「修煉大法」。
  • 阿里新產架構進階手冊,Github已星標71.6k
    想要成為架構師所需要積累的知識肯定不是一星半點的,我們能做的就是站在巨人的肩膀上不斷學習提升自己,目前市面上關於架構的文檔有太多,但真的能把架構系統的梳理清楚的文檔實在太少今天要與大家介紹的文檔就是目前市面上兩份不錯的架構文檔,在Github上也是星標到了71.6k希望能對大家有所幫助
  • 鋪平你的架構師之路!十年技術專家敬獻Java架構完美設計筆記
    寫在前面軟體架構師是每個程式設計師職業生涯中內功心法修煉的終極目標。當然要達到這個目標,一般並不簡單,你需要具備「十八般武藝」,而且還要融匯各家所長。那麼,該如何更好的理解架構呢?從形上看,架構是系統結構的骨架,支撐和連接各個部分;從神上看,架構是系統設計的靈魂,深刻體現了業務技術實現的本質。
  • 什麼是架構師?有何作用,成為一名架構師需要具備怎樣的能力?
    在比爾· 蓋茨的眾多稱謂中,據說他更偏愛「首席軟體架構師」。同樣,在網易創始人丁磊名字前,也有「首席架構師」這樣的稱謂。由此可見,對於企業來說,架構師就是靈魂的創造者。所以架構師的影響真的是不一般的,而且不僅僅如此。
  • 架構師必備的十個重要技能
    架構師是程式設計師未來發展的重要方向,但是成為一個架構師並不容易,不僅需要豐富的開發經驗,還對各方面的能力都有著非常高的要求,這裡列舉了十個想要成為架構師必備的重要技能。這可能是最重要和最具挑戰性的問題。要把理論和實踐區別開來。根據我的經驗,兩者兼而有之是最有價值的。讓我們從理論開始:了解基本的設計模式: 設計模式是架構師設計開發可維護、可擴展系統的一項最重要工具。通過設計模式你可以設計解決通用問題的可重用方案。