阿里P8根據(jù)企業(yè)需求講解微服務(wù)分布式系統(tǒng)開發(fā)527頁(yè)進(jìn)階筆記
開篇必水
分布式系統(tǒng)比單機(jī)系統(tǒng)復(fù)雜得多,但經(jīng)過(guò)多年的發(fā)展,業(yè)界已經(jīng)有了豐富的分布式系統(tǒng)理論,也有了許多優(yōu)秀的組件。在分布式系統(tǒng)理論里,最近流行的微服務(wù)架構(gòu)理論成了佼佼者,微服務(wù)的概念也成了當(dāng)前分布式系統(tǒng)實(shí)現(xiàn)方案中的主流,顯然,微服務(wù)架構(gòu)成了分布式系統(tǒng)的一種形式。優(yōu)秀的分布式系統(tǒng)組件早期主要以國(guó)內(nèi)阿里巴巴的Dubbo(現(xiàn)今已經(jīng)被Apache歸納進(jìn)入其孵化器)為主,后來(lái)從國(guó)外引入了Spring Boot和Spring Cloud,它們現(xiàn)在是微服務(wù)實(shí)現(xiàn)的主流方案。
為順應(yīng)技術(shù)的發(fā)展趨勢(shì),我對(duì)微服務(wù)進(jìn)行了深入的學(xué)習(xí)和研究,并且于2018年創(chuàng)作出版了《深入淺出Spring Boot 2.x》。免費(fèi)分享完整文檔共441頁(yè)私信【學(xué)習(xí)】即可獲取這兩份學(xué)習(xí)資料哦。

為了更進(jìn)一步地講解微服務(wù),滿足當(dāng)前企業(yè)搭建微服務(wù)系統(tǒng)的需要,我竭盡所能編寫了這本關(guān)于Spring Cloud的書。雖然Spring Cloud能夠有雙搭P微服務(wù)系統(tǒng),但微服務(wù)系統(tǒng)只是分布式系統(tǒng)的一種形式,它并不能解決分布式系統(tǒng)的所有問(wèn)題,例如,分布式緩存、會(huì)話、數(shù)據(jù)庫(kù)及其事務(wù)等,都不能通過(guò)Spring Cloud來(lái)有效處理。但這些問(wèn)題又是企業(yè)實(shí)施微服務(wù)系統(tǒng)時(shí)必須要面對(duì)的,甚至是一些企業(yè)的難點(diǎn)和痛點(diǎn)。因此,本書在詳細(xì)介紹Spring Cloud的基礎(chǔ)上,還會(huì)對(duì)常用的分布式技術(shù)進(jìn)行講解,以滿足企業(yè)的需要。

內(nèi)容安排
本書基于一線企業(yè)的實(shí)際應(yīng)用需求,介紹Spring Cloud微服務(wù)和常用的分布式系統(tǒng)。整體來(lái)說(shuō),全書分為4個(gè)部分。
第一部分:概述和基礎(chǔ)(1~2章)
本部分將講解分布式和微服務(wù)的基礎(chǔ)知識(shí)和理念,并且簡(jiǎn)單介紹本書需要用到的基礎(chǔ)知識(shí)。
第1章分布式和微服務(wù)概述

第2章技術(shù)基礎(chǔ):為了更好地介紹Spring Cloud,這里稍微介紹- .下Spring Boot和HTTP的REST風(fēng)格。因?yàn)镾pringCloud是以Spring Boot作為基石的,而各個(gè)服務(wù)系統(tǒng)又是通過(guò)REST風(fēng)格的請(qǐng)求集成在-起的, 所以學(xué)習(xí)它們將有助于我們深入學(xué)習(xí)Spring Cloud。當(dāng)然,如果你已經(jīng)對(duì)它們很熟悉了,也可以跳過(guò)本章,直接學(xué)習(xí)第3章的內(nèi)容。

第二部分:Spring Cloud微服務(wù)(3~12章)
介紹Spring Cloud的各類組件,這是微服務(wù)的核心內(nèi)容。介紹的組件包括服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)(Eureka)、服務(wù)調(diào)用(Ribbon 和OpenFeign)、斷路器(Hystix 和Resilience4j)、網(wǎng)關(guān)(Zuul和Gateway)、配置(Config)、 全鏈路追蹤(Sleuth)、 微服務(wù)的監(jiān)控(Admin)等。
第3章服務(wù)治理——Eureka:,Pivotal團(tuán)隊(duì)通過(guò)Spring Boot形式的封裝將Nettlix公司開發(fā)的分布式系統(tǒng)組件封裝了起來(lái),其中就包括Eureka, Eureka是Spring Cloud的服務(wù)治理中心。在使用Spring Boot進(jìn)行了二次封裝后,Bureka 的使用就顯得十分簡(jiǎn)易了。Eureka 作為一個(gè)微服務(wù)的治理中心,它是一個(gè)服務(wù)應(yīng)用,可以接收其他服務(wù)的注冊(cè),也可以發(fā)現(xiàn)和治理服務(wù)實(shí)例。

第4章客戶端負(fù)載均衡——Ribbon:Spring Cloud Netflix Ribbon是一種客戶端負(fù)載均衡的組件,為了方便,在本書中都簡(jiǎn)稱為Ribbon。在微服務(wù)架構(gòu)中,我們依照業(yè)務(wù)將系統(tǒng)進(jìn)行切分,但一個(gè)實(shí)際的業(yè)務(wù)往往需要多個(gè)微服務(wù)通過(guò)相互協(xié)作來(lái)完成,所以各種微服務(wù)之間存在服務(wù)調(diào)用。

第5章斷路器——Hystrix:Spring Cloud社區(qū)推薦開發(fā)者使用其他仍然活躍的開源項(xiàng)目,其中最推薦使用的是Resilience4J, 并且Spring Cloud社區(qū)也在加緊開發(fā)spring cloud-ircuitbreaker,來(lái)取代Hystrix。但這個(gè)項(xiàng)目還在開發(fā)中,并沒(méi)有發(fā)布,加之當(dāng)前不少企業(yè)也在使用Hystrix, 并且技術(shù)是相通的,所以這里還是決定介紹一下 Hystrix。

第6章新斷路器——Resilience4j:Resilience4j是一個(gè)輕量級(jí)的、易于使用的容錯(cuò)框架,它是受Netflix的Hystrix的啟發(fā),基于Java8和函數(shù)式編程設(shè)計(jì)的,所以在使用它的時(shí)候,可以看到大量的函數(shù)式編程設(shè)計(jì)。它與Hystrix 相比有幾個(gè)不同點(diǎn)。

第7章聲明式調(diào)用——OpenFeign:本書從第3章到第6章,介紹了微服務(wù)的核心內(nèi)容:服務(wù)治理、服務(wù)調(diào)用(Ribbon)和熔斷器(Hystrix和Resilience4j)。這些都是微服務(wù)的利器,只是從開發(fā)者的角度來(lái)說(shuō),和我們打交道最多的.是服務(wù)調(diào)用和熔斷器。服務(wù)調(diào)用使得多個(gè)微服務(wù)可以通過(guò)相互調(diào)用,為同一個(gè)業(yè)務(wù)服務(wù)。熔斷器則可以在很大的程度上保證服務(wù)調(diào)用。但是嚴(yán)格來(lái)講,Ribbon 使用REST請(qǐng)求方式編寫還是比較麻煩的,對(duì)于開發(fā)者也不算友好,因此在REST 請(qǐng)求方式的基礎(chǔ)上,一些開發(fā)者 又提供了接口聲明方式的調(diào)用,例如,我們本章要介紹的GitHub OpenFeign就是這樣的。

第8章舊API網(wǎng)關(guān)——Zuul:前面幾章,我們學(xué)習(xí)了服務(wù)注冊(cè)和發(fā)現(xiàn)(Eureka), 通過(guò)它們,我們能夠順利地管理我們的服務(wù);學(xué)習(xí)了服務(wù)之間的調(diào)用(Ribbon 和OpenFeign),讓各個(gè)服務(wù)聯(lián)系起來(lái),通過(guò)共同協(xié)助來(lái)完企業(yè)業(yè)務(wù)邏輯;還學(xué)習(xí)了斷路器(Hystrix和Resilience4j),它能盡可能地保護(hù)微服務(wù)之間的調(diào)用,通過(guò)熔斷的方式來(lái)避免服務(wù)依賴造成的雪崩。以上談到的這些都是Spring Cloud微服務(wù)的核心組件。本章開始讓我們學(xué)習(xí)微服務(wù)最后的一一個(gè)核心組件一API 網(wǎng)關(guān)。Netflix Zuul是-一個(gè)API網(wǎng)關(guān),它的主要功能是提供網(wǎng)關(guān)服務(wù)。

第9章新網(wǎng)關(guān)——Spring CloudGateway:在第8章中,我們講述了舊網(wǎng)關(guān)Netlix Zuul,并且告知讀者,Zuul 1.x只是性能一-般的網(wǎng)關(guān),加上Netlix Zuul 2.x版本經(jīng)常不能如期發(fā)布,所以新版的Spring Cloud不打算捆綁Zul了。新版的Spring Cloud提供了新的網(wǎng)關(guān)給開發(fā)者使用,這便是Spring Cloud Gateway。為了簡(jiǎn)便,下 文在沒(méi)有特別指明的情況下,將簡(jiǎn)稱它為Gateway。Gateway 并非是使用傳統(tǒng)的Jakarta EE的Servlet容器,它是采用響應(yīng)式編程的方式進(jìn)行開發(fā)的。在Gateway中,需要Spring Boot和Spring WebFlux提供的基于Netty的運(yùn)行環(huán)境。

第10章配置——Spring Cloud Config:Spring Cloud Config (為了方便,在不產(chǎn)生歧義時(shí),全書都簡(jiǎn)稱為Config)是一個(gè)支持微服務(wù)和分布式集中化提供配置的項(xiàng)目。微服務(wù)架構(gòu)中的實(shí)例可能會(huì)非常多,如果一個(gè)個(gè)地更新配置,運(yùn)維成本會(huì)十分大。為了簡(jiǎn)化配置的復(fù)雜性,一些開發(fā)者提出 了集中化管理配置的概念,也就是提供一個(gè)集中化的配置中心,讓我們可以統(tǒng)- -配置各個(gè)微服務(wù)實(shí)例。本章要講的Config 就是出于這個(gè)目的設(shè)計(jì)的。

第11章Spring Cloud Sleuth全鏈路追蹤:在前面的章節(jié)中,我們學(xué)習(xí)了Eureka 服務(wù)治理中心,通過(guò)它可以管理各個(gè)服務(wù),使得它們能夠相互協(xié)作工作。但是隨著業(yè)務(wù)變得復(fù)雜,服務(wù)也會(huì)復(fù)雜起來(lái),加上每-一個(gè)服 務(wù)都可以有多個(gè)實(shí)例,一旦發(fā)生 問(wèn)題,將很難查找問(wèn)題的根源。為了解決這個(gè)問(wèn)題,許多分布式開發(fā)者都開發(fā)了自己的鏈路監(jiān)控組件,使得請(qǐng)求能夠追蹤到各個(gè)服務(wù)實(shí)例中,典型的如谷歌(Google)的Dapper、推特(Twitter)的Zipkin和阿里巴巴(Alibaba) 的EagleEye, 它們都是當(dāng)前著名的鏈路追蹤組件。

第12章微服務(wù)的監(jiān)控——Spring Boot Admin:在一個(gè)優(yōu)秀的分布式系統(tǒng)中,監(jiān)控服務(wù)實(shí)例,及時(shí)發(fā)現(xiàn)實(shí)例存在的問(wèn)題是十分重要的。SpringBoot Admin就提供了這樣的功能,為了方便,在不引起歧義的情況下,下文將Spring Boot Admin簡(jiǎn)稱為Admin。Admin 是一個(gè)監(jiān)控平臺(tái),它可以檢測(cè)各個(gè)Spring Boot應(yīng)用,讓運(yùn)維和開發(fā)人員及時(shí)發(fā)現(xiàn)各個(gè)服務(wù)實(shí)例存在的問(wèn)題。Admin 是一個(gè) 基于Spring Boot Actuator 的控制臺(tái),也就是它可以通過(guò)Spring Boot Actuator暴露的端點(diǎn),來(lái)監(jiān)測(cè)各個(gè)實(shí)例的運(yùn)行狀況。Admin 的用戶界面(User Interface,UI)是采用AngularJs應(yīng)用程序構(gòu)建的。

第三部分:分布式技術(shù)(13~18章)
講解分布式的其他知識(shí),包括分布式發(fā)號(hào)機(jī)、分布式數(shù)據(jù)庫(kù)、分布式緩存、分布式會(huì)話和權(quán)限等。
第13章生成唯一的ID——發(fā)號(hào)機(jī)制:在數(shù)據(jù)庫(kù)(請(qǐng)注意,在本章中,如果沒(méi)有特別說(shuō)明,講到的數(shù)據(jù)庫(kù)就都是指關(guān)系數(shù)據(jù)庫(kù),而不包含類似Redis這樣的非關(guān)系數(shù)據(jù)庫(kù))中,主鍵往往是一條記錄的唯一標(biāo)識(shí),它具備唯- -性。在單機(jī)的時(shí)候,只需要考慮單個(gè)數(shù)據(jù)庫(kù)的問(wèn)題,相對(duì)簡(jiǎn)單,但在分布式和微服務(wù)系統(tǒng)里,就相對(duì)困難了,因?yàn)樗婕岸嗯_(tái)機(jī)器之間的協(xié)作。那么如何保證在分布式或者微服務(wù)的多個(gè)節(jié)點(diǎn)下生成唯一的ID, 如何讓ID具備- -定的可讀性呢? 這就需要一個(gè)發(fā) 號(hào)機(jī)制來(lái)控制了。如何實(shí)現(xiàn)發(fā)號(hào)機(jī)制,便是本章要討論的問(wèn)題。

第14章分布式數(shù)據(jù)庫(kù)技術(shù):在第1章我們談過(guò),互聯(lián)網(wǎng)會(huì)員的增加和業(yè)務(wù)的復(fù)雜化,必然導(dǎo)致大數(shù)據(jù)的存儲(chǔ),這時(shí)使用單機(jī)數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)存儲(chǔ)和訪問(wèn),就顯得捉襟見肘了。而劃分的方法在第1章也談過(guò),主要是水平、垂直以及混合分法。對(duì)分布式和微服務(wù)來(lái)說(shuō),一種業(yè)務(wù)就可能有很多的數(shù)據(jù),如交易,單數(shù)據(jù)庫(kù)也很有可能無(wú)法支撐,需要多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行支持,這種需要將數(shù)據(jù)庫(kù)拆分為多節(jié)點(diǎn)進(jìn)行存儲(chǔ)的技術(shù),便是本章需要的論的分布式數(shù)據(jù)庫(kù)技術(shù)。為了更好地闡述分布式數(shù)據(jù)庫(kù)的知識(shí),我們首先從分表、分庫(kù)和分區(qū)這樣的數(shù)據(jù)庫(kù)知識(shí)開始講述。不過(guò)本章我們還不會(huì)討論分布式事務(wù)的相關(guān)知識(shí),這將會(huì)在下章進(jìn)行討論。

第15章分布式數(shù)據(jù)庫(kù)事務(wù):上一章中,我們討論了分布式數(shù)據(jù)庫(kù)的知識(shí),主要是分片技術(shù)。這一章讓我們來(lái)討論分布式數(shù)據(jù)庫(kù)事務(wù),我們知道在互聯(lián)網(wǎng)的世界中,有些數(shù)據(jù)對(duì)一致性的要求是十分苛刻的,如商品的庫(kù)存和用戶的賬戶資金,而這些卻極有可能分別存儲(chǔ)在不同的數(shù)據(jù)庫(kù)節(jié)點(diǎn)中,那么如何在多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)中保證這些數(shù)據(jù)的一致性,就是分布式數(shù)據(jù)庫(kù)事務(wù)要解決的問(wèn)題。

第16章分布式緩存——Redis:在當(dāng)前互聯(lián)網(wǎng)中,緩存系統(tǒng)一般由Redis來(lái)完成,所以后續(xù)我們會(huì)集中討論Redis, 就不再討論其他緩存系統(tǒng)了。本書采用的是Redis的5.0.5版本,如果采用別的版本,在配置項(xiàng)上會(huì)有少量不同,不過(guò)也大同小異,不會(huì)有太大的問(wèn)題。

第17章分布式會(huì)話:在分布式系統(tǒng)中,有多個(gè)服務(wù)器節(jié)點(diǎn),這些節(jié)點(diǎn)甚至是跨服務(wù)的,如果會(huì)話信息只在一個(gè)節(jié)點(diǎn)上, 就需要- -定的機(jī)制來(lái)保證會(huì)話在多個(gè)服務(wù)節(jié)點(diǎn)之間能夠共享,方便是本章要討論的分布式會(huì)話。在分布式會(huì)話中,最重要的功能是安全驗(yàn)證,因?yàn)椴煌挠脩魰?huì)有不同的權(quán)限。

第18章分布式系統(tǒng)權(quán)限驗(yàn)證:本章會(huì)講述分布式系統(tǒng)的權(quán)限驗(yàn)證。實(shí)際上,在分布式會(huì)話中談到的使用緩存存儲(chǔ)會(huì)話(springsession-data-redis),也能在一定程度 上支持分布式的權(quán)限驗(yàn)證,不過(guò)一切還 需要從最基礎(chǔ)的Spring Security開始講起。因?yàn)檫@里涉及的內(nèi)容較多,所以我還是新建了工程,且將其命名為chapter18,這樣就可以根據(jù)需要新增對(duì)應(yīng)的模塊了。

第四部分:微服務(wù)系統(tǒng)實(shí)踐(19~20章)
通過(guò)Apache Thrift 講解遠(yuǎn)程過(guò)程調(diào)用(RPC),并且講解在分布式中處理高并發(fā)的一些常用技巧,最后給出一個(gè)微服務(wù)實(shí)例。
第19章遠(yuǎn)程過(guò)程調(diào)用:遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call, RPC)是-種服務(wù)調(diào)用的方式,它在許多企業(yè)中也得到了很多的應(yīng)用。事實(shí)上,在微服務(wù)中,推薦我們使用的是REST風(fēng)格的調(diào)用,而非RPC。那么為什么需要使用RPC?又如何使用呢?

第20章微服務(wù)設(shè)計(jì)和高并發(fā)實(shí)踐:以上幾章已經(jīng)闡述了大部分搭建微服務(wù)的內(nèi)容,本章主要講微服務(wù)實(shí)踐。在微服務(wù)中,要解決的大問(wèn)題是高并發(fā)問(wèn)題,這也是分布式中最受到關(guān)注的問(wèn)題之一。

因?yàn)檫@份《spring cloud微服務(wù)和分布式系統(tǒng)實(shí)戰(zhàn)》和《深入淺出springboot2.0》內(nèi)容實(shí)在太多,兩本書加起來(lái)一共971頁(yè),沒(méi)有辦法給大家全部展示出來(lái),需要獲取的小伙伴可以直接轉(zhuǎn)發(fā)+關(guān)注后私信(學(xué)習(xí))即可免費(fèi)獲取!

