關(guān)于我們
書單推薦
新書推薦
|
Go語言高并發(fā)與微服務(wù)實(shí)戰(zhàn)
近年來云原生技術(shù)發(fā)展迅猛,幫助開發(fā)者在云上快速和頻繁地構(gòu)建、發(fā)布和部署應(yīng)用,以提高開發(fā)效率和快速定位故障。 微服務(wù)作為開展云原生技術(shù)落地的核心,它將復(fù)雜的單體應(yīng)用按照業(yè)務(wù)劃分并進(jìn)行有效地拆分,每個(gè)微服務(wù)都可以進(jìn)行獨(dú)立部署和開發(fā),大大提升了應(yīng)用開發(fā)效率。Go語言作為新生代的編譯型編程語言,具備語法簡(jiǎn)單、高并發(fā)性能良好和編譯速度快等特點(diǎn),是微服務(wù)架構(gòu)落地實(shí)踐的絕妙利器。
深入Go語言和微服務(wù)框架,提供高并發(fā)場(chǎng)景下Go微服務(wù)應(yīng)用實(shí)戰(zhàn)案例
寫作背景 Go語言在云計(jì)算時(shí)代大放異彩。 進(jìn)入互聯(lián)網(wǎng)時(shí)代,尤其是移動(dòng)互聯(lián)網(wǎng)時(shí)代之后,這個(gè)大環(huán)境面臨新的挑戰(zhàn),一方面在功能性方面要求越來越高:除了簡(jiǎn)單功能快速實(shí)現(xiàn)之外,還有對(duì)性能、安全、穩(wěn)定性、高可用和可擴(kuò)展性的諸多要求,而且越來越苛刻;另一個(gè)方面,更多的需求來自對(duì)效率的追求:包括開發(fā)、測(cè)試、部署、維護(hù)和迭代變更的效率,以及對(duì)成本的要求。 快速迭代是傳統(tǒng)企業(yè)的硬傷,這不是通過加班就能解決的。在滿足各種功能性的前提下,易用性的提升不僅僅滿足了企業(yè)的需求,也極大地改善了開發(fā)體驗(yàn)。 對(duì)效率的追求,推動(dòng)了云計(jì)算的產(chǎn)生和發(fā)展,以及云原生理念和架構(gòu)的產(chǎn)生,我們熟知的容器技術(shù)、微服務(wù)架構(gòu)以及新生的Service Mesh架構(gòu)都由此誕生,不可變基礎(chǔ)設(shè)施和聲明式API的理念也在實(shí)踐中被總結(jié)出來,并為后續(xù)的云原生架構(gòu)提供理論指導(dǎo)。云計(jì)算的發(fā)展以及云原生的推出,為云和云上產(chǎn)品帶來了除功能性之外的易用性特征。由于大部分維護(hù)工作由云承擔(dān),因此降低了對(duì)于維護(hù)的工作量,開發(fā)人員和應(yīng)用服務(wù)更加關(guān)注與業(yè)務(wù)實(shí)現(xiàn),而非業(yè)務(wù)實(shí)現(xiàn)的內(nèi)容應(yīng)該由云和云上產(chǎn)品提供。 對(duì)效率的追求,催生了云和云原生架構(gòu),帶來了易用性的提升,改善了開發(fā)體驗(yàn),從而進(jìn)一步提升了效率。這個(gè)過程會(huì)持續(xù)發(fā)生,架構(gòu)的演進(jìn)不是一蹴而就的,而是一個(gè)長(zhǎng)期發(fā)展的過程,因此云原生架構(gòu)也會(huì)持續(xù)演進(jìn)。在過去幾年間,云原生架構(gòu)中的容器/微服務(wù)等架構(gòu)都是在這個(gè)循環(huán)中不斷完善和普及的。 技術(shù)背景 微服務(wù)架構(gòu)是云原生架構(gòu)中的關(guān)鍵技術(shù)點(diǎn),也是本書主要的關(guān)注點(diǎn)。微服務(wù)的話題,近幾年一直很熱門,微服務(wù)是SOA架構(gòu)的一種具體實(shí)踐。除了微服務(wù)以外,Go語言也很熱門,越來越受到開發(fā)人員的青睞。Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型且具有垃圾回收功能的編程語言。 Go語言自2009年開源以來,持續(xù)受到關(guān)注。Go語言之所以厲害,是因?yàn)樗诜⻊?wù)端的開發(fā)中,能抓住程序員的痛點(diǎn),以最直接、簡(jiǎn)單、高效和穩(wěn)定的方式來解決問題。基于Go語言實(shí)現(xiàn)的微服務(wù),更好地體現(xiàn)微服務(wù)和Go語言的優(yōu)勢(shì)。 人類對(duì)于技術(shù)進(jìn)步的追求從未停歇。熱門的技術(shù)組合在一起,能不能發(fā)揮各自的優(yōu)勢(shì),變得更加高效?其實(shí)不然,在逐漸發(fā)展的環(huán)境和技術(shù)演化的過程中,存在著技術(shù)人員對(duì)主流技術(shù)趨勢(shì)的理解參差不齊現(xiàn)象。當(dāng)然架構(gòu)沒有絕對(duì)的對(duì)與錯(cuò),本書將會(huì)帶讀者走進(jìn)基于Go語言的高并發(fā)與微服務(wù)實(shí)戰(zhàn)世界,在這個(gè)世界里不停地探索和汲取經(jīng)驗(yàn)。 本書內(nèi)容以當(dāng)前流行的微服務(wù)架構(gòu)和Go語言的高并發(fā)特性為主線,介紹Go語言微服務(wù)的各個(gè)組件和并發(fā)實(shí)戰(zhàn)。本書包含四個(gè)部分的內(nèi)容: (1)第一部分淺談云原生與微服務(wù),涉及云原生架構(gòu)的全貌介紹和微服務(wù)的概述。 (2)第二部分介紹Go語言基礎(chǔ),側(cè)重于介紹Go語言的一些特性。 (3)第三部分深入Go語言的微服務(wù)實(shí)踐,介紹微服務(wù)架構(gòu)中涉及的基礎(chǔ)組件,如分布式配置中心、服務(wù)注冊(cè)與發(fā)現(xiàn)、輕量級(jí)通信機(jī)制與負(fù)載均衡、微服務(wù)的容錯(cuò)處理和分布式鏈路追蹤等組件,在熟悉組件原理的基礎(chǔ)上進(jìn)行并發(fā)實(shí)踐。 (4)最后一部分為綜合實(shí)戰(zhàn),將會(huì)結(jié)合Go語言微服務(wù)框架Go-kit實(shí)現(xiàn)一個(gè)完整的商品秒殺系統(tǒng),涉及本書介紹的各個(gè)微服務(wù)組件,并將這些組件進(jìn)行整合。 讀者對(duì)象 本書比較適合架構(gòu)師和有一定基礎(chǔ)的技術(shù)人員閱讀,特別是正在實(shí)踐或準(zhǔn)備實(shí)踐微服務(wù)的架構(gòu)師和開發(fā)人員,以及轉(zhuǎn)型到Go語言微服務(wù)開發(fā)的技術(shù)團(tuán)隊(duì)。希望本書能給讀者在微服務(wù)和Go語言開發(fā)實(shí)踐中獲取一些經(jīng)驗(yàn)和靈感,少走一些彎路,最終的目的是提升技術(shù)人員的開發(fā)體驗(yàn)和企業(yè)產(chǎn)品迭代的效率。 源碼及勘誤 本書提供源代碼下載(見封面后勒口,可掃碼或鏈接下載),備用下載地址為https://github.com/ longjoy/micro-go-book。 讀者在實(shí)踐時(shí),需要注意組件下載的版本,建議相關(guān)開發(fā)環(huán)境與本書一致,或者不低于本書所列的配置。不同版本之間存在兼容性問題,而且不同版本的軟件所對(duì)應(yīng)的功能有的也是不同的。 書中的內(nèi)容大多來自編者的工作經(jīng)驗(yàn),不免存在遺漏及錯(cuò)誤,歡迎指正。讀者可以直接發(fā)送郵件到郵箱(aoho002@gmail.com),在此提前表示感謝。 作者團(tuán)隊(duì)與致謝 本書由朱榮鑫、黃迪璇、張?zhí)旃餐瓿。具體章節(jié)的分工,其中第1、5、8、9、12章由朱榮鑫編寫;第3、4、6、10、11章由黃迪璇編寫;第2、7、13章由張?zhí)炀帉;全書由朱榮鑫統(tǒng)稿。 本書的完成需要感謝很多朋友和同行的傾力幫助,感謝Go語言社區(qū)的熱心小伙伴在本書撰寫前后提供了很多內(nèi)容組織方面的建議,他們犧牲不少休息時(shí)間幫忙審稿,給了筆者很多實(shí)質(zhì)性的指導(dǎo);感謝筆者所在的公司為筆者提供的良好平臺(tái),幫助筆者積累了大量Go語言高并發(fā)與微服務(wù)架構(gòu)實(shí)踐的經(jīng)驗(yàn)。 寫書是一件枯燥的事情,一本書從想法、策劃到出版非常不易,編輯老師給了編者很大的信心和幫助。在內(nèi)容和結(jié)構(gòu)組織上,編者也是同本書策劃編輯荊波老師反復(fù)進(jìn)行了討論和校正,因此特別感謝中國(guó)鐵道出版社有限公司的荊波編輯和其他工作人員為本書的出版所做的努力。 編 者 2020年2月
朱榮鑫
軟件工程碩士,微服務(wù)早期實(shí)踐者,微服務(wù)方面技術(shù)專家,對(duì)高并發(fā)、分布式有多年深入的實(shí)踐經(jīng)驗(yàn)。掘金優(yōu)秀作者,CSDN博客專家。公眾號(hào)“aoho求索”的作者。 黃迪璇 畢業(yè)于南京大學(xué),目前就職于國(guó)內(nèi)一線互聯(lián)網(wǎng)公司,曾就職于字節(jié)跳動(dòng)、騰訊,具有多年服務(wù)端開發(fā)經(jīng)驗(yàn),技術(shù)極客,熱衷于新技術(shù)的研究和實(shí)踐。 張?zhí)? 服務(wù)端技術(shù)專家,精耕于微服務(wù)、分布式、數(shù)據(jù)庫(kù)和性能調(diào)優(yōu)等后端開發(fā)領(lǐng)域。著有《Spring Cloud微服務(wù)架構(gòu)進(jìn)階》,CSDN博客專家。公眾號(hào)“程序員歷小冰”的作者。
第一篇 云原生與微服務(wù)
云原生與微服務(wù)分別是什么,它們之間有什么關(guān)系呢?本部分圍繞云原生與微服務(wù)的概 念展開介紹,我們透過云計(jì)算的歷史和系統(tǒng)架構(gòu)的演進(jìn),具體了解這兩個(gè)概念的意義及其背 后的技術(shù)發(fā)展。 第 1 章 云原生架構(gòu) 1.1 云計(jì)算的歷史 1 1.1.1 云計(jì)算的基礎(chǔ):虛擬化技術(shù) 1 1.1.2 基于虛擬機(jī)的云計(jì)算 3 1.1.3 容器的橫空出世和容器編排大戰(zhàn) 5 1.1.4 云計(jì)算演進(jìn)總結(jié) 6 1.2 云原生是什么 7 1.2.1 云原生出現(xiàn)的背景 7 1.2.2 云原生的定義 8 1.2.3 云原生與 12 因素 9 1.3 云原生的基礎(chǔ)架構(gòu) 11 1.3.1 微服務(wù) 11 1.3.2 容器 12 1.3.3 服務(wù)網(wǎng)格 13 1.3.4 DevOps 14 1.4 小結(jié) 15 第 2 章 微服務(wù)概述 2.1 系統(tǒng)架構(gòu)的演進(jìn) 16 2.1.1 單體架構(gòu) 16 2.1.2 垂直分層架構(gòu) 17 2.1.3 SOA 面向服務(wù)架構(gòu) 17 2.1.4 微服務(wù)架構(gòu) 19 2.1.5 云原生架構(gòu) 21 2.2 常見的微服務(wù)框架 22 2.2.1 Java 中的 Spring Cloud 與 Dubbo 框架 22 2.2.2 Go 語言中的 Go Kit 與 Go Micro 框架 24 2.3 微服務(wù)設(shè)計(jì)的六大原則 27 1.高內(nèi)聚,低耦合 27 2.高度自治 27 3.以業(yè)務(wù)為中心 28 4.彈性設(shè)計(jì) 28 5.日志與監(jiān)控 28 6.自動(dòng)化 28 2.4 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) 28 2.4.1 設(shè)計(jì)微服務(wù)的困境 28 2.4.2 解困之法:領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD) 29 2.4.3 DDD 的應(yīng)用領(lǐng)域 30 2.4.4 DDD 領(lǐng)域劃分 31 2.4.5 微服務(wù)架構(gòu)中的團(tuán)隊(duì)組織和管理 33 2.5 小結(jié) 34 第二篇 Go 語法基礎(chǔ)與特性功能 在正式進(jìn)入微服務(wù)組件的學(xué)習(xí)之前,我們要鞏固一下 Go 語言的基礎(chǔ),包括容器、原生 數(shù)據(jù)類型、函數(shù)與接口、結(jié)構(gòu)體和方法等常用的語法基礎(chǔ);其次是 Go 語言的特性功能:反 射與并發(fā)模型,介紹 Go 語言協(xié)程、通道、多路復(fù)用和同步的具體實(shí)踐;最后是 Golang Web 的相關(guān)介紹,一起構(gòu)建一個(gè)完整的 Go Web 服務(wù)器。 第 3 章 Go 語言基礎(chǔ) 3.1 Go 語言介紹 35 3.2 環(huán)境安裝 36 3.2.1 Go 開發(fā)包安裝 36 3.2.2 第一個(gè) Go 語言程序 38 3.2.3 編譯工具 40 3.3 基本語法 41 3.3.1 變量的聲明與初始化 41 3.3.2 原生數(shù)據(jù)類型 43 【實(shí)例 3-1】分別以 byte 和 rune 的方式遍歷字符串 44 3.3.3 指針 45 【實(shí)例 3-2】使用 flag 從命令行中讀取參數(shù) 47 3.3.4 常量與類型別名 48 3.3.5 分支與循環(huán)控制 49 3.4 Go 中常用的容器 50 3.4.1 數(shù)組 50 3.4.2 切片 51 【實(shí)例 3-3】切片的動(dòng)態(tài)擴(kuò)容 53 3.4.3 列表與字典 54 3.4.4 容器遍歷 57 【實(shí)例 3-4】對(duì)給出的數(shù)組 nums、切片 slis 和字典 tmpMap 分別進(jìn)行遍歷 57 3.5 函數(shù)與接口 58 3.5.1 函數(shù)聲明和參數(shù)傳遞 58 3.5.2 匿名函數(shù)和閉包 59 【實(shí)例 3-5】使用回調(diào)函數(shù)處理字符串 59 【實(shí)例 3-6】用閉包的特性實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)數(shù)器 60 3.5.3 接口聲明和嵌套 61 3.5.4 函數(shù)體實(shí)現(xiàn)接口 62 3.6 結(jié)構(gòu)體和方法 62 3.6.1 結(jié)構(gòu)體的定義 63 3.6.2 結(jié)構(gòu)體的實(shí)例化和初始化 63 3.6.3 方法與接收器 64 【實(shí)例 3-7】為 Person 結(jié)構(gòu)體添加修改姓名和輸出個(gè)人信息兩個(gè)方法 65 3.6.4 結(jié)構(gòu)體實(shí)現(xiàn)接口 66 【實(shí)例 3-8】使用一個(gè)結(jié)構(gòu)體同時(shí)實(shí)現(xiàn) Cat 和 Dog 接口 66 3.6.5 內(nèi)嵌和組合 67 【實(shí)例 3-9】?jī)?nèi)嵌不同結(jié)構(gòu)體表現(xiàn)不同行為 68 3.7 小結(jié) 69 第 4 章 進(jìn)階——Go 語言高級(jí)特性 4.1 依賴管理 70 4.1.1 包管理 70 4.1.2 GOPATH 72 4.1.3 Go Modules 73 4.2 反射基礎(chǔ) 73 4.2.1 reflect.Type 類型對(duì)象 74 4.2.2 類型對(duì)象 reflect.StructField 和 reflect.Method 76 4.2.3 reflect.Value 反射值對(duì)象 78 【實(shí)例 4-1】使用反射調(diào)用接口方法 80 4.3 并發(fā)模型 82 4.3.1 并發(fā)與并行 82 4.3.2 CSP 并發(fā)模型 82 4.3.3 常見的線程模型 83 4.3.4 MPG 線程模型概述 85 4.4 并發(fā)實(shí)踐 87 4.4.1 協(xié)程 goroutine 87 4.4.2 通道 channel 89 【實(shí)例 4-2】協(xié)程使用 channel 發(fā)送和接收數(shù)據(jù) 90 【實(shí)例 4-3】使用帶緩沖區(qū)的 channel 91 【實(shí)例 4-4】使用 switch 從多個(gè) channel 中讀取數(shù)據(jù) 92 4.4.3 sync 同步包 94 【實(shí)例 4-5】使用 sync.Mutex 控制多 goroutine 串行執(zhí)行 94 【實(shí)例 4-6】sync.RWMutex 允許多讀和單寫 95 【實(shí)例 4-7】sync.WaitGroup 阻塞主 goroutine 直到其他 goroutine 執(zhí)行結(jié)束 97 【實(shí)例 4-8】使用 sync.Map 并發(fā)添加數(shù)據(jù) 98 4.5 小結(jié) 99 第 5 章 構(gòu)建 Go Web 服務(wù)器 5.1 Web 的工作原理 100 5.1.1 HTTP 協(xié)議詳解 100 5.1.2 訪問 Web 站點(diǎn)的過程 103 5.2 使用 Go 語言構(gòu)建服務(wù)器 104 【實(shí)例 5-1】快速搭建一個(gè) Go Web 服務(wù)器 104 5.3 接收和處理請(qǐng)求 105 5.3.1 Web 工作的幾個(gè)概念 106 5.3.2 處理器處理請(qǐng)求 107 5.3.3 解析請(qǐng)求體 109 【實(shí)例 5-2】Go Web 請(qǐng)求體解析 109 5.3.4 返回響應(yīng)體 111 【實(shí)例 5-3】返回響應(yīng)體實(shí)踐 112 5.4 實(shí)踐案例:Golang Web 框架 Gin 實(shí)踐 113 5.5 服務(wù)端數(shù)據(jù)存儲(chǔ) 116 5.5.1 內(nèi)存存儲(chǔ) 116 【實(shí)例 5-4】服務(wù)端基于內(nèi)存的存儲(chǔ)方式實(shí)踐 116 5.5.2 database/sql 接口 118 5.5.3 關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)(MySQL) 118 【實(shí)例 5-5】服務(wù)端基于 MySQL 的存儲(chǔ)方式實(shí)踐 119 5.5.4 Nosql 數(shù)據(jù)庫(kù)存儲(chǔ)(MongoDB) 120 【實(shí)例 5-6】服務(wù)端基于 MongoDB 的存儲(chǔ)方式實(shí)踐 121 5.6 Golang ORM 框架 beego 實(shí)踐 122 5.7 小結(jié) 125 第三篇 微服務(wù)核心組件 本部分是全書的核心,介紹微服務(wù)中各個(gè)核心組件的原理和實(shí)踐應(yīng)用,包括分布式配置 中心、服務(wù)注冊(cè)與發(fā)現(xiàn)、微服務(wù)網(wǎng)關(guān)、微服務(wù)的容錯(cuò)、微服務(wù)中的通信與負(fù)載均衡、統(tǒng)一認(rèn) 證與授權(quán)、微服務(wù)中的鏈路追蹤。通過組件原理的介紹、組件的選型對(duì)比以及組件的實(shí)踐應(yīng) 用,吃透每一個(gè)微服務(wù)組件。 第 6 章 服務(wù)注冊(cè)與發(fā)現(xiàn) 6.1 服務(wù)注冊(cè)與發(fā)現(xiàn)的基本原理 126 6.1.1 服務(wù)注冊(cè)與發(fā)現(xiàn)中心的職責(zé) 126 6.1.2 服務(wù)實(shí)例注冊(cè)服務(wù)信息 127 6.1.3 CAP 原理 127 6.2 常用的服務(wù)注冊(cè)與發(fā)現(xiàn)框架 128 6.2.1 基于 Raft 算法的開箱即用服務(wù)發(fā)現(xiàn)組件 Consul 128 6.2.2 基于 HTTP 協(xié)議的分布式 key/Value 存儲(chǔ)組件 Etcd 130 6.2.3 重量級(jí)一致性服務(wù)組件 Zookeeper 131 6.2.4 服務(wù)注冊(cè)與發(fā)現(xiàn)組件的對(duì)比與選型 132 6.3 Consul 安裝和接口定義 133 6.3.1 Consul 的安裝與啟動(dòng) 133 6.3.2 Go-kit 項(xiàng)目結(jié)構(gòu) 134 6.3.3 服務(wù)注冊(cè)與發(fā)現(xiàn)接口 135 6.3.4 項(xiàng)目的總體結(jié)構(gòu) 135 6.4 實(shí)踐案例:直接使用 HTTP 的方式和 Consul 交互 140 6.4.1 服務(wù)注冊(cè)與健康檢查 142 6.4.2 服務(wù)注銷 144 6.4.3 服務(wù)發(fā)現(xiàn) 146 6.5 實(shí)踐案例:借助 Go-kit 服務(wù)注冊(cè)與發(fā)現(xiàn)包和 Consul 交互 147 6.5.1 服務(wù)注冊(cè)與健康檢查 148 6.5.2 服務(wù)注銷 149 6.5.3 服務(wù)發(fā)現(xiàn) 150 6.5.4 服務(wù)實(shí)例信息緩存 150 6.5.5 MyDiscoverClient 和 KitDiscoverClient 的比較 153 6.6 實(shí)踐案例:基于服務(wù)注冊(cè)與發(fā)現(xiàn)的 string-service 153 6.6.1 項(xiàng)目結(jié)構(gòu) 153 6.6.2 各層構(gòu)建 154 6.7 小結(jié) 162 第 7 章 遠(yuǎn)程過程調(diào)用 RPC 7.1 RPC 機(jī)制和實(shí)現(xiàn)過程 164 7.1.1 RPC 機(jī)制 164 7.1.2 傳遞參數(shù) 167 7.1.3 通信協(xié)議制定 168 7.1.4 出錯(cuò)和超時(shí)處理 170 7.1.5 通用 RPC 接口 171 7.2 簡(jiǎn)易的 Go 語言原生 RPC 172 7.2.1 實(shí)踐案例:Go 語言 RPC 過程調(diào)用實(shí)踐 172 7.2.2 服務(wù)端注冊(cè)實(shí)現(xiàn)原理分析 175 7.2.3 服務(wù)端處理 RPC 請(qǐng)求原理分析 178 7.2.4 客戶端發(fā)送 RPC 請(qǐng)求原理分析 182 7.2.5 資源重用 187 7.3 高性能的 gRPC 188 7.3.1 gRPC 的安裝 189 7.3.2 實(shí)踐案例:gRPC 過程調(diào)用實(shí)踐 190 7.3.3 流式編程 193 【實(shí)例 7-1】gRPC 流式請(qǐng)求 193 7.4 便捷的 Go-kit RPC 196 7.4.1 Go-kit 簡(jiǎn)介 196 7.4.2 實(shí)踐案例:Go-kit 過程調(diào)用實(shí)踐 197 7.5 小結(jié) 202 第 8 章 分布式配置中心 8.1 如何管理分布式應(yīng)用的配置 203 8.2 常見分布式配置中心開源組件 204 8.2.1 Spring Cloud Config. 204 8.2.2 Apollo 205 8.2.3 Disconf 208 8.2.4 分布式配置中心的對(duì)比 210 8.3 應(yīng)用 Spring Cloud Config 統(tǒng)一管理配置 210 8.3.1 搭建 Spring Cloud Config Server 210 8.3.2 Viper 介紹 213 【實(shí)例 8-1】Viper 實(shí)現(xiàn)讀取本地配置信息 214 8.3.3 實(shí)戰(zhàn)案例:動(dòng)手實(shí)現(xiàn) Spring Cloud Config 的 Go 語言客戶端 216 8.4 實(shí)踐案例:實(shí)現(xiàn)配置的熱更新 219 8.4.1 如何實(shí)現(xiàn)熱更新 219 8.4.2 Go 語言客戶端改進(jìn) 220 8.4.3 結(jié)果驗(yàn)證 223 8.5 配置信息的加密解密 224 8.5.1 JCE 環(huán)境安裝 225 8.5.2 對(duì)稱加密與解密 225 8.5.3 非對(duì)稱加密與解密 226 8.6 小結(jié) 227 第 9 章 微服務(wù)網(wǎng)關(guān) 9.1 微服務(wù)網(wǎng)關(guān)介紹與功能特性 228 9.2 實(shí)踐案例:自己動(dòng)手實(shí)現(xiàn)一個(gè)網(wǎng)關(guān) 231 9.2.1 實(shí)現(xiàn)思路 231 9.2.2 編寫反向代理方法 232 9.2.3 編寫入口方法 233 9.2.4 運(yùn)行 235 9.2.5 測(cè)試 235 9.3 API 網(wǎng)關(guān)選型 235 9.3.1 標(biāo)配組件:Nginx 網(wǎng)關(guān) 236 9.3.2 Java 前置網(wǎng)關(guān)服務(wù)最佳選型:Netflix Zuul 237 9.3.3 高可用服務(wù)網(wǎng)關(guān):Mashape Kong 239 9.3.4 三種常用 API 網(wǎng)關(guān)組件的指標(biāo)對(duì)比 240 9.4 Kong 接入 240 9.4.1 為什么使用 Kong 240 9.4.2 Kong 安裝實(shí)踐 241 【實(shí)例 9-1】Docker 方式安裝 Kong 242 9.4.3 創(chuàng)建服務(wù) 244 9.4.4 創(chuàng)建路由 245 9.5 安裝 Kong 插件 246 9.5.1 跨域身份驗(yàn)證:JWT 認(rèn)證插件 246 9.5.2 系統(tǒng)監(jiān)控報(bào)警:Prometheus 可視化監(jiān)控插件 248 9.5.3 實(shí)時(shí)鏈路數(shù)據(jù)追蹤:Zipkin 插件 250 9.5.4 進(jìn)階應(yīng)用:自定義 Kong 插件 252 【實(shí)例 9-2】自定義鑒權(quán)插件 token-auth 252 9.6 小結(jié) 257 第 10 章 微服務(wù)的容錯(cuò)處理與負(fù)載均衡 10.1 服務(wù)熔斷 258 10.1.1 分布式系統(tǒng)中的服務(wù)雪崩 258 10.1.2 服務(wù)熔斷保障系統(tǒng)可用性 260 10.1.3 斷路器 261 10.2 負(fù)載均衡 262 10.2.1 負(fù)載均衡類型 262 10.2.2 負(fù)載均衡算法 262 10.3 實(shí)踐案例:服務(wù)熔斷和負(fù)載均衡使用 263 10.3.1 負(fù)載均衡器 263 10.3.2 服務(wù)編寫 264 10.3.3 使用 Go-kit Hystrix 中間件 270 【實(shí)例 10-1】使用 Go-kit Hystrix 中間件修飾 Endpoint 270 10.4 Hystrix 詳解 271 10.4.1 Hystrix 基本使用 272 10.4.2 運(yùn)行流程 273 10.4.3 常用參數(shù)配置 274 10.5 Hystrix 監(jiān)控面板 275 10.5.1 獲取 Hystrix 命令調(diào)用信息 275 10.5.2 使用 Hystrix Dashboard 可視化面板 277 10.6 實(shí)踐案例:在網(wǎng)關(guān)中添加 Hystrix 熔斷和負(fù)載均衡 279 10.7 小結(jié) 282 第 11 章 統(tǒng)一認(rèn)證與授權(quán) 11.1 微服務(wù)安全的挑戰(zhàn)和現(xiàn)狀 283 11.2 常見的認(rèn)證與授權(quán)方案 283 11.2.1 當(dāng)前行業(yè)授權(quán)標(biāo)準(zhǔn) OAuth2 283 11.2.2 數(shù)據(jù)共享的分布式 Session 287 11.2.3 安全傳輸對(duì)象 JWT 288 11.3 實(shí)踐案例:基于 OAuth2 協(xié)議和 JWT 實(shí)現(xiàn)一套簡(jiǎn)單 的認(rèn)證和授權(quán)系統(tǒng) 290 11.3.1 系統(tǒng)整體架構(gòu) 290 11.3.2 授權(quán)服務(wù)器 291 1.用戶服務(wù)和客戶端服務(wù) 292 2.TokenGrant 令牌生成器 294 3.TokenService 令牌服務(wù) 296 4.TokenStore 令牌存儲(chǔ)器 300 5./oauth/token 和/oauth/check_token 303 6.請(qǐng)求訪問令牌和刷新令牌 306 11.3.3 資源服務(wù)器 311 1.令牌認(rèn)證 311 2.鑒權(quán) 312 3.訪問受限資源 313 11.4 小結(jié) 317 第 12 章 分布式鏈路追蹤 12.1 診斷分布式系統(tǒng)的問題 318 12.1.1 為什么需要分布式鏈路追蹤 318 12.1.2 什么是分布式鏈路追蹤 319 12.1.3 分布式鏈路追蹤規(guī)范:OpenTracing 320 12.1.4 分布式鏈路追蹤的基礎(chǔ)概念 321 12.2 幾種流行的分布式鏈路追蹤組件 323 12.2.1 簡(jiǎn)單易上手的 Twitter Zipkin 323 12.2.2 云原生鏈路監(jiān)控組件 Uber Jaeger 324 12.2.3 探針性能低損耗的 SkyWalking 326 12.2.4 鏈路統(tǒng)計(jì)詳細(xì)的 Pinpoint 327 12.2.5 4 種分布式鏈路追蹤組件的指標(biāo)對(duì)比 328 12.3 實(shí)踐案例:應(yīng)用 Zipkin 追蹤 Go 微服務(wù) 329 12.3.1 微服務(wù)中集成 zipkin-go 330 12.3.2 Go-kit 微服務(wù)框架集成 Zipkin 實(shí)現(xiàn)鏈路追蹤 337 1.HTTP 調(diào)用方式的鏈路追蹤 338 2.gRPC 調(diào)用方式的鏈路追蹤 342 12.4 小結(jié) 346 第四篇 綜合實(shí)戰(zhàn) 本部分是商品秒殺系統(tǒng)的實(shí)戰(zhàn)項(xiàng)目,綜合難度相對(duì)較高,我們通過分析業(yè)務(wù)系統(tǒng)的領(lǐng)域 設(shè)計(jì),將系統(tǒng)劃分成具體的微服務(wù),整合各個(gè)微服務(wù)組件,最終實(shí)現(xiàn)一個(gè)高并發(fā)的商品秒殺 系統(tǒng)。 第 13 章 綜合實(shí)戰(zhàn):秒殺系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 13.1 秒殺系統(tǒng)簡(jiǎn)介 347 13.2 項(xiàng)目架構(gòu)簡(jiǎn)介 350 13.2.1 項(xiàng)目簡(jiǎn)述 350 13.2.2 架構(gòu)信息 350 13.2.3 流程簡(jiǎn)介 352 13.3 整合升級(jí):各個(gè)微服務(wù)腳手架的組裝 353 13.3.1 服務(wù)注冊(cè)和發(fā)現(xiàn) 353 13.3.2 負(fù)載均衡策略 357 13.3.3 RPC 客戶端裝飾器 360 13.3.4 限流 362 13.3.5 Go 語言 Redis 使用簡(jiǎn)介 364 13.3.6 Zookeeper 集成 366 13.3.7 Go-kit 開發(fā)利器 Truss 367 13.4 秒殺核心邏輯 368 13.4.1 秒殺業(yè)務(wù)系統(tǒng) 370 13.4.2 秒殺核心系統(tǒng) 380 13.4.3 秒殺管理系統(tǒng) 384 13.5 性能壓測(cè) 386 13.5.1 查看服務(wù)的配置文件 386 13.5.2 壓測(cè)實(shí)驗(yàn) 387 13.6 小結(jié) 390
你還可能感興趣
我要評(píng)論
|