Spring Cloud:第一章:基本介紹

Spring Cloud中文網(wǎng)
Spring Cloud 是什么?

Spring Cloud 是一系列框架的有序集合,將市面上開(kāi)發(fā)得比較好的模塊集成進(jìn)去,進(jìn)行封裝,從而減少了各模塊的開(kāi)發(fā)成本。
在這里插入圖片描述在這里插入圖片描述


在這里插入圖片描述

Spring Cloud 優(yōu)缺點(diǎn)

基于注解,沒(méi)有配置文件,解耦的
Spring Cloud 和 Dubbo 對(duì)比

Dubbo 只是實(shí)現(xiàn)了服務(wù)治理,而 Spring Cloud 實(shí)現(xiàn)了微服務(wù)架構(gòu)的方方面面,服務(wù)治理只是其中的一個(gè)方面。Spring Cloud 基于 Spring Boot,基于http協(xié)議,Dubbo基于RPC協(xié)議。
SpringCloud分布式開(kāi)發(fā)

通過(guò)spring cloud Eureka實(shí)現(xiàn)高可用的服務(wù)注冊(cè)中心以及實(shí)現(xiàn)微服務(wù)的注冊(cè)與發(fā)現(xiàn);通過(guò)spring cloud ribbon或feign實(shí)現(xiàn)服務(wù)間負(fù)載均衡的接口調(diào)用,同時(shí),為了分布式系統(tǒng)更為健壯,以避免服務(wù)調(diào)用使用spring cloud hystrix來(lái)進(jìn)行包裝,實(shí)現(xiàn)線程隔離并加入熔斷機(jī)制,以避免在微服務(wù)架構(gòu)中因個(gè)別服務(wù)出現(xiàn)異常而引起級(jí)聯(lián)故障蔓延。
五大常用spring cloud子項(xiàng)目

服務(wù)發(fā)現(xiàn)——Netflix Eureka

客服端負(fù)載均衡——Netflix Ribbon

斷路器——Netflix Hystrix

服務(wù)網(wǎng)關(guān)——Netflix Zuul

分布式配置——Spring Cloud Config
服務(wù)發(fā)現(xiàn)——Netflix Eureka

服務(wù)注冊(cè)中心 :eureka-server

作用:服務(wù)注冊(cè)中心提供服務(wù)注冊(cè)功能

服務(wù)提供方:eureka-client

作用:注冊(cè)服務(wù)到服務(wù)注冊(cè)中心
客服端負(fù)載均衡——Netflix Ribbon

在Spring Cloud中,有兩種服務(wù)調(diào)用方式,一種是Ribbon+RestTemplate,另一種是Feign。

當(dāng)Ribbon與Eureka配合使用時(shí),Ribbon可自動(dòng)從Eureka Server獲取服務(wù)提供者地址列表,并基于負(fù)載均衡算法,請(qǐng)求其中一個(gè)服務(wù)提供者實(shí)例。
斷路器——Netflix Hystrix

在分布式架構(gòu)中,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后,通過(guò)斷路由器的故障監(jiān)控(類似熔斷保險(xiǎn)絲),向調(diào)用方返回一個(gè)錯(cuò)誤響應(yīng),而不是長(zhǎng)時(shí)間的等待。這樣就不會(huì)使得線程因調(diào)用故障服務(wù)被長(zhǎng)時(shí)間占用不釋放,避免了故障在分布式系統(tǒng)中的蔓延。

Spring Cloud Hystrix針對(duì)上述問(wèn)題實(shí)現(xiàn)了斷路由器、線程隔離等一系列服務(wù)保護(hù)功能。它是基于Netflix Hystrix實(shí)現(xiàn),該框架的目標(biāo)在于通過(guò)控制那些訪問(wèn)遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫(kù)的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。

Hystrix具備服務(wù)降級(jí)、服務(wù)熔斷、線程和信號(hào)隔離、請(qǐng)求緩存、請(qǐng)求合并以及服務(wù)監(jiān)控等強(qiáng)大功能。
服務(wù)網(wǎng)關(guān)——Netflix Zuul

我們?cè)诜?wù)端實(shí)現(xiàn)的微服務(wù)接口,往往都會(huì)有一定的權(quán)限校驗(yàn)機(jī)制,比如對(duì)用戶登錄狀態(tài)的校驗(yàn)等;同時(shí)為了防止客戶端在發(fā)起的請(qǐng)求時(shí)被篡改等安全方面的考慮,還會(huì)增加一些簽名校驗(yàn)的機(jī)制存在。在微服務(wù)架構(gòu)中需要對(duì)每個(gè)模塊都去修改,為了簡(jiǎn)便也需要一套機(jī)制能夠很好的解決微服務(wù)架構(gòu)中對(duì)于微服務(wù)接口訪問(wèn)時(shí)各前置校驗(yàn)的冗余問(wèn)題。

為了解決上面的一系列的問(wèn)題,api網(wǎng)關(guān)應(yīng)運(yùn)而生

api網(wǎng)關(guān)是一個(gè)更加智能的應(yīng)用服務(wù)器,它的定義類似于面向?qū)ο笤O(shè)計(jì)模式中的Facade模式,它的存在就像是整個(gè)微服務(wù)架構(gòu)系統(tǒng)的門面一樣,所有的外部客戶端訪問(wèn)都需要經(jīng)過(guò)它來(lái)進(jìn)行調(diào)度和過(guò)濾,它除了要實(shí)現(xiàn)請(qǐng)求路由,負(fù)載均衡,校驗(yàn)過(guò)濾等功能。

spring cloud zuul通過(guò)與Eureka進(jìn)行整合,將自身的服務(wù)注冊(cè)到Eureka上,同時(shí)從Eureka中獲取所有其他微服務(wù)的實(shí)例信息。這樣的設(shè)計(jì),zuul默認(rèn)將會(huì)通過(guò)服務(wù)名作為ContextPath的方式來(lái)創(chuàng)建路由映射,部分情況下,這樣的默認(rèn)設(shè)置已經(jīng)可以實(shí)現(xiàn)大多數(shù)的路由需求。除了一些特殊的(比如兼容一些老的url)還需要做一些特別的配置。但是相比與之前的架構(gòu)下的運(yùn)維工作量,通過(guò)引入spring cloud zuul實(shí)現(xiàn)api網(wǎng)關(guān)后,已經(jīng)能夠大大減少了。

其次,對(duì)于冗余的簽名校驗(yàn),登錄校驗(yàn)在微服務(wù)架構(gòu)中的冗余問(wèn)題??梢元?dú)立成一個(gè)單獨(dú)的服務(wù)存在,只是他們被剝離和獨(dú)立出來(lái)之后,并不是給各個(gè)微服務(wù)調(diào)用,而是在api網(wǎng)關(guān)服務(wù)商進(jìn)行統(tǒng)一調(diào)用來(lái)對(duì)微服務(wù)接口做前置過(guò)濾,以實(shí)現(xiàn)微服務(wù)接口的攔截和校驗(yàn)。spring cloud zuul提供了一套過(guò)濾機(jī)制,它可以很好的支持過(guò)濾的任務(wù)。
分布式配置——Spring Cloud Config

config-server 配置服務(wù)端,服務(wù)管理配置信息
config-client 客戶端,客戶端調(diào)用server端暴露接口獲取配置信息