Spring Cloud Alibaba 中間件

Spring Cloud Alibaba 中間件

🔗 Spring官方介紹 [??Spring官方對Spring Cloud Alibaba的更新不及時]

🔗 Spring Cloud Alibaba官網

📝 代碼記錄

Nacos(服務注冊與發現)

Nacos(Dynamic Naming and Configuration Service, Nacos),一個易于構建 Al Agent 應用的動態服務發現、配置管理和AI智能體管理平臺。

Nacos = Eureka + Config + Bus = Spring Cloud Consul

Nacos官網

組件名語言CAP服務健康檢查對外暴露接口Spring Cloud集成
EurekaJavaAP可配支持HTTP已集成
ConsulGoCP支持HTTP/DNS已集成
ZookeeperJavaCP支持客戶端已集成
NacosJavaAP支持客戶端已集成

Nacos 在阿里巴巴內部有超過 10 萬的實例運行,已經過了類似雙十一等各種大型流量的考驗,Nacos默認是AP模式,

但也可以調整切換為CP,一般用默認AP即可。

下載與安裝

  • spring-cloud-starter-alibaba-nacos-config: 實現配置的動態更新
  • spring-cloud-starter-alibaba-nacos-discovery: 實現服務的注冊與發現

注冊中心

主要配合spring-cloud-starter-alibaba-nacos-discovery

服務發現:yml配置nacos相關配置、主啟動配置EnableDiscoveryClient注解

調用注冊中心中的服務:只需在配置中增加RestTemplate的bean,并增加loadbalancer注解,調用服務的接口時將host寫成服務名稱即可

配置中心

主要配合spring-cloud-starter-alibaba-nacos-discovery

nacos端配置文件DataId的命名規則:

p r e f i x ? {prefix}- prefix?{spring.profiles.active}.${file-extension}

Namespace,Group,DataId

目的是解決 多環境、多項目、多配置文件的管理

Nacos 數據模型 Key 由三元組(Namespace,Group,DataId)唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP。

Sentinel(服務熔斷和降級)

面向分布式、多語言異構化服務架構的流量治理組件。

從流量路由、流量控制、流量整形、熔斷降級、系統自適應過載保護、熱點流量防護等多個維度來幫助開發者保障微服務的穩定性

Sentinel官網/Github

Sentinel后臺端口8719,前臺端口8080,前臺用戶名密碼都是sentinel

SentinelResource注解

SentinelResource是一個流量防衛組件注解,用于指定防護資源,對配置的資源進行流量控制、熔斷降級等功能。

SentinelResource注解配置說明

注意fallback與blockHandler的區別

  • blockHandler,主要針對sentinel配置后出現的違規情況處理
  • fallback,程序異常了,JVM拋出的異常服務降級

流控規則

流控規則說明

Sentinel能夠對流量進行控制,主要是監控應用的QPS流量或者并發線程數等指標,如果達到指定的閾值時,就會被流量進行控制,以避免服務被瞬時的高并發流量擊垮,保證服務的高可靠性。

流控模式

  • 直接:默認的流控模式,當接口達到限流條件時,直接開啟限流功能。
  • 關聯:當關聯的資源達到閾值,就限流自己;當與A關聯的資源B達到閾值后,就限流A自己。(A惹事B掛了)
  • 鏈路: 來自不同鏈路的請求對同一個目標訪問時,實施針對性的不同限流措施,比如C請求來訪問就限流,D請求來訪問就是OK

流控效果

  • 快速失敗:直接失敗,拋出異常。Blocked by Sentinel (flow limiting)
  • Warm up:限流,冷啟動。當流量增大的時候,希望系統從空閑狀態到繁忙狀態的切換時間長一些。公式:閾值除以冷卻因子coldFactor(默認值為3),經過預熱時長后才會達到閾值。默認coldFactor為3,即請求QPS從threshold/3開始,經預熱時長逐漸升至設定的QPS閾值
  • 排隊等待:主要處理間隔性突發流量,當一秒內發起大量請求,后幾秒卻是空閑狀態。排隊等待重排請求,使得服務器勻速處理請求。

熔斷規則

Sentinel 熔斷降級會在調用鏈路中某個資源出現不穩定狀態時(例如調用超時或異常比例升高),對這個資源的調用進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯錯誤。當資源被降級后,在接下來的降級時間窗口之內,對該資源的調用都自動熔斷(默認行為是拋出 DegradeException)。

熔斷規則說明

  • 慢調用比例(SLOW_REQUEST_RATIO) :在統計時長內,實際請求數目 > 設定的最小請求數 且 實際慢調用比例 > 比例閾值,進入熔斷狀態。
  • 異常比例(ERROR_RATION): 異常比例達到閾值,進入熔斷狀態
  • 異常數(ERROR_COUNT): 數量達到閾值,進入熔斷狀態

熱點規則

熱點即經常訪問的數據,很多時候我們希望統計或者限制某個熱點數據中訪問頻次最高的TopN數據,并對其訪問進修限流或者其他操作

熱點規則說明

簡單來說就是對指定入參限流,sentinel還可以有參數例外項,即對特定的參數值不限流,其他的參數值都限流

授權規則

對請求分黑白名單

來源訪問控制說明

??注意要實現RequestOriginParser再配合可視化端

Seata(分布式事務)

??面試重災區,Seata分布式三大模式的原理需要仔細了解

背景:一次業務操作需要跨多個數據源或需要跨多個系統進行遠程調用,就會產生分布式事務問題;但是關系型數據庫提供的能力是單機事務,一但遇到分布式事務場景,就需要通過更多其他技術手段來解決問題。

Seata(Simple Extensible Autonomous Transaction Architecture), 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。

Seata官網/Github, Alibaba開發,2023.10.29捐贈給Apache

Seata部署

Seata三大模式

  • Seata AT
  • Seata TCC
  • Seata SAGA
  • Seata XA

工作流程

Seata對分布式事務的協調和控制就是1+3

  • 1個XID:XID是全局事務的唯一標識,他可以在服務的調用鏈路中傳遞,綁定到服務的事務上下文中。
  • 3(TC->TM->RM)
    • TC(Transaction Coordinator)事務協調者
      • 維護全局和分支事務的狀態,驅動全局事務提交或回滾。
    • TM(Transaction Manager)事務管理器
      • 定義全局事務的范圍:開始全局事務、提交或回滾全局事務。
    • RM(Resource Manager)資源管理器
      • 管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。

三個組件相互協作,TC以Seata服務器形式獨立部署,TM和RM則是以Seata Client的形式集成在微服務中運行

流程:

  1. TM向TC申請開啟一個全局事務,全局事務創建成功并生成一個全局唯一的XID。
  2. XID在微服務調用鏈路的上下文中傳播。
  3. RM向TC注冊分支事務,將其納入XID對應全局事務的管轄。
  4. TM向TC發起針對XID的全局提交或回滾決議。
  5. TC調度XID下管轄的全部分支事務完成提交或回滾請求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85275.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uniapp+vue中 多次觸發onLoad/created

控制臺log輸出為何頻頻失蹤?   wxss代碼為何頻頻失效?   wxml布局為何亂作一團?   究竟是道德的淪喪?還是人性的缺失?   讓我們一起來 走 跑進科學 前言 uniapp中開發網頁h5,莫名其妙每次請求接口都會執行兩次,仔細排查發現是onLoadonShow…

[論文閱讀] 人工智能+軟件工程 | 軟件工程中非代碼工作的LLM能力評估

軟件工程中非代碼工作的LLM能力評估 論文信息 misc{2506.10833v1,title{Evaluating Large Language Models on Non-Code Software Engineering Tasks},author{Fabian C. Pea and Steffen Herbold},year{2025},eprint{2506.10833},archivePrefix{arXiv},primaryClass{cs.SE} }…

Data URI Scheme 詳解:將數據嵌入 URL 的技術方案

一、Data URI Scheme 是什么? Data URI 是一種特殊的URL格式,允許將數據(如圖像、文本、音頻等)直接嵌入到URL中,而無需引用外部資源。它由RFC 2397標準定義,常用于前端開發中減少HTTP請求次數&#xff0c…

基于Redis方案的分布式鎖的Java實現

前期, 我們介紹了什么是分布式鎖及分布式鎖應用場景, 今天我們基于Redis方案來實現分布式鎖的應用。 1. 基于Redis分布式鎖方案介紹 基于Redis實現的分布式鎖是分布式系統中控制資源訪問的常用方案,利用Redis的原子操作和高性能特性實現跨進…

Kafka源碼P2-生產者緩沖區

歡迎來到啾啾的博客🐱。 記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。 有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。 目錄 1 引言2 緩沖區2.1 消息在Partition內有序2.2 批…

力扣網C語言編程題:三數之和

一. 簡介 本文記錄力扣網上的邏輯編程題,涉及數組方面的,這里記錄一下 C語言實現和Python實現。 二. 力扣網C語言編程題:三數之和 題目:三數之和 給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nu…

2.2 Windows MSYS2編譯FFmpeg 4.4.1

一、安裝編譯工具 # 更換pacman源 sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist* pacman -Sy# 安裝依賴 pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-ya…

驅動開發,隊列,環形緩沖區:以GD32 CAN 消息處理為例

對環形緩沖區進行進一步的優化和功能擴展,以應對更復雜的實際應用場景,特別是針對 CAN 總線消息處理的場景。 一、優化點 1:動態配置環形緩沖區大小在原始實現中,我們固定了緩沖區大小為 RINGBUFF_LEN 64。這種方式雖然簡單&am…

SQL基礎知識,MySQL學習(長期更新)

1、基本操作,增刪查改 INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); DELETE FROM 表名 WHERE 條件 SELECT * FROM 表名 WHERE 條件 UPDATE 表名 SET 字段1 值, 字段2 值, ... WHERE 條件; SELECT * INTO 新表 FROM 舊表 WHERE… INSERT INTO 語…

Git(一):初識Git

文章目錄 Git(一):初識GitGit簡介核心功能分布式特性結構與操作優勢與適用場景 創建本地倉庫git init配置name與email--global 工作區、暫存區與版本庫git addgit commitcommit后.git的變化 Git(一):初識Git Git簡介 Git 是一個分布式版本控制系統&…

第19天:初級數據庫學習筆記3

分組函數(多行處理函數) 即多個輸入對應一個輸出。前面講的數據處理函數是單行處理函數。(在公司中常說單,多行處理函數) 分組函數包括五個: max:最大值min:最小值avg&#xff1a…

Windows11下搭建Raspberry Pi Pico編譯環境

1. 系統與工具要求 PC平臺: Windows 11 專業版 Windows GCC: gcc-15.1.0-64.exe GNU Make: 4.3 Git: 2.49.0 cmake: 4.0.2 python:3.12.11 Arm GNU Toolchain Downloads – Arm Developer 2. 工具安裝與驗證 2.1 工具安裝 winget安裝依賴工具(Windows …

【C語言極簡自學筆記】重講運算符

一、算術操作符 算術操作符描述把兩個操作數相加-第一個操作數減去第二個操作數*把兩個操作數相乘/分子除以分母%取模運算符,整除后的余數 注意:1.除號的兩端都是整數的時候執行的是整數的除法,兩端只要有一個浮點數,就執行浮點…

持續集成 CI/CD-Jenkins持續集成GitLab項目打包docker鏡像推送k8s集群并部署至rancher

Jenkins持續集成GitLab項目 GitLab提交分支后觸發Jenkis任務 之前是通過jar包在shell服務器上進行手動部署,麻煩且耗時。現通過Jenkins進行持續集成實現CI/CD。以test分支為例 提交即部署。 由于是根據自己實際使用過程 具體使用到了 gitlabjenkinsdockerharborra…

Apache Iceberg與Hive集成:非分區表篇

引言 在大數據處理領域,Apache Iceberg憑借其先進的表格式設計,為大規模數據分析帶來了新的可能。當Iceberg與Hive集成時,這種強強聯合為數據管理與分析流程提供了更高的靈活性和效率。本文將聚焦于Iceberg與Hive集成中的非分區表場景&#…

webpack 如何區分開發環境和生產環境

第一種方法: 方法出處:命令行接口(CLI) | webpack 中文文檔 1.利用webpack.config.js 返回的是個函數,利用函數的參數,來區分環境 具體步驟 1) package.json文件:在npm scripts 命令后面追加 …

React組件通信——context(提供者/消費者)

Context 是 React 提供的一種組件間通信方式,主要用于解決跨層級組件 props 傳遞的問題。它允許數據在組件樹中"跨級"傳遞,無需顯式地通過每一層 props 向下傳遞。 一、Context 核心概念 1. 基本組成 React.createContext:創建 C…

“微信短劇小程序開發指南:從架構設計到上線“

1. 引言:短劇市場的機遇與挑戰 近年來,短視頻和微短劇市場呈現爆發式增長,用戶碎片化娛樂需求激增。短劇小程序憑借輕量化、社交傳播快、變現能力強等特點,成為內容創業的新風口。然而,開發一個穩定、流暢且具備商業價…

RPC與RESTful對比:兩種API設計風格的核心差異與實踐選擇

# RPC與RESTful對比:兩種API設計風格的核心差異與實踐選擇 ## 一、架構哲學與設計目標差異 1. **RPC(Remote Procedure Call)** - **核心思想**:將遠程服務調用偽裝成本地方法調用(方法導向) - 典型行為…

【pytest進階】pytest之鉤子函數

什么是 hook (鉤子)函數 經常會聽到鉤子函數(hook function)這個概念,最近在看目標檢測開源框架mmdetection,里面也出現大量Hook的編程方式,那到底什么是hook?hook的作用是什么? what is hook ?鉤子hook,顧名思義,可以理解是一個掛鉤,作用是有需要的時候掛一個東西…