官术网_书友最值得收藏!

前言

本書是一本以“如何構建一套可靠的大型分布式系統”為敘述主線的技術手冊。筆者十多年來一直從事大型企業級軟件的架構研發工作,較完整地經歷了從最早的大型單體系統到如今基于云原生基礎設施的架構演變過程,希望借此機會,系統性地整理相關知識,查漏補缺,將它們都融入既有的知識框架之中,也希望能將這些知識與大家分享討論。筆者相信要深入理解一門技術,不僅要去看、去讀、去想、去用,更要去說、去寫。將自己“認為掌握了的”知識敘述出來,盡量將知識說得條理清晰,讓他人聽得明白,釋去心中疑惑,同時把自己的觀點交予別人審視,乃至質疑,在此過程之中,自己也會挖掘出很多潛藏在“已知”背后的“未知”。

如何閱讀本書

本書一共分為演進中的架構、架構師的視角、分布式的基石、不可變基礎設施和技術方法論五部分,每一部分都有相對明確的主題與目標,建議按順序閱讀各部分以獲得更有邏輯性的閱讀體驗。不過每部分內各章節之間并沒有明顯的前后依賴關系,讀者從任何一個感興趣的章節開始閱讀都可以。

筆者并沒有假定本書的所有讀者都在架構方面具備特別專業的技術水平,因此在講解各個知識點時,會力求在保證邏輯完整、描述準確的前提下,盡量用通俗的語言和案例去講述架構中與開發關系最為密切的內容。但本書的主題畢竟是軟件架構,這就不可避免地需要讀者有一定的技術基礎。本書依然主要面向中、高級程序員群體,一些常用的開發框架、類庫和語法等基礎知識點,均假設讀者已有所了解。書中雖然會涉及這些工具、類庫、框架的使用案例,但本書并不是它們的操作指南,只是借助它們去講解技術原理。

學習任何知識都不應該脫離實踐去空談理論。為了講清楚不同架構風格下的工程實現差異,也為了盡量少在書中貼代碼,將寶貴的版面空間節省出來,筆者在GitHub上分別建立了基于Spring Boot、Spring Cloud、Kubernetes、Istio和AWS Lambda的五種架構風格的樣例工程。如果你閱讀之前對架構并沒有太深刻的理解,建議先閱讀一遍本書附錄A的內容。如果你是一名駕駛初學者,最合理的學習路徑應該是先把汽車發動,然后慢慢行駛起來,而不是先從“引擎動力原理”“變速箱構造”入手去深刻地了解一輛汽車。計算機技術也是同理,先從運行程序開始,看看效果,搭建好開發、調試環境,對即將學習的內容先有一個整體的認知是很有好處的。

最后,筆者再簡要介紹下本書每一部分的讀者對象、目標和價值。

第一部分 演進中的架構

這部分只有第1章,適合所有開發者,但尤其推薦剛剛從單體架構向微服務架構轉型的開發者閱讀。

第一部分既是全書的緒論,也是對后續將用到的大量名詞概念所做的鋪墊。這部分沒有談論過于具體的技術,只是著重介紹了軟件開發歷史中多種主流架構出現的契機、解決的問題以及帶來的新缺陷。

第二部分 架構師的視角

這部分包括第2~5章,適合所有技術架構師、系統設計與開發人員,主要討論與風格無關的架構知識。

“架構師”這個詞的外延非常寬泛,不同語境中有不同含義。本書中的技術架構師特指企業架構中面向技術模型的系統設計者,這意味著討論范圍不會涉及貼近企業戰略、業務流程的系統分析、信息戰略設計等內容,而是聚焦于貼近一線研發人員的技術方案設計者。這部分將介紹一名架構師應該在架構設計時思考哪些問題,有哪些主流的解決方案和行業標準做法,各種方案有什么優缺點,不同的解決方法會帶來什么不同的影響,等等,以達到將“架構設計”這種聽起來抽象的工作具體化、具象化的目的。

作為后續實踐的基礎,第二部分的內容與具體的架構風格無關,討論的是普適的架構技術與使用技巧。無論你是否關注微服務、云原生這些概念,無論你從事架構設計還是編碼開發,了解這里所列的基礎知識,都是有實用價值的。

第三部分 分布式的基石

這部分包括第6~10章,主要面向使用分布式架構的開發人員。

只要選擇了分布式架構,無論是SOA、微服務、服務網格或者其他架構風格,涉及與遠程服務的交互時,服務的注冊發現、跟蹤治理、負載均衡、故障隔離、認證授權、伸縮擴展、傳輸通信、事務處理等一系列問題都是不可避免的。不同的架構風格,其區別是到底要在技術規范上提供統一的解決方案,由應用系統自行解決,還是在基礎設施層面將這類問題隔離掉。第三部分將重點討論這類問題的解決思路、方法和常見工具。

第四部分 不可變基礎設施

這部分包括第11~15章,主要面向基礎設施的運維人員、技術平臺的開發人員。

“不可變基礎設施”這個概念由來已久。2012年Martin Fowler設想的“鳳凰服務器[1]”與2013年Chad Fowler正式提出的“不可變基礎設施[2]”,都闡明了基礎設施不變性帶來的益處。在云原生基金會(Cloud Native Computing Foundation,CNCF)所定義的“云原生”概念中,“不可變基礎設施”被提升到與微服務平級的重要程度,此時它已不再局限于方便運維、程序升級和部署的手段,而是升華為向應用代碼隱藏分布式架構復雜度、讓分布式架構得以成為一種可普遍推廣的普適架構風格的必要前提。在云原生時代、后微服務時代,軟件與硬件之間的界線已經徹底模糊,無論是基礎設施的運維人員,抑或是技術平臺的開發人員,都有必要深入理解基礎設施不變性的目的、原理與實現途徑。

第五部分 技術方法論

這部分包括第16章,主要面向企業中重要技術的決策者。

本書的主體內容是務實的,偏重具體技術,而非方向理論。但在第16章會集中討論幾點與分布式、微服務、架構等相關的相對務虛的話題。

筆者認為,對于一個技術人員,成長的主要驅動力是實踐,是在開發程序、解決問題中增長知識,再將知識歸納、總結、升華成為理論,所以筆者將本章安排到全書的末尾,也是希望大家能先去實踐,再談理論。同時,筆者也認為,對于一名研究人員或者企業中技術方向的決策者,理論與實踐都不可缺少,在涉及決策的場景中,成體系的理論知識甚至比實踐經驗還要關鍵,因為執行力再強,也必須用在正確的方向上才有價值。如果你對自己的規劃是有朝一日從一名技術人員發展成研究或者管理人員,補充這部分知識是必不可少的。

聯系作者

在本書交稿的時候,筆者并沒有想象中的那樣興奮或輕松,寫作之時那種“戰戰兢兢、如履薄冰”的感覺依然縈繞在心頭。在每一章、每一節落筆之時,筆者都在考慮如何才能把各個知識點更有條理地講述出來,都在擔心會不會由于自己理解有偏差而誤導了大家。囿于寫作水平和寫作時間,書中難免存在不妥之處,后續的勘誤會在本書的網站(https://icyfenix.cn)上貼出,大家如有任何意見或建議,都歡迎在此網站上留言。相信寫書與寫程序一樣,作品一定都是不完美的,因為不完美,我們才有不斷追求完美的動力。

致謝

首先要感謝我的家人,是家人在本書寫作期間對我的悉心照顧,才讓我能夠全身心地投入寫作之中,而無后顧之憂。

同時要感謝我的工作單位遠光軟件,公司為我提供了寶貴的工作、學習和實踐環境,書中的許多知識點都來自工作之中;也感謝與我一起工作的同事們,非常榮幸能與你們一起在這個富有激情的團隊中共同奮斗。

最后,感謝機械工業出版社華章公司的編輯,本書能夠順利出版,離不開他們的敬業精神和一絲不茍的工作態度。

周志明

[1] 參見https://martinfowler.com/bliki/PhoenixServer.html。

[2] 參見http://chadfowler.com/2013/06/23/immutable-deployments.html。

主站蜘蛛池模板: 耒阳市| 安阳县| 南昌市| 习水县| 家居| 新平| 阿图什市| 商洛市| 长白| 巴林右旗| 南康市| 丰都县| 子洲县| 兴文县| 莆田市| 元朗区| 柞水县| 亚东县| 英超| 牟定县| 剑川县| 如皋市| 陇南市| 潼南县| 东丰县| 丘北县| 玉山县| 台东县| 大庆市| 独山县| 长兴县| 错那县| 唐山市| 博乐市| 丰城市| 三台县| 措勤县| 水城县| 华蓥市| 旬邑县| 馆陶县|