序 1
16年國(guó)慶假期之后,我所在的公司因?yàn)闃I(yè)務(wù)需要,想搭建一個(gè) API網(wǎng)關(guān)來(lái)綜合治理已有業(yè)務(wù)調(diào)用服務(wù)(我司之前采用的是當(dāng)當(dāng)?shù)?Dubbo擴(kuò)展框架 Dubbox)。前期,我和同事們?cè)诩夹g(shù)選型環(huán)節(jié),討論了諸多目前比較紅火的技術(shù)框架和工具。最后達(dá)成一致,采用微服務(wù),來(lái)重構(gòu)和調(diào)整原先這些 Dubbox服務(wù),并決定使用 Spring Cloud(以下簡(jiǎn)稱 sc)來(lái)實(shí)現(xiàn) API網(wǎng)關(guān),爭(zhēng)取在 17年能順利平滑地從 Dubbox過(guò)度到 sc。而具體的 API網(wǎng)關(guān) demo研發(fā)工作就落實(shí)到我這里。
在開始研發(fā)工作之前,我參閱了包括官網(wǎng)在內(nèi)很多 sc研發(fā)資料,也去全球最大的同性技術(shù)交友網(wǎng)站 GitHub上找了很多代碼來(lái)仔細(xì)研讀。但感覺老外的這些 Guide(指南)總是講的不是很通透。也許是有些概念他們覺得太基礎(chǔ)了,就直接略過(guò)不表。因此我也感到很迷茫,老是問(wèn)自己,到底應(yīng)該如何去實(shí)現(xiàn)這個(gè) API網(wǎng)關(guān),完成公司指派給我的研發(fā)任務(wù)呢?
幸好,某一天我看到《 SpringCloud與 Docker實(shí)戰(zhàn)微服務(wù)》這本開源書。根據(jù)書中例子,我?guī)缀鯖](méi)有費(fèi)什么大工夫就搭建了一個(gè) API網(wǎng)關(guān)的 demo。甚至其中某些講解點(diǎn),看了之后能讓我一下子恍然大悟,回頭再看那些老外的 Guide,我終于明白了其中的“奧義”。我真的非常感激這位開源書作者,他深入淺出地將 sc所涉及的各種知識(shí)點(diǎn)和工具的使用做了完整和詳細(xì)的敘述。從此,我也記住了此書作者的網(wǎng)名 itmuch。
幾天后,我將 demo做了細(xì)化和擴(kuò)展,并在 oschina的碼云網(wǎng)站上開源分享了出去(具體網(wǎng)址見 http://git.oschina.net/darkranger/spring-cloud-books )。而無(wú)巧不巧, itmuch居然在我項(xiàng)目下的評(píng)論區(qū)留言了。經(jīng)過(guò)加 QQ,加微信一系列同性技術(shù)交友過(guò)程(你們懂的)取得了聯(lián)系,也終于知道了這位 itmuch的真名,那就是此書作者周立同學(xué)。在閑聊過(guò)程中,他透露了自己正在以那本《 Spring Cloud與 Docker實(shí)戰(zhàn)微服務(wù)》開源書為基礎(chǔ),繼續(xù)擴(kuò)展和具體深入 sc這套微服務(wù)開發(fā)體系所包含的所有技術(shù)點(diǎn),準(zhǔn)備出版成冊(cè),讓更多的朋友和企業(yè)能學(xué)習(xí)和借鑒 sc這套東西開發(fā)符合自己業(yè)務(wù)場(chǎng)景的微服務(wù)框架。并邀請(qǐng)我為新書做校對(duì)和修正工作。正巧,我也越來(lái)越喜歡鉆研 sc,也希望對(duì)自己碰到的一些問(wèn)題向他指教,所以就答應(yīng)了下來(lái)。這其中的過(guò)程真的一言難敘,總算最后我也不辱使命地完成了這本書的校對(duì)工作。
我可以很負(fù)責(zé)的說(shuō),本書是周立同學(xué)本人在工作和學(xué)習(xí) sc后總結(jié)出的精華,書中每段代碼,每個(gè)字都是他自己寫的,絕無(wú)任何抄襲之舉。完全可以說(shuō)是一個(gè)努力勤奮、能獨(dú)立思考、認(rèn)真做事的同學(xué)的良心之作。這樣的“業(yè)界良心”在如今這個(gè)充滿浮躁的社會(huì)中已不多見。希望有更多的讀者能珍惜此書,感謝周立同學(xué)給我們的幫助。除此之外,我也希望讀者能在閱讀完此書后,可以自己寫點(diǎn)代碼,親身去實(shí)踐一把,感受 sc的精妙之處。
最后,在草促完成本文之前,值此新春佳節(jié)之際,我也祝大家新年快樂(lè),家庭安康,財(cái)源滾滾,愛情事業(yè)雙豐收。
2017年 1月 25日
農(nóng)歷丙申年臘月二十八
吳峻申 青客機(jī)器人有限公司架構(gòu)師
序 2
2013年,我在 EMC聽了一個(gè)關(guān)于 Docker與測(cè)試的分享,才第一次近距離認(rèn)識(shí) Docker。在 2014年底時(shí),在項(xiàng)目上開始接觸 Docker。2015年上半年,我讀了兩本書: ThePhoenix Project和 Migrating to Cloud-NativeApplicationArchitectures。這兩本書讓我對(duì) DevOps、微服務(wù)和云原生架構(gòu)有了初步的認(rèn)識(shí)。
2015年 9月,我以首席架構(gòu)師的身份加入麻袋理財(cái),當(dāng)時(shí)第一件事情就是就借助 Dao-Cloud在公司內(nèi)部推行基于 Docker的基礎(chǔ)落地的方案。花了三個(gè)月,一個(gè)簡(jiǎn)易的方案就已經(jīng)可以正常運(yùn)作。但是在這個(gè)過(guò)程中,卻發(fā)現(xiàn)和應(yīng)用的契合度不是太高,需要對(duì)應(yīng)用的架構(gòu)做改造。
2016年年初當(dāng)時(shí)正好有一個(gè)項(xiàng)目要做 2.0,之前是一個(gè)典型的單體應(yīng)用(使用 Spring MVC),這次準(zhǔn)備做微服務(wù)改造,以滿足業(yè)務(wù)對(duì)技術(shù)快速迭代、橫向擴(kuò)展的要求。我當(dāng)時(shí)對(duì) Spring Boot和 Spring Cloud已經(jīng)有所耳聞,但是還停留于 Demo的地步。正好借著這個(gè)機(jī)會(huì),準(zhǔn)備推廣 Spring Boot。之后有個(gè)全新的項(xiàng)目,我們完全按照微服務(wù)架構(gòu),使用 Spring Boot和 Cloud進(jìn)行開發(fā),并采用 CI/ CD自動(dòng)化流程和容器化部署。
2016年 10月份時(shí),一次偶然的計(jì)劃, Spring Cloud中國(guó)社區(qū)的許進(jìn)找到了我,讓我把團(tuán)隊(duì)在實(shí)踐過(guò)程中的經(jīng)驗(yàn)總結(jié)在社區(qū)做了分享,從而認(rèn)識(shí)了本書的作者周立。當(dāng)時(shí)周立正好在寫一本書,他希望我能夠幫他進(jìn)行 review,我就欣然答應(yīng)了。
看到了書的標(biāo)題《 Spring Cloud與 Docker微服務(wù)實(shí)戰(zhàn)》,這不就是我一直在做的工作嗎?于是我連夜把這本書讀了一遍,感覺相見恨晚,如果一年前有這本書,那我就可以少走很多彎路了。
本書用一個(gè)例子貫穿始終,講解了 SpringCloud的經(jīng)典組件、微服務(wù)架構(gòu),以及與 Docker的集成。書中提供了詳細(xì)的代碼,可以讓讀者在了解基礎(chǔ)概念的同時(shí),可以馬上腳踏實(shí)地的擼起袖子寫代碼。
王天青 DaoCloud首席架構(gòu)師
2017年 3月
序 3
最近幾年,微服務(wù)的概念非常火爆,由于它確實(shí)能解決傳統(tǒng)單體應(yīng)用所帶來(lái)的種種問(wèn)題
(比如代碼可維護(hù)性低、部署不靈活、不夠穩(wěn)定、不易擴(kuò)展,等等),所以大家對(duì)“如何成功實(shí)施微服務(wù)架構(gòu)”越來(lái)越感興趣。在 Java技術(shù)棧中,SpringCloud獨(dú)樹一幟,提供了一整套微服務(wù)解決方案,它基于 SpringBoot而構(gòu)建,延續(xù)了 Spring體系一貫的“簡(jiǎn)單可依賴”,但是由于微服務(wù)本身涉及到的技術(shù)或概念比較廣,所以在正式“入坑”之前,最好能有一本實(shí)戰(zhàn)性強(qiáng)的書籍作為參考。但是很遺憾, SpringCloud太新了,國(guó)內(nèi)幾乎沒(méi)有一本完整講解其用法的新書。在今年年初,我偶然得知周立兄在編寫 SpringCloud相關(guān)的書籍,感到非常驚喜,在和他交流的過(guò)程中,我能感覺到他對(duì)技術(shù)的把控力以及對(duì)知識(shí)分享的熱情!閱讀這本書的過(guò)程是非常愉悅的,不僅僅是因?yàn)樗Y(jié)構(gòu)之清晰,文風(fēng)之流暢,更重要的是實(shí)戰(zhàn)型極強(qiáng),相信大家能在本書的指導(dǎo)下,順利地基于 SpringCloud&Docker打造出自己的微服務(wù)應(yīng)用。
杜云飛 上海小蟲數(shù)據(jù)
序 4
隨著微服務(wù)在國(guó)內(nèi)的推廣普及,許多企業(yè)紛紛將微服務(wù)作為 IT架構(gòu)的轉(zhuǎn)型方向,并進(jìn)行大量探索和嘗試,但在具體落地實(shí)踐微服務(wù)的過(guò)程中還缺乏實(shí)際的設(shè)計(jì)思路和實(shí)現(xiàn)方案。本書從微服務(wù)設(shè)計(jì)原則和理念出發(fā),詳細(xì)說(shuō)明了如何通過(guò) SpringCloud及 Docker建立高效可用的微服務(wù)解決方案,并對(duì) Spring Cloud的架構(gòu)及組件、容器鏡像的制作與編排進(jìn)行逐一講解,具備較強(qiáng)的實(shí)戰(zhàn)指導(dǎo)意義。本書能夠幫助技術(shù)人員快速了解和應(yīng)用微服務(wù),通過(guò)技術(shù)的變革與提升幫助業(yè)務(wù)適應(yīng)市場(chǎng)的快速變化,從而提升技術(shù)的價(jià)值。
廖俊杰,廣發(fā)銀行 IDC團(tuán)隊(duì)負(fù)責(zé)人
序 5
隨著微服務(wù)架構(gòu)提出和廣泛流行, Spring Cloud提供了一套完整的微服務(wù)解決方案。目前國(guó)內(nèi)已經(jīng)有眾多公司生產(chǎn)大規(guī)模地 Spring Cloud解決 IT架構(gòu)、提高生產(chǎn)力。相信在 1-3年內(nèi), Spring Cloud無(wú)疑是 Java企業(yè)級(jí)微服務(wù)應(yīng)用之中的霸主。在《 Spring Cloud與 Docker微服務(wù)架構(gòu)實(shí)戰(zhàn)》一書中,作者由淺入深的對(duì) Spring Cloud的主要常用組件進(jìn)行案例剖析和精彩講解,讓讀者能快速上手,快速搭建基于 Spring Cloud的微服務(wù)應(yīng)用。
許進(jìn)(xujin.org)Spring Cloud中國(guó)社區(qū)創(chuàng)始人,中間件高級(jí)研發(fā)工程師
序 6
周立在寫完本書初稿后,我第一時(shí)間拿到了初稿,從零學(xué)習(xí)了 SpringCloud,SpringCloud提供了構(gòu)建分布式系統(tǒng)所需的“全家桶”。如果你想從零搭建一套分布式系統(tǒng),本書可以作為你的領(lǐng)路者,帶你進(jìn)入 spring cloud的世界。
張開濤
序 7
在 Spring尚未出現(xiàn)的“蠻荒”時(shí)代, Java程序員們還在迷茫地創(chuàng)造著各種“語(yǔ)法糖”來(lái)試圖提高生產(chǎn)效率。然而無(wú)論怎么努力, Java語(yǔ)言仍被許多人冠以“裹腳布”的名號(hào)——畢竟你一不小心就會(huì)把它寫的又臭又長(zhǎng)。
隨著 Spring體系的出現(xiàn)與逐步完善,似乎有一種經(jīng)歷著 Java工業(yè)革命的感覺。的確,任何事物都各有利弊,但我仍然想說(shuō), Spring團(tuán)隊(duì)給 Java程序員們帶來(lái)了春天(就像它的名字一樣),它神奇地把“裹腳布”變成了“絲綢”,因?yàn)樗畲蟮奶刭|(zhì)可以用兩個(gè)字來(lái)形容——優(yōu)雅。相信使用過(guò) SpringFramework、SpringMVC、SpringData、SpringBoot或 Spring Cloud等一系列框架,并研讀過(guò)它們?cè)创a的人,都能夠體會(huì)到“優(yōu)雅”二字的含義。
盡管 Spring家族擁有如此多而美好的大塊“語(yǔ)法糖”,但它們過(guò)去在國(guó)內(nèi)的傳播似乎都不怎么順利。我經(jīng)常說(shuō),國(guó)內(nèi)對(duì)新技術(shù)的廣泛應(yīng)用一般比國(guó)外要晚三到五年,無(wú)論后端、前端還是架構(gòu)理念。這是許多因素導(dǎo)致的,比如信息閉塞、語(yǔ)言不通、甚至固步自封。我相信隨著國(guó)內(nèi)互聯(lián)網(wǎng)人才越來(lái)越多,新技術(shù)應(yīng)用的延時(shí)一定會(huì)越來(lái)越短。或許很多人為了舊系統(tǒng)的穩(wěn)定而不愿升級(jí),這可以理解,但我希望人們可以擁抱新的事物,而不是排斥。現(xiàn)如今微服務(wù)架構(gòu)理念興起,人們急需一個(gè)快捷、穩(wěn)定、一站式的分布式微服務(wù)解決方案, Spring Cloud正是為此而誕生。可國(guó)內(nèi)熟知 Spring Cloud的人目前仍寥寥無(wú)幾,大部分人從未聽說(shuō)過(guò),想要學(xué)習(xí)的人不知從何開始,對(duì)官方的英文文檔也一知半解。人們需要一本能把他們領(lǐng)進(jìn) Spring Cloud這扇門的“紅寶書”,這便是本書的目的,也是本書作者周立的初衷——希望能夠?yàn)闇p少國(guó)內(nèi)新技術(shù)的延時(shí)而出一份力。
我與周立在 2016年相識(shí),在短暫的交流后我們都產(chǎn)生了相見恨晚的感覺。遇見志同道合的人并不容易,我們的技術(shù)理念很相似。他有著對(duì)技術(shù)的熱忱、靈活的頭腦、以及開源分享技術(shù)的無(wú)私精神,正是這股精神促使他做了許多分享技術(shù)的事情,并且編寫了這本書(相信我,寫書并不賺錢)。我十分欣賞周立身上的這些特質(zhì),因此當(dāng)他跟我提到想出書并找我?guī)兔r(shí),我毫不猶豫地答應(yīng)了他。我相信他未來(lái)能夠成為某一技術(shù)領(lǐng)域的專家,這是他的目標(biāo),他也具備這樣的潛質(zhì)。
本書的切入點(diǎn)也非常好,它并不糾結(jié)于冗長(zhǎng)的源碼解讀或原理解釋,而是更多地注重實(shí)戰(zhàn),這在如今互聯(lián)網(wǎng)爆炸式發(fā)展的時(shí)代相當(dāng)重要。現(xiàn)在人們更傾向于使用敏捷開發(fā)盡快做出產(chǎn)品來(lái)進(jìn)行試錯(cuò),并在后續(xù)版本中快速迭代。因此本書的實(shí)戰(zhàn)經(jīng)驗(yàn)在軟件工程層面上會(huì)給予閱讀者很大提升,它可以讓你更快地搭建分布式微服務(wù)架構(gòu),然后把精力留在編寫業(yè)務(wù)邏輯上,提高你的生產(chǎn)力,并最終做出更好的產(chǎn)品——這也是 Spring團(tuán)隊(duì)一直希望達(dá)到的效果。
現(xiàn)在,讓我們隨本書進(jìn)入 Spring Cloud的世界,一起感受它的優(yōu)雅吧!
張英磊
2017年 3月 29日
1 微服務(wù)架構(gòu)概述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 單體應(yīng)用架構(gòu)存在的問(wèn)題1
1.2 如何解決單體應(yīng)用架構(gòu)存在的問(wèn)題3
1.3 什么是微服務(wù)3
1.4 微服務(wù)架構(gòu)的優(yōu)點(diǎn)與挑戰(zhàn)5
1.4.1 微服務(wù)架構(gòu)的優(yōu)點(diǎn)5
1.4.2 微服務(wù)架構(gòu)面臨的挑戰(zhàn)5
1.5 微服務(wù)設(shè)計(jì)原則6
1.6 如何實(shí)現(xiàn)微服務(wù)架構(gòu)7
1.6.1 技術(shù)選型7
1.6.2 架構(gòu)圖及常用組件8
2 微服務(wù)開發(fā)框架——Spring Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1 Spring Cloud 簡(jiǎn)介10
2.2 Spring Cloud 特點(diǎn)10
2.3 Spring Cloud 版本11
2.3.1 版本簡(jiǎn)介11
2.3.2 子項(xiàng)目一覽12
2.3.3 Spring Cloud/Spring Boot 版本兼容性13
3 開始使用Spring Cloud 實(shí)戰(zhàn)微服務(wù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Spring Cloud 實(shí)戰(zhàn)前提14
3.1.1 技術(shù)儲(chǔ)備14
3.1.2 工具及軟件版本15
3.2 服務(wù)提供者與服務(wù)消費(fèi)者16
3.3 編寫服務(wù)提供者16
3.3.1 手動(dòng)編寫項(xiàng)目17
3.3.2 使用Spring Initializr 快速創(chuàng)建Spring Boot 項(xiàng)目21
3.4 編寫服務(wù)消費(fèi)者23
3.5 為項(xiàng)目整合Spring Boot Actuator 25
3.6 硬編碼有哪些問(wèn)題27
4 微服務(wù)注冊(cè)與發(fā)現(xiàn). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.1 服務(wù)發(fā)現(xiàn)簡(jiǎn)介29
4.2 Eureka 簡(jiǎn)介31
4.3 Eureka 原理31
4.4 編寫Eureka Server 33
4.5 將微服務(wù)注冊(cè)到Eureka Server 上35
4.6 Eureka Server 的高可用36
4.6.1 將應(yīng)用注冊(cè)到Eureka Server 集群上38
4.7 為Eureka Server 添加用戶認(rèn)證39
4.7.1 將微服務(wù)注冊(cè)到需認(rèn)證的Eureka Server 40
4.8 理解Eureka 的元數(shù)據(jù)41
4.8.1 改造用戶微服務(wù)41
4.8.2 改造電影微服務(wù)41
4.9 Eureka Server 的REST 端點(diǎn)43
4.9.1 示例45
4.9.2 注銷微服務(wù)實(shí)例49
4.10 Eureka 的自我保護(hù)模式51
4.11 多網(wǎng)卡環(huán)境下的IP 選擇52
4.11.1 忽略指定名稱的網(wǎng)卡52
4.11.2 使用正則表達(dá)式,指定使用的網(wǎng)絡(luò)地址52
4.11.3 只使用站點(diǎn)本地地址53
4.11.4 手動(dòng)指定IP 地址53
4.12 Eureka 的健康檢查53
5 使用Ribbon 實(shí)現(xiàn)客戶端側(cè)負(fù)載均衡. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.1 Ribbon 簡(jiǎn)介56
5.2 為服務(wù)消費(fèi)者整合Ribbon 57
5.3 使用Java 代碼自定義Ribbon 配置60
5.4 使用屬性自定義Ribbon 配置63
5.5 脫離Eureka 使用Ribbon 64
6 使用Feign 實(shí)現(xiàn)聲明式REST 調(diào)用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.1 Feign 簡(jiǎn)介67
6.2 為服務(wù)消費(fèi)者整合Feign 67
6.3 自定義Feign 配置69
6.4 手動(dòng)創(chuàng)建Feign 72
6.4.1 修改用戶微服務(wù)72
6.4.2 修改電影微服務(wù)76
6.5 Feign 對(duì)繼承的支持78
6.6 Feign 對(duì)壓縮的支持79
6.7 Feign 的日志80
6.8 使用Feign 構(gòu)造多參數(shù)請(qǐng)求82
6.8.1 GET 請(qǐng)求多參數(shù)的URL 82
6.8.2 POST 請(qǐng)求包含多個(gè)參數(shù)83
7 使用Hystrix 實(shí)現(xiàn)微服務(wù)的容錯(cuò)處理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
7.1 實(shí)現(xiàn)容錯(cuò)的手段85
7.1.1 雪崩效應(yīng)85
7.1.2 如何容錯(cuò)86
7.2 使用Hystrix 實(shí)現(xiàn)容錯(cuò)88
7.2.1 Hystrix 簡(jiǎn)介88
7.2.2 通用方式整合Hystrix 89
7.2.3 Hystrix 斷路器的狀態(tài)監(jiān)控與深入理解91
7.2.4 Hystrix 線程隔離策略與傳播上下文93
7.2.5 Feign 使用Hystrix 96
7.3 Hystrix 的監(jiān)控101
7.3.1 Feign 項(xiàng)目的Hystrix 監(jiān)控102
7.4 使用Hystrix Dashboard 可視化監(jiān)控?cái)?shù)據(jù)103
7.5 使用Turbine 聚合監(jiān)控?cái)?shù)據(jù)105
7.5.1 Turbine 簡(jiǎn)介105
7.5.2 使用Turbine 監(jiān)控多個(gè)微服務(wù)105
7.5.3 使用消息中間件收集數(shù)據(jù)108
8 使用Zuul 構(gòu)建微服務(wù)網(wǎng)關(guān). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.1 為什么要使用微服務(wù)網(wǎng)關(guān)113
8.2 Zuul 簡(jiǎn)介115
8.3 編寫Zuul 微服務(wù)網(wǎng)關(guān)115
8.4 Zuul 的路由端點(diǎn)118
8.5 Zuul 的路由配置詳解119
8.6 Zuul 的安全與Header 122
8.6.1 敏感Header 的設(shè)置122
8.6.2 忽略Header 123
8.7 使用Zuul 上傳文件124
8.7.1 編寫文件上傳微服務(wù)124
8.8 Zuul 的過(guò)濾器127
8.8.1 過(guò)濾器類型與請(qǐng)求生命周期127
8.8.2 編寫Zuul 過(guò)濾器128
8.8.3 禁用Zuul 過(guò)濾器130
8.9 Zuul 的容錯(cuò)與回退130
8.9.1 為Zuul 添加回退131
8.10 Zuul 的高可用133
8.10.1 Zuul 客戶端也注冊(cè)到了Eureka Server 上133
8.10.2 Zuul 客戶端未注冊(cè)到Eureka Server 上133
8.11 使用Sidecar 整合非JVM 微服務(wù)134
8.11.1 編寫Node.js 微服務(wù)135
8.11.2 編寫Sidecar 136
8.11.3 Sidecar 的端點(diǎn)138
8.11.4 Sidecar 與Node.js 微服務(wù)分離部署139
8.11.5 Sidecar 原理分析139
9 使用Spring Cloud Config 統(tǒng)一管理微服務(wù)配置. . . . . . . . . . . . . . . . . . . . . . . 142
9.1 為什么要統(tǒng)一管理微服務(wù)配置142
9.2 Spring Cloud Config 簡(jiǎn)介143
9.3 編寫Config Server 144
9.3.1 Config Server 的端點(diǎn)145
9.4 編寫Config Client 147
9.5 Config Server 的Git 倉(cāng)庫(kù)配置詳解149
9.6 Config Server 的健康狀況指示器152
9.7 配置內(nèi)容的加解密153
9.7.1 安裝JCE 153
9.7.2 Config Server 的加解密端點(diǎn)153
9.7.3 對(duì)稱加密153
9.7.4 存儲(chǔ)加密的內(nèi)容154
9.7.5 非對(duì)稱加密155
9.8 使用/refresh 端點(diǎn)手動(dòng)刷新配置155
9.9 使用Spring Cloud Bus 自動(dòng)刷新配置157
9.9.1 Spring Cloud Bus 簡(jiǎn)介157
9.9.2 實(shí)現(xiàn)自動(dòng)刷新158
9.9.3 局部刷新159
9.9.4 架構(gòu)改進(jìn)159
9.9.5 跟蹤總線事件160
9.10 Spring Cloud Config 與Eureka 配合使用161
9.11 Spring Cloud Config 的用戶認(rèn)證162
9.11.1 Config Client 連接需用戶認(rèn)證的Config Server 163
9.12 Config Server 的高可用164
9.12.1 Git 倉(cāng)庫(kù)的高可用164
9.12.2 RabbitMQ 的高可用164
9.12.3 Config Server 自身的高可用165
10 使用Spring Cloud Sleuth 實(shí)現(xiàn)微服務(wù)跟蹤. . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
10.1 為什么要實(shí)現(xiàn)微服務(wù)跟蹤167
10.2 Spring Cloud Sleuth 簡(jiǎn)介168
10.3 整合Spring Cloud Sleuth 170
10.4 Spring Cloud Sleuth 與ELK 配合使用172
10.5 Spring Cloud Sleuth 與Zipkin 配合使用176
10.5.1 Zipkin 簡(jiǎn)介176
10.5.2 編寫Zipkin Server 176
10.5.3 微服務(wù)整合Zipkin 178
10.5.4 使用消息中間件收集數(shù)據(jù)181
10.5.5 存儲(chǔ)跟蹤數(shù)據(jù)183
11 Spring Cloud 常見問(wèn)題與總結(jié). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
11.1 Eureka 常見問(wèn)題186
11.1.1 Eureka 注冊(cè)服務(wù)慢186
11.1.2 已停止的微服務(wù)節(jié)點(diǎn)注銷慢或不注銷187
11.1.3 如何自定義微服務(wù)的Instance ID 188
11.1.4 Eureka 的UNKNOWN 問(wèn)題總結(jié)與解決189
11.2 Hystrix/Feign 整合Hystrix 后首次請(qǐng)求失敗190
11.2.1 原因分析191
11.2.2 解決方案191
11.3 Turbine 聚合的數(shù)據(jù)不完整191
11.3.1 解決方案192
11.4 Spring Cloud 各組件配置屬性193
11.4.1 Spring Cloud 的配置193
11.4.2 原生配置193
11.5 Spring Cloud 定位問(wèn)題思路總結(jié)194
12 Docker 入門. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
12.1 Docker 簡(jiǎn)介197
12.2 Docker 的架構(gòu)197
12.3 安裝Docker 199
12.3.1 系統(tǒng)要求199
12.3.2 移除非官方軟件包199
12.3.3 設(shè)置Yum 源199
12.3.4 安裝Dokcer 200
12.3.5 卸載Docker 201
12.4 配置鏡像加速器201
12.5 Docker 常用命令202
12.5.1 Docker 鏡像常用命令202
12.5.2 Docker 容器常用命令204
13 將微服務(wù)運(yùn)行在Docker 上. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
13.1 使用Dockerfile 構(gòu)建Docker 鏡像209
13.1.1 Dockerfile 常用指令210
13.1.2 使用Dockerfile 構(gòu)建鏡像215
13.2 使用Docker Registry 管理Docker 鏡像217
13.2.1 使用Docker Hub 管理鏡像217
13.2.2 使用私有倉(cāng)庫(kù)管理鏡像219
13.3 使用Maven 插件構(gòu)建Docker 鏡像220
13.3.1 快速入門221
13.3.2 插件讀取Dockerfile 進(jìn)行構(gòu)建222
13.3.3 將插件綁定在某個(gè)phase 執(zhí)行223
13.3.4 推送鏡像224
13.4 常見問(wèn)題與總結(jié)226
14 使用Docker Compose 編排微服務(wù). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
14.1 Docker Compose 簡(jiǎn)介227
14.2 安裝Docker Compose 227
14.2.1 安裝Compose 228
14.2.2 安裝Compose 命令補(bǔ)全工具228
14.3 Docker Compose 快速入門229
14.3.1 基本步驟229
14.3.2 入門示例229
14.3.3 工程、服務(wù)、容器230
14.4 docker-compose.yml 常用命令230
14.4.1 build 230
14.4.2 command 231
14.4.3 dns 231
14.4.4 dns_search 231
14.4.5 environment 231
14.4.6 env_file 232
14.4.7 expose 232
14.4.8 external_links 232
14.4.9 image 232
14.4.10 links 232
14.4.11 networks 233
14.4.12 network_mode 233
14.4.13 ports 233
14.4.14 volumes 233
14.4.15 volumes_from 234
14.5 docker-compose 常用命令234
14.5.1 build 234
14.5.2 help 235
14.5.3 kill 235
14.5.4 logs 235
14.5.5 port 235
14.5.6 ps 235
14.5.7 pull 235
14.5.8 rm 236
14.5.9 run 236
14.5.10 scale 236
14.5.11 start 236
14.5.12 stop 236
14.5.13 up 236
14.6 Docker Compose 網(wǎng)絡(luò)設(shè)置237
14.6.1 基本概念237
14.6.2 更新容器237
14.6.3 links 238
14.6.4 指定自定義網(wǎng)絡(luò)238
14.6.5 配置默認(rèn)網(wǎng)絡(luò)239
14.6.6 使用已存在的網(wǎng)絡(luò)239
14.7 綜合實(shí)戰(zhàn):使用Docker Comose 編排Spring Cloud 微服務(wù)240
14.7.1 編排Spring Cloud 微服務(wù)240
14.7.2 編排高可用的Eureka Server 243
14.7.3 編排高可用Spring Cloud 微服務(wù)集群及動(dòng)態(tài)伸縮245
14.8 常見問(wèn)題與總結(jié)247
后記. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248