前言
Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智能路由,微代理,控制總線,一次性令牌,全局鎖,領(lǐng)導(dǎo)選舉,分布式會(huì)話,集群狀態(tài))。
注意:
首先,盡管Spring Cloud帶有“Cloud”這個(gè)單詞,但它并不是云計(jì)算解決方案,而是在Spring Boot基礎(chǔ)之上構(gòu)建的,用于快速構(gòu)建分布式系統(tǒng)的通用模式的工具集。
其次,使用Spring Cloud開發(fā)的應(yīng)用程序非常適合在Docker和PaaS(比如Pivotal Cloud Foundry)上部署,所以又叫做云原生應(yīng)用(Cloud Native Application)。云原生可以簡單地理解為面向云環(huán)境的軟件架構(gòu)。
Spring Boot用來開發(fā)項(xiàng)目
Spring Cloud用來管理項(xiàng)目,Spring Cloud管理的項(xiàng)目需要基于Spring Boot來開發(fā)
Spring Cloud常用的組件列舉:
- Eureka:服務(wù)注冊與發(fā)現(xiàn)組件,用于實(shí)現(xiàn)服務(wù)的自動(dòng)注冊與發(fā)現(xiàn)。
- Ribbon:負(fù)載均衡組件,用于實(shí)現(xiàn)客戶端的負(fù)載均衡。
- Feign:聲明式的HTTP客戶端,用于簡化服務(wù)間的調(diào)用。
- Hystrix:容錯(cuò)管理組件,用于實(shí)現(xiàn)服務(wù)的容錯(cuò)和降級(jí)。
- Zuul:API網(wǎng)關(guān)組件,用于實(shí)現(xiàn)統(tǒng)一的訪問入口和路由。
- Config:配置管理組件,用于實(shí)現(xiàn)分布式系統(tǒng)的配置管理。
- Bus:消息總線組件,用于實(shí)現(xiàn)配置的動(dòng)態(tài)刷新。
- Sleuth:分布式追蹤組件,用于實(shí)現(xiàn)分布式系統(tǒng)的請求追蹤。
- Stream:消息驅(qū)動(dòng)組件,用于實(shí)現(xiàn)分布式系統(tǒng)的消息傳遞。
- Security:安全管理組件,用于實(shí)現(xiàn)分布式系統(tǒng)的安全管理。
- Nacos:動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
- Consul:服務(wù)發(fā)現(xiàn)和配置管理工具。
- Zipkin:分布式跟蹤系統(tǒng),用于追蹤請求的調(diào)用鏈。
- Spring Cloud Gateway:新一代的API網(wǎng)關(guān),用于實(shí)現(xiàn)統(tǒng)一的訪問入口和路由。
- Spring Cloud Alibaba:阿里巴巴提供的一套基于Spring Cloud的微服務(wù)解決方案,包括Nacos、Sentinel、Dubbo等組件。
- Seata:分布式事務(wù)解決方案,用于解決分布式系統(tǒng)中的事務(wù)一致性問題。
本篇博客是Spring Cloud 常用組件的相關(guān)博客文章的合集,涉及Spring Cloud常用的組件,比如Nacos,Gateway,Sentinel,OpenFeign,Ribbon等,結(jié)合實(shí)際應(yīng)用場景闡述相關(guān)組件的使用。
引出
1.SpringCloud是,在Spring Boot基礎(chǔ)之上構(gòu)建的,用于快速構(gòu)建分布式系統(tǒng)的通用模式的工具集;
2.單體架構(gòu)到微服務(wù)Microservices架構(gòu)的變遷;
3.動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)nacos;
4.聲明式的HTTP客戶端,用于簡化服務(wù)間的調(diào)用openFeign;
5.流量控制、熔斷降級(jí)規(guī)則統(tǒng)一配置和管理的入口sentinel;
6.新一代的API網(wǎng)關(guān),用于實(shí)現(xiàn)統(tǒng)一的訪問入口和路由gateway;文章來源地址http://www.zghlxwxcb.cn/news/detail-776780.html
單體架構(gòu)到微服務(wù)
1.單體架構(gòu),微服務(wù),分布式
SpringCloud溯源——從單體架構(gòu)到微服務(wù)Microservices架構(gòu) & 分布式和微服務(wù) & 為啥要用微服務(wù)
2.服務(wù)器安裝nacos+sentinel
SpringCloud相關(guān)組件——nacos和sentinel的安裝和配置 & 運(yùn)行內(nèi)存情況 & 服務(wù)器被非法登陸嘗試的解決
服務(wù)注冊與發(fā)現(xiàn)–Nacos+Eureka
0.Eureka(服務(wù)注冊和發(fā)現(xiàn))
Eureka(服務(wù)注冊和發(fā)現(xiàn))——Eureka的簡介和原理 & Eureka的使用和分析 & 心跳續(xù)約策略,服務(wù)的下線和剔除,自我保護(hù) & Eureka集群的搭建
用在前面的微服務(wù)學(xué)習(xí)過程中注冊中心和配置中心是兩個(gè)非常重要的組成部分,但是注冊中心、配置中心的管理卻非常困難,特別是配置中心在更新完配置之后需要用到Bus進(jìn)行配置推送,整個(gè)操作過程及其麻煩,正是因?yàn)檫@些原因阿里推出了一款叫做nacos的應(yīng)用,該應(yīng)用在能夠?qū)崿F(xiàn)注冊中心的同時(shí)也實(shí)現(xiàn)了配置中心,而且操作十分簡單,能夠?qū)⒊绦騿T從繁瑣的注冊中心、配置中心的操作中解救出來。
英文全稱Dynamic Naming and Configuration Service,Na為naming/nameServer即注冊中心,co為configuration即注冊中心,service是指該注冊/配置中心都是以服務(wù)為核心。
Nacos注冊中心分為server與client,server采用Java編寫,為client提供注冊發(fā)現(xiàn)服務(wù)與配置服務(wù)。而client可以用多語言實(shí)現(xiàn),client與微服務(wù)嵌套在一起,nacos提供sdk和openApi,如果沒有sdk也可以根據(jù)openApi手動(dòng)寫服務(wù)注冊與發(fā)現(xiàn)和配置拉取的邏輯。
1.Nacos的Linux安裝配置
Nacos基礎(chǔ)(1)——初識(shí)Dynamic Naming and Configuration Service & Linux上nacos安裝 + 配置 + 運(yùn)行【附安裝包】
華為云云耀云服務(wù)器L實(shí)例評測|SpringCloud相關(guān)組件——nacos和sentinel的安裝和配置 & 運(yùn)行內(nèi)存情況 & 服務(wù)器被非法登陸嘗試的解決
nacos參數(shù)設(shè)置初步(JVM調(diào)優(yōu))
nacos應(yīng)用——占用內(nèi)存過多問題解決(JVM調(diào)優(yōu)初步)
2.Nacos作為注冊中心和配置中心
Nacos基礎(chǔ)(2)——nacos的服務(wù)器和命名空間 & springBoot整合nacos & 多個(gè)nacos配置的情況
3.Nacos集群和nginx
Nacos基礎(chǔ)(3)——nacos+nginx & 集群的配置和啟動(dòng) & 端口開放 & nginx反向代理nacos集群
Eureka和Nacos的區(qū)別?
-
eureka是一個(gè)jar包,必須在項(xiàng)目中引用才能發(fā)布,eureka沒有配置中心
-
nacos是一個(gè)可運(yùn)行的服務(wù)程序。nacos有配置中心
-
eureka是ap方案,nacos默認(rèn)是cp方案
-
CAP方案
CAP原則又稱CAP定理,指的是在一個(gè)分布式系統(tǒng)中,一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance)。
- 分區(qū)容錯(cuò)性(Partition tolerance) : 分布式系統(tǒng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的時(shí)候,仍然能夠?qū)ν馓峁┓?wù)。因?yàn)橐恍┕收?,使得有些?jié)點(diǎn)之間不連通了,整個(gè)網(wǎng)絡(luò)就分成了幾塊區(qū)域,不同的區(qū)域仍然可以正常訪問數(shù)據(jù)。分區(qū)容錯(cuò)性是必須的
- 可用性(Availability):每一個(gè)請求不管成功或者失敗都有響應(yīng)。
- 一致性(Consistency):在分布式系統(tǒng)中的所有數(shù)據(jù)備份,在同一時(shí)刻是否同樣的值。
4.Apollo(阿波羅)配置中心
Apollo(阿波羅)——攜程推出的分布式配置管理中心 & 啟動(dòng)Apollo & SpringBoot集成 & @ConfigurationProperties的使用姿勢
主要內(nèi)容:
- 1.如何啟動(dòng)Apollo;
- 2.如何SpringBoot集成;
- 3.@ConfigurationProperties的使用姿勢;
服務(wù)的調(diào)用–OpenFeign+Ribbon
1.RestTemplate+Ribbon
SpringCloud入門(微服務(wù)調(diào)用 RestTemplate)——微服務(wù)調(diào)用的方式 & RestTemplate的使用 & 使用nacos的服務(wù)名初步(Ribbon負(fù)載均衡)
2.OpenFeign
SpringCloud入門(微服務(wù)調(diào)用 OpenFeign)——從RestTemplate到OpenFeign & OpenFeign的相關(guān)配置 & 源碼的分析和請求流程拆解
實(shí)際使用遇到的問題及解決
-
bug記錄——The bean ‘xxx.FeignClientSpecification‘ could not be registered.
-
bug記錄——設(shè)置了feign的fallback,但是沒有生效
3.微服務(wù)調(diào)用鏈路分析 Sleuth+Zipkin
SpringCloud鏈路追蹤——Spring Cloud Sleuth 和 Zipkin 介紹 & Windows 下使用初步
流量治理–Sentinel
Sentinel 控制臺(tái)是流量控制、熔斷降級(jí)規(guī)則統(tǒng)一配置和管理的入口,它為用戶提供了機(jī)器自發(fā)現(xiàn)、簇點(diǎn)鏈路自發(fā)現(xiàn)、監(jiān)控、規(guī)則配置等功能。在 Sentinel 控制臺(tái)上,我們可以配置規(guī)則并實(shí)時(shí)查看流量控制效果。
隨著微服務(wù)的普及,服務(wù)調(diào)用的穩(wěn)定性變得越來越重要。Sentinel以“流量”為切入點(diǎn),在流量控制、斷路、負(fù)載保護(hù)等多個(gè)領(lǐng)域開展工作,保障服務(wù)可靠性。
哨兵具有以下特點(diǎn):
- 場景豐富: Sentinel 支持阿里巴巴雙十一的關(guān)鍵場景10多年,如秒殺(即控制突發(fā)流量,使其在系統(tǒng)容量可接受范圍內(nèi)),消息負(fù)載轉(zhuǎn)移,不可靠下游應(yīng)用的斷路。
- 全面的實(shí)時(shí)監(jiān)控: Sentinel 提供實(shí)時(shí)監(jiān)控能力。您可以秒級(jí)精確查看服務(wù)器的監(jiān)控?cái)?shù)據(jù),甚至可以看到少于500個(gè)節(jié)點(diǎn)的集群的整體運(yùn)行狀態(tài)。
- 廣泛的開源生態(tài)系統(tǒng): Sentinel 提供了開箱即用的模塊,可以輕松地與其他開源框架/庫集成,例如 Spring Cloud、Dubbo 和 gRPC。使用Sentinel只需要引入相關(guān)的依賴,做一些簡單的配置即可。
- Sound SPI Extensions: Sentinel 提供了簡單易用且完善的 SPI 擴(kuò)展接口。您可以使用 SPI 擴(kuò)展快速自定義邏輯,例如,您可以定義自己的規(guī)則管理,或適應(yīng)特定的數(shù)據(jù)源。
1.雪崩問題和Sentinel初識(shí)
Sentinel學(xué)習(xí)(1)——CAP理論,微服務(wù)中的雪崩問題,和Hystix的解決方案 & Sentinel的相關(guān)概念 + 下載運(yùn)行
2.Sentinel的流控和熔斷
Sentinel學(xué)習(xí)(2)——sentinel的使用,引入依賴和配置 & 對消費(fèi)者進(jìn)行流控 & 對生產(chǎn)者進(jìn)行熔斷降級(jí)
統(tǒng)一的訪問入口和路由–Gateway
SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,該項(xiàng)目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技術(shù)開發(fā)的網(wǎng)關(guān),它旨在為微服務(wù)架構(gòu)提供一種簡單有效的統(tǒng)一的 API 路由管理方式。
SpringCloud Gateway 作為 Spring Cloud 生態(tài)系統(tǒng)中的網(wǎng)關(guān),目標(biāo)是替代 Zuul,在Spring Cloud 2.0以上版本中,沒有對新版本的Zuul 2.0以上最新高性能版本進(jìn)行集成,仍然還是使用的Zuul 2.0之前的非Reactor模式的老版本。而為了提升網(wǎng)關(guān)的性能,SpringCloud Gateway是基于WebFlux框架實(shí)現(xiàn)的,而WebFlux框架底層則使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway 的目標(biāo),不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關(guān)基本的功能,例如:安全,監(jiān)控/指標(biāo),和限流。
SpringCloud Gateway 特征
SpringCloud官方,對SpringCloud Gateway 特征介紹如下:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 斷路器
(3)集成 Spring Cloud DiscoveryClient
(4)Predicates(謂詞、斷言) 和 Filters 作用于特定路由,易于編寫的 Predicates 和 Filters
(5)具備一些網(wǎng)關(guān)的高級(jí)功能:動(dòng)態(tài)路由、限流、路徑重寫
從以上的特征來說,和Zuul的特征差別不大。SpringCloud Gateway和Zuul主要的區(qū)別,還是在底層的通信框架上。
專業(yè)術(shù)語
a)Filter(過濾器):
和Zuul的過濾器在概念上類似,可以使用它攔截和修改請求,并且對上游的響應(yīng),進(jìn)行二次處理。過濾器為org.springframework.cloud.gateway.filter.GatewayFilter類的實(shí)例。
b)Route(路由):
網(wǎng)關(guān)配置的基本組成模塊,和Zuul的路由配置模塊類似。一個(gè)Route模塊由一個(gè) ID,一個(gè)目標(biāo) URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配,目標(biāo)URI會(huì)被訪問。
c)Predicate(謂詞、斷言):
這是一個(gè) Java 8 的 Predicate,可以使用它來匹配來自 HTTP 請求的任何內(nèi)容,例如 headers 或參數(shù)。斷言的輸入類型是一個(gè) ServerWebExchange。
工作流程
客戶端向 Spring Cloud Gateway 發(fā)出請求。然后在 Gateway Handler Mapping 中找到與請求相匹配的路由,將其發(fā)送到 Gateway Web Handler。Handler 再通過指定的過濾器鏈來將請求發(fā)送到我們實(shí)際的服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。過濾器之間用虛線分開是因?yàn)檫^濾器可能會(huì)在發(fā)送代理請求之前(“pre”)或之后(“post”)執(zhí)行業(yè)務(wù)邏輯。
類型 | 作用 |
---|---|
pre | 這種過濾器在請求被路由之前調(diào)用。我們可利用這種過濾器實(shí)現(xiàn)身份驗(yàn)證、在集群中選擇請求的微服務(wù)、記錄調(diào)試信息等。 |
post | 這種過濾器在路由到微服務(wù)以后執(zhí)行。這種過濾器可用來為響應(yīng)添加標(biāo)準(zhǔn)的HTTP Header、收集統(tǒng)計(jì)信息和指標(biāo)、將響應(yīng)從微服務(wù)發(fā)送給客戶端等。 |
Filter在“pre”類型過濾器中可以做參數(shù)校驗(yàn)、權(quán)限校驗(yàn)、流量監(jiān)控、?志輸出、協(xié)議轉(zhuǎn)換等,在“post”類型的過濾器中可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改、?志的輸出、流量監(jiān)控等。
1.Gateway的入門案例
Spring Cloud Gateway學(xué)習(xí)(1)—— Gateway 的基本概念 & 引入依賴需要注意的事項(xiàng) +解決方案 & 全局網(wǎng)關(guān)的入門使用案例
2.Gateway的認(rèn)證鑒權(quán),與Sentinel整合
Spring Cloud Gateway學(xué)習(xí)(2)—— Gateway 中文亂碼的解決 & 基于gateway的登陸認(rèn)證和鑒權(quán)案例 & gateway和sentinel整合案例
事務(wù),分布式事務(wù)–Seata
0.MySQL數(shù)據(jù)庫的事務(wù)
MySQL進(jìn)階(事務(wù))——轉(zhuǎn)賬事務(wù)的問題 COMMIT,ROLLBACK & 百萬條數(shù)據(jù)插入的性能調(diào)優(yōu)=3萬次提交變成1次
本篇博客結(jié)合生活中常見的轉(zhuǎn)賬案例,分析了事務(wù)的案例,模擬網(wǎng)絡(luò)失敗情況下事務(wù)回滾的情況;分析了百萬數(shù)據(jù)插入數(shù)據(jù)庫時(shí),如何借助提交模式來進(jìn)行MySQL插入數(shù)據(jù)庫的性能調(diào)優(yōu)。
MySQL進(jìn)階(再論事務(wù))——什么是事務(wù) & 事務(wù)的隔離級(jí)別 & 結(jié)合MySQL案例詳細(xì)分析
主要內(nèi)容:
1.事務(wù)(TRANSACTION)是一個(gè)不可分割的邏輯單元,包含了一組數(shù)據(jù)庫操作命令,并且把所有的命令作為一個(gè)整體向系統(tǒng)提交,要么都執(zhí)行、要么都不執(zhí)行;
2.隔離級(jí)別和臟讀、不可重復(fù)讀以及幻象讀的對應(yīng)關(guān)系如下:
隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻讀 |
---|---|---|---|
READ UNCOMMITTED | 允許 | 允許 | 允許 |
READ COMMITED | 不允許 | 允許 | 允許 |
REPEATABLE READ 【默認(rèn)的隔離級(jí)別】 | 不允許 | 不允許 | 允許 |
SERIALIZABLE | 不允許 | 不允許 | 不允許 |
3.在MySQL數(shù)據(jù)庫中,默認(rèn)的事務(wù)隔離級(jí)別是REPEATABLE READ 可重復(fù)讀;
1.什么是分布式事務(wù)
分布式事務(wù)——CAP理論 & 解決分布式事務(wù)的思路 & Seata組件初識(shí) 和 部署
2.Seata組件的模式和應(yīng)用案例
分布式事務(wù)(Seata)——Seata分布式事務(wù)XA模式、AT模式、TCC模式的介紹和對比 & 結(jié)合案例分析AT模式和XA模式【源碼】
主要內(nèi)容:
1、XA規(guī)范使用兩階段提交(2PC,Two-Phase Commit)來保證所有資源同時(shí)提交或回滾任何特定的事務(wù)。
- 第一階段為準(zhǔn)備(prepare)階段。即所有的參與者準(zhǔn)備執(zhí)行事務(wù)并鎖住需要的資源。參與者ready時(shí),向transaction manager報(bào)告已準(zhǔn)備就緒。
- 第二階段為提交階段(commit)。當(dāng)transaction manager確認(rèn)所有參與者都ready)后,向所有參與者發(fā)送commit命令。
2、AT模式與XA模式
(1)Seata AT模式是兩階段提交協(xié)議的演變:
- 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。
- 二階段:
- 提交異步化,非??焖俚赝瓿?。
- 回滾通過一階段的回滾日志進(jìn)行反向補(bǔ)償。
(2)AT模式與XA模式的區(qū)別
- XA模式一階段不提交事務(wù),鎖定資源;AT模式一階段直接提交,不鎖定資源。
- XA模式依賴數(shù)據(jù)庫機(jī)制實(shí)現(xiàn)回滾:AT模式利用數(shù)據(jù)快照實(shí)現(xiàn)數(shù)據(jù)回滾。
- XA是強(qiáng)一致性;AT是最終一致性。
3、Tny-Confirm-Cancel,TCC模式
TCC是分布式事務(wù)中二階段提交協(xié)議的實(shí)現(xiàn),它的全稱為Tny-Confirm-Cancel,即資源預(yù)留(Try)、確認(rèn)操作(Confirm)、取消操作(Cancel),具體含義如下:
- Try(prepare)階段:對業(yè)務(wù)資源的檢查并預(yù)留。
- Confirm(commit)階段:對y業(yè)務(wù)處理進(jìn)行提交,該步驟會(huì)對Ty預(yù)留的資源進(jìn)行釋放,只要Try成功,Confirm-一定要能成功.
- Cancel(rollback)階段:對業(yè)務(wù)處理進(jìn)行取消,即回滾操作。
3.再深入,分布式事務(wù)理論基礎(chǔ)
分布式事務(wù)(再深入)——分布式事務(wù)理論基礎(chǔ) & Java分布式事務(wù)解決方案
主要內(nèi)容如下:
1.介紹分布式事務(wù)產(chǎn)生的場景,闡述了CAP理論;
2. 分布式理論的CP -> 強(qiáng)一致性,剛性事務(wù),遵循ACID,對數(shù)據(jù)要求強(qiáng)一致性;
3.分布式理論的AP+BASE -> 弱一致性,柔性事務(wù),最終一致性;
4.基于 XA 協(xié)議實(shí)現(xiàn)的分布式事務(wù):TM事務(wù)管理器(Transaction Manager)+ RM本地資源管理器(Resource Manager);
5.2PC二階段提交協(xié)議:準(zhǔn)備階段(Preparephase)、提交階段(commit phase);
6.3PC,全稱 “three phase commit”,是 2PC 的改進(jìn)版,將 2PC 的 “提交事務(wù)請求” 過程一分為二,共形成了由CanCommit、PreCommit和doCommit三個(gè)階段組成的事務(wù)處理協(xié)議;文章來源:http://www.zghlxwxcb.cn/news/detail-776780.html
總結(jié)
1.SpringCloud是,在Spring Boot基礎(chǔ)之上構(gòu)建的,用于快速構(gòu)建分布式系統(tǒng)的通用模式的工具集;
2.單體架構(gòu)到微服務(wù)Microservices架構(gòu)的變遷;
3.動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)nacos;
4.聲明式的HTTP客戶端,用于簡化服務(wù)間的調(diào)用openFeign;
5.流量控制、熔斷降級(jí)規(guī)則統(tǒng)一配置和管理的入口sentinel;
6.新一代的API網(wǎng)關(guān),用于實(shí)現(xiàn)統(tǒng)一的訪問入口和路由gateway;
到了這里,關(guān)于【合集】Spring Cloud 組件——架構(gòu)進(jìn)化史話 & Eureka,Nacos,Apollo,OpenFeign,Ribbon,Sentinel,Gateway ,Seata+事務(wù). . .的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!