産品特色
編輯推薦
曆時三年終到稿,還未讀完初稿,就知道《架構解密:從分布式到微服務》將是一本熱銷書。
從傳統分布式架構遷移到基於容器技術的微服務架構,這本就是百談不厭的話題。
更彆提內容涉及Microservices、Kubernetes、SOA、Distribute Memory、ElasticSearch、Kafka、CAP、NUMA、SOA、GlusterFS、Actor、Akka、RabbitMQ、Spring Cloud、ZeroC Ice……
Leader-us的文字還是那樣充滿IT情懷和抱負,也一如既往地流暢和通俗易懂。
一個很復雜的問題,經過Leader-us一個調侃就變得簡單化。
一個看似很簡單的問題,Leader-us卻總能深入到幕後,包括獨有的數據和原理講解,一手的資料啊有木有,世上難買啊有木有,很珍貴啊有木有!
Leader-us調侃道:“《架構解密:從分布式到微服務》是一本代碼級吹水架構師必備讀物,從此360°無死角吹水,絕地反擊,打敗純吹水派架構師”,讓我們拭目以待。
內容簡介
分布式架構與微服務平颱是當今IT界的關鍵技術,也是資深軟件工程師和係統架構師必須掌握的核心技術。《架構解密:從分布式到微服務》以從傳統分布式架構遷移到基於容器技術的微服務架構為主綫,全麵、透徹地介紹瞭與分布式架構及微服務相關的知識和技術。《架構解密:從分布式到微服務》一開始並沒有提及分布式的枯燥理論,而是講述瞭一段精彩的IT發展史,其中重點講述瞭大型機、UNIX小機器的沒落與X86平颱的崛起,從而巧妙地引齣CPU、內存、網絡、存儲的分布式演進過程,這恰恰是分布式軟件係統賴以運行的“物質基礎”。然後簡明扼要地介紹瞭進行係統架構所必需的網絡基礎,並詳細介紹瞭分布式係統中的經典理論、設計套路及RPC通信,對內存、SOA架構、分布式存儲、分布式計算等進行瞭深度解析,最後詳細介紹瞭全文檢索與消息隊列中間件,以及微服務架構所涉及的重點內容。
《架構解密:從分布式到微服務》是Leader-us多年架構經驗的傾情分享,主要麵嚮關注分布式架構及微服務,以及有誌於成為實力派架構師的IT人士。
作者簡介
Leader-us,本名吳治輝,惠普資深軟件架構師,國內知名開源分布式數據庫中間件 Mycat的發起人,精通Java編程,擁有超過16年軟件研發經驗,專注於電信和雲計算方麵的軟件研發,參與過眾多分布式與雲計算相關的大型項目架構設計和 Coding,是業界少有的具備很強 Coding 能力的 S級資深架構師;曾經選拔和培養瞭大批優秀Java工程師,他們中的大多數人進入知名軟件公司參與核心研發,也有一些人選擇創業。
Leader-us 也是《ZeroC Ice 木又威指南》《Kubernetes 木又威指南:從 Docker到 Kubernetes 實踐全接觸》的作者。
目錄
第1章 大話分布式係統 1
1.1 IT爭霸戰 1
1.1.1 劃時代的第一颱計算機 1
1.1.2 IT界的恐龍時代 4
1.1.3 貴族的沒落與平民的勝利 6
1.1.4 ARM新貴的爆發 10
1.1.5 超級計算機的絕地反擊 11
1.2 分布式係統的開國元勛 13
1.3 分布式係統的基石:TCP/IP 17
1.4 從無奈到崛起的CDN網 19
1.5 這是一個最好的時代 21
第2章 “知識木桶”中的短闆—— 網絡基礎 23
2.1 即使高手也不大懂的網絡 23
2.2 NIO,一本難念的經 30
2.2.1 難懂的ByteBuffer 30
2.2.2 晦澀的“非阻塞” 39
2.2.3 復雜的Reactor模型 41
2.3 AIO,大道至簡的設計與苦澀的現實 45
2.4 網絡傳輸中的對象序列化問題 50
第3章 分布式係統的經典基礎理論 55
3.1 從分布式係統的設計理念說起 55
3.2 分布式係統的一緻性原理 58
3.3 分布式係統的基石之ZooKeeper 61
3.3.1 ZooKeeper的原理與功能 61
3.3.2 ZooKeeper的場景案例分析 65
3.4 經典的CA理論 69
3.5 BASE準則,一個影響深遠的指導思想 72
3.6 重新認識分布式事務 73
3.6.1 數據庫單機事務的實現原理 73
3.6.2 經典的X/OpenDTP事務模型 75
3.6.3 互聯網中的分布式事務解決方案 78
第4章 聊聊RPC 83
4.1 從IPC通信說起 83
4.2 古老又有生命力的RPC 85
4.3 從RPC到服務治理框架 91
4.4 基於ZeroC Ice的微服務架構指南 94
4.4.1 微服務架構概述 95
4.4.2 ZeroC Ice微服務架構指南 100
第5章 深入淺析內存 107
5.1 你所不知道的內存知識 107
5.1.1 復雜的CPU與單純的內存 107
5.1.2 多核CPU與內存共享的問題 110
5.1.3 著名的Cache僞共享問題 113
5.1.4 深入理解不一緻性內存 115
5.2 內存計算技術的前世今生 118
5.3 內存緩存技術分析 123
5.3.1 緩存概述 123
5.3.2 緩存實現的幾種方式 125
5.3.3 學習Memcache的內存管理技術 127
5.3.4 Redis的獨特之處 129
5.4 內存計算産品分析 131
5.4.1 SAP HANA 131
5.4.2 Hazelcast 133
5.4.3 VoltDB 135
第6章 深入解析分布式存儲 138
6.1 數據存儲進化史 138
6.2 經典的網絡文件係統NFS 145
6.3 高性能計算領域的分布式文件係統 148
6.4 企業級分布式文件係統GlusterFS 150
6.5 創新的Linux分布式存儲係統—— Ceph 153
6.6 軟件定義存儲 160
第7章 聊聊分布式計算 166
7.1 不得不說的Actor模型 166
7.2 Actor原理與實踐 170
7.3 初識Akka 177
7.4 適用麵很廣的Storm 185
7.5 MapReduce及其引發的新世界 194
第8章 全文檢索與消息隊列中間件 201
8.1 全文檢索 201
8.1.1 什麼是全文檢索 201
8.1.2 起於Lucene 202
8.1.3 Solr 206
8.1.4 ElasticSearch 209
8.2 消息隊列 217
8.2.1 消息隊列概述 217
8.2.2 JEE專屬的JMS 221
8.2.3 生生不息的ActiveMQ 226
8.2.4 RabbitMQ 231
8.2.5 Kafka 238
第9章 微服務架構 244
9.1 微服務架構概述 244
9.1.1 微服務架構興起的原因 244
9.1.2 不得不提的容器技術 246
9.1.3 如何全麵理解微服務架構 249
9.2 幾種常見的微服務架構方案 253
9.2.1 ZeroC IceGrid微服務架構 253
9.2.2 Spring Cloud微服務架構 256
9.2.3 基於消息隊列的微服務架構 259
9.2.4 Docker Swarm微服務架構 261
9.3 深入Kubernetes微服務平颱 263
9.3.1 Kubernetes的概念與功能 263
9.3.2 Kubernetes的組成與原理 268
9.3.3 基於Kubernetes的PaaS平颱
前言/序言
寫給像筆者的你
我們都是IT人,所以,我們注定瞭很像。
我們可能小時候都挺聰明,學習也挺好,也早戀(可能純潔度不同)。這一切都是有關聯的,因為早戀所以你寫情書,所以你有瞭點文采,又所以喜歡讀筆者的文字,於是,你成瞭筆者的第1個讀者,雖然我們分布在不同的“機房”中。
我們因為都受過嚴格、係統的全麵教育,所以骨子裏是溫順的,性格上是溫柔的。我們因為在智商上高於情商的概率是99%,所以多年獨占風雲榜之狀元稱謂——呆。我們一起努力的結果,是驗證瞭那句話——科學無國界。在《生活大爆炸》《IT狂人》等熱播美劇中,我們終於找到祖國之外的同類,於是我們開始自戀地打廣告:我很呆但我很幽默。
不知道女友要什麼東西啊,分手瞭纔知道人傢暗示瞭那麼多次自己都不懂啊!
我們都是高學曆的概率是99%,我們都近視的概率是99%,我們未富先胖的概率是99%,我們未老先白頭的概率是99%,我們目前在北上廣或者未來在北上廣的概率是99%,我們背井離鄉的概率是99%,我們的計算機內存超過4GB的概率是99%,我們喜歡新計算機勝過於喜歡新女友的概率是99%。
我們曾經是眾人眼中的寵兒,但不知從何時起,淪落為新一代的“農民工”。在《死神來瞭之中國特供版》裏,每年都有幾個IT精英注定被永遠地帶走,我們在默默悲傷的同時,心裏也在默默祈禱:OMyGod,讓我活到82歲吧,就算沒有28歲的小嬌妻。
我們聽過最多的公司是微軟,我們最離不開的品牌是Windows,雖然對於它們的評價,我們無法達成一緻;同樣,對於馬雲及喬布斯,我們也有著不同的評價,雖然他們締造的“帝國”對我們的生活都産生瞭重要影響。
最後也是最重要的一點,我們都生活在一個有意思的時代,這個時代無法用任何哲學理論來左右我們的思想和行為。金錢嚮左,理想朝右,我們始終不放棄一個宏偉夢想:尋找最優秀的算法,收獲金錢,實現理想。
吐槽歸吐槽,言歸正傳,筆者假設你跟筆者一樣是個有為青年,目標是成為IT精英,目前煩透瞭信息係統、Web及低水平的重復編碼工作,打算進階架構師隊伍,並下定決心潛心修行一年半載,脫掉程序猿的舊外套,換上“土豪金”的IT新人套裝,那麼,請你準備如下軟硬件,開始和筆者一起,探秘分布式架構的奧義,走嚮“雲端”。
有8GB內存的計算機一颱,4GB勉強過關。
計算機保持聯網,遇到問題能隨時“榖歌”。
筆者的QQ號碼,該號碼在本書某個DEMO的代碼中。
Eclipse或你熟悉的Java開發工具。
除此之外,更重要的是以下幾點。
不求快,但求堅持到底,係統學習比局部掌握更重要。
不怕錯,就怕濛混過關,嘗試和齣錯是學編程的王者之道。
不怕動手,就怕隻動眼,原理與實踐都重要,技術都是實踐和總結齣來的。
Leader-us
2017年5月31日
《雲端之上:現代應用架構的演進與實踐》 在數字化浪潮席捲全球的今天,軟件係統的復雜性與日俱增。從承載億萬用戶流量的電商平颱,到驅動企業核心業務的金融係統,再到提供海量信息服務的社交媒體,每一個成功的數字産品背後,都離不開一套穩健、高效、可擴展的現代應用架構。本書——《雲端之上:現代應用架構的演進與實踐》——便是對這一復雜而迷人的領域的一次深度探索。 第一部分:基石的構建——從單體到分布式 現代應用架構的起點,並非一開始就是零散的微觀世界,而是源於對規模化處理和高可用性需求的必然迴應。早期,許多係統以單體架構(Monolithic Architecture)的形式誕生,將所有功能打包在一個獨立的應用程序中。這種架構的優點顯而易見:開發簡單,部署方便,易於理解和維護。然而,隨著業務的快速增長,單體應用逐漸暴露齣其局限性。龐大的代碼庫使得開發效率低下,任何小的改動都可能影響整個係統,增加瞭齣錯的風險。部署也變得越來越睏難,一次更新可能需要停機數小時甚至數天。此外,當某個模塊齣現性能瓶頸時,整個應用程序的擴展也受到限製,無法針對性地優化。 正是為瞭剋服單體架構的種種弊端,分布式架構(Distributed Architecture)應運而生。分布式架構的核心思想是將一個大型應用程序拆分成多個獨立的服務,這些服務可以通過網絡進行通信和協作。這一轉變帶來瞭革命性的變化。首先,可伸縮性(Scalability)得到瞭極大的提升。每個服務都可以根據自身的負載需求獨立地進行擴展,例如,電商平颱中的商品查詢服務在促銷期間可以增加更多實例,而訂單處理服務則根據實際訂單量動態調整。其次,高可用性(High Availability)顯著增強。當某個服務發生故障時,不會導緻整個係統的癱瘓,其他服務仍然可以正常運行,用戶體驗受到最小的影響。通過負載均衡和故障轉移機製,係統能夠實現持續的可用性。 分布式架構的實現,也催生瞭一係列新的技術和設計模式。服務注冊與發現(Service Registration and Discovery)機製變得至關重要,它使得服務能夠動態地找到彼此,而無需硬編碼服務地址。常見的實現方式包括ZooKeeper、etcd以及Consul等。API網關(API Gateway)作為所有外部請求的統一入口,負責路由、認證、限流、監控等功能,簡化瞭客戶端與後端服務的交互。消息隊列(Message Queue)(如Kafka、RabbitMQ)在分布式係統中扮演著關鍵角色,它提供瞭異步通信的能力,解耦瞭服務間的依賴,使得數據能夠可靠地在不同服務間傳遞,緩衝瞭高並發的衝擊,並且能夠實現事件驅動的架構。 然而,分布式架構並非銀彈,它也帶來瞭新的挑戰。分布式事務(Distributed Transactions)的復雜性是其中之一,如何保證跨多個服務的操作原子性,以及處理數據一緻性問題,需要引入如兩階段提交(2PC)、TCC(Try-Confirm-Cancel)或Saga模式等復雜的解決方案。分布式係統的監控與調試(Monitoring and Debugging)也變得更加睏難,日誌分散、鏈路追蹤(Distributed Tracing)的需求變得迫切,以便能夠定位問題發生的根源。網絡延遲和可靠性(Network Latency and Reliability)也成為需要重點考慮的因素,服務間的調用可能因為網絡問題而失敗,需要設計閤理的容錯機製,如超時、重試、熔斷(Circuit Breaker)等。 第二部分:精雕細琢——微服務架構的興起與實踐 在分布式架構的基礎上,為瞭進一步提高開發效率、靈活性和敏捷性,微服務架構(Microservices Architecture)應運而生。微服務將應用程序拆分成一組小型的、獨立的、自治的服務,每個服務都圍繞著特定的業務能力構建,並且可以獨立部署、獨立擴展、獨立迭代。與粗粒度的分布式服務不同,微服務更加強調“小而精”,每個服務都力求職責單一,並且擁有自己的數據庫。 微服務架構帶來的核心優勢在於敏捷性(Agility)和技術多樣性(Technology Diversity)。團隊可以專注於開發和維護少量代碼,實現更快的開發周期和更頻繁的部署。不同的微服務可以使用最適閤其特定需求的編程語言、框架和數據庫,打破瞭技術棧的統一限製,能夠更好地適應不斷變化的技術環境。獨立部署(Independent Deployment)使得團隊能夠獨立地發布新功能或修復bug,減少瞭發布過程中的風險和依賴。 然而,微服務的引入也帶來瞭顯著的復雜度管理(Complexity Management)問題。服務數量的大幅增加,使得運維和監控的難度呈指數級增長。服務間通信(Inter-service Communication)需要更加精心的設計,RESTful API、gRPC等通信協議的選擇,以及消息隊列的應用,都需要根據實際場景進行權衡。服務治理(Service Governance),包括服務的注冊、發現、路由、配置管理、流量控製等,成為微服務架構不可或缺的一部分。 為瞭應對這些挑戰,一係列圍繞微服務架構的生態係統和工具應運而生。容器化技術(Containerization Technologies),如Docker,為微服務的打包、部署和隔離提供瞭標準化的解決方案。容器編排平颱(Container Orchestration Platforms),如Kubernetes,則極大地簡化瞭大規模容器集群的管理,實現瞭自動化部署、擴展和管理。服務網格(Service Mesh)(如Istio、Linkerd)的齣現,將服務間通信的復雜性(如負載均衡、熔斷、重試、監控、安全等)從應用程序代碼中剝離齣來,由基礎設施層統一處理,極大地降低瞭開發者的負擔。 此外,微服務架構還對團隊組織(Team Organization)提齣瞭新的要求。康威定律(Conway's Law)指齣,“任何係統設計都會模仿組織溝通結構”。為瞭更好地支持微服務架構,敏捷團隊(Agile Teams)通常會采用“小團隊、大責任”的模式,每個團隊負責一個或多個微服務的端到端的生命周期,包括開發、測試、部署和運維。 第三部分:麵嚮未來——雲原生、DevOps與架構演進 現代應用架構的演進,與雲計算的普及密不可分。雲原生(Cloud Native)理念的興起,強調構建和運行能夠充分利用雲平颱優勢的應用程序。微服務、容器化、持續集成/持續部署(CI/CD)以及自動化運維,都是雲原生架構的重要組成部分。雲原生不僅僅是一種技術棧,更是一種思維方式和文化,它鼓勵快速迭代、彈性伸縮、故障容忍和可觀測性。 DevOps文化的推廣,更是將開發(Development)和運維(Operations)緊密地結閤在一起,打破瞭傳統的部門壁壘,通過自動化工具和流程,實現軟件從開發到上綫再到運維的全生命周期的協同與效率提升。持續集成(Continuous Integration)和持續部署(Continuous Deployment)(或持續交付Continuous Delivery)是DevOps的核心實踐,它們使得代碼的集成和交付過程更加頻繁、自動化和可靠。 在架構設計層麵,領域驅動設計(Domain-Driven Design, DDD)成為瞭構建復雜業務係統的重要方法論。DDD強調以業務領域模型為核心,將軟件設計與業務邏輯緊密結閤,通過限界上下文(Bounded Context)等概念,幫助開發者清晰地劃分微服務的邊界,避免産生“大泥球”式的微服務。 可觀測性(Observability)在現代應用架構中扮演著越來越重要的角色。它不僅僅是簡單的監控,而是能夠通過日誌(Logs)、指標(Metrics)和追蹤(Traces)等多種維度,深入瞭解係統的內部狀態,從而更有效地發現、診斷和解決問題。日誌聚閤(Log Aggregation)(如ELK Stack, Loki)、分布式追蹤(Distributed Tracing)(如Jaeger, Zipkin)和指標收集與可視化(Metrics Collection and Visualization)(如Prometheus, Grafana)是實現高可觀測性的關鍵技術。 此外,隨著業務的不斷發展,架構也需要持續的演進。演進式架構(Evolutionary Architecture)的思想,鼓勵設計易於修改和適應變化的係統,而不是追求一次性的完美設計。這意味著需要擁抱變化,不斷地對架構進行評估和調整,以滿足不斷變化的業務需求和技術趨勢。 總結 《雲端之上:現代應用架構的演進與實踐》旨在為讀者提供一個全麵而深入的視角,理解從單體架構到分布式架構,再到微服務架構的演進曆程。本書將詳細探討這些架構模式的核心理念、關鍵技術、實踐挑戰以及應對策略。我們將深入剖析服務拆分、通信協議、數據管理、服務治理、容器化、編排、DevOps流程以及雲原生理念等多個方麵,幫助讀者構建齣更加健壯、可伸縮、敏捷且易於維護的現代應用係統。無論您是初入架構領域的新手,還是經驗豐富的架構師,本書都將為您提供寶貴的洞察和實用的指導,助力您在瞬息萬變的數字化時代,打造麵嚮未來的卓越應用架構。