小網站下載渠道有哪些谷歌seo詳細教學
??作者簡介:大家好,我是 Meteors., 向往著更加簡潔高效的代碼寫法與編程方式,持續(xù)分享Java技術內容。
🍎個人主頁:Meteors.的博客
💞當前專欄:Java微服務
?特色專欄: 知識分享
🥭本文內容:【2.3】Java微服務:sentinel服務哨兵
📚 ** ps ** ?: 閱讀這篇文章如果有問題或者疑惑,歡迎各位在評論區(qū)提問或指出!
----------------------------------------------------------? 目錄? --------------------------------------------------------------
?
目錄
一、內容
二、Sentinel介紹
1.背景
2. 介紹
3. 特性
三. Sentinel的歷史
四. Sentinel與Hystrix的對比
五. Sentinel核心
六、Sentinel控制臺
1. 介紹
2. 功能
3. 文檔
4. 控制臺安裝
1)進入下載頁面
2)下載jar包
3)將jar包移動到合適目錄并啟動
?七.? 客戶端接入控制臺
1. 添加依賴
1)父工程中添加?編輯
2)子工程中添加
3)添加配置文件?
4)重啟服務并發(fā)送一次請求
2. 定義資源
?ps:資源屬性
3. 定義規(guī)則
1)流量控制規(guī)則
2)熔斷降級規(guī)則
3)熱點參數(shù)規(guī)則
4)授權規(guī)則
5)系統(tǒng)保護規(guī)則
6)動態(tài)規(guī)則擴展
1. 支持
2. 本地文件中設置方式Demo
八. RestTemplate支持
1. 配置異常類
2. RestTemplate的聲明位置加上注解
3.注釋掉之前在方法上的聲明
?4. 增加流控進行測試
九. OpenFeign支持
1. 添加依賴
2. 開啟Sentinel
參考文獻
---------------------------------------------------------------------------------------------------------------------------------
一、內容
二、Sentinel介紹
1.背景
? ? Netflix中多項開源產品已進入維護階段,不再開發(fā)新的版本,就目前來看是沒有什么問題的。但是從長遠角度出發(fā),我們還是需要考慮是否有可替代產品使用。比如本文中介紹Alibaba Sentinel就是一款高性能且輕量級的流量控制、熔斷降級可替代方案。是一款面向云原生微服務的高可用流控防護組件
(Hystrix目前狀態(tài):不在主動開發(fā),當前處于維護模式? ——摘錄自Hystrix官網)
2. 介紹
? ? 隨著微服務的流行,服務和服務之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的流量治理組件,主要以流量為切入點,從流量路由、流量控制、流量整形、熔斷降級、系統(tǒng)自適應過載保護、熱點流量防護等多個維度來幫助開發(fā)者保障微服務的穩(wěn)定性。(摘錄自Sentinel官網)
3. 特性
Sentinel 具有以下特征:
豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。
完備的實時監(jiān)控:Sentinel 同時提供實時的監(jiān)控功能。您可以在控制臺中看到接入應用的單臺機器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運行情況。
廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。
完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現(xiàn)擴展接口來快速地定制邏輯。例如定制規(guī)則管理、適配動態(tài)數(shù)據(jù)源等。
三. Sentinel的歷史
- 2012 年,Sentinel 誕生,主要功能為入口流量控制。
- 2013-2017 年,Sentinel 在阿里巴巴集團內部迅速發(fā)展,成為基礎技術模塊,覆蓋了所有的核心場景。Sentinel 也因此積累了大量的流量歸整場景以及生產實踐。
- 2018 年,Sentinel 開源,并持續(xù)演進。
- 2019 年,Sentinel 朝著多語言擴展的方向不斷探索,推出?C++ 原生版本,同時針對 Service Mesh 場景也推出了?Envoy 集群流量控制支持,以解決 Service Mesh 架構下多語言限流的問題。
- 2020 年,推出?Sentinel Go 版本,繼續(xù)朝著云原生方向演進。
- 2021 年,Sentinel 正在朝著 2.0 云原生高可用決策中心組件進行演進;同時推出了?Sentinel Rust 原生版本。同時我們也在 Rust 社區(qū)進行了 Envoy WASM extension 及 eBPF extension 等場景探索。
- 2022 年,Sentinel 品牌升級為流量治理,領域涵蓋流量路由/調度、流量染色、流控降級、過載保護/實例摘除等;同時社區(qū)將流量治理相關標準抽出到?OpenSergo 標準中,Sentinel 作為流量治理標準實現(xiàn)。
四. Sentinel與Hystrix的對比
Sentinel | Hystrix | |
---|---|---|
隔離策略 | 信號量隔離(并發(fā)線程數(shù)限流) | 線程池隔離/信號量隔離 |
熔斷降級策略 | 基于響應時間、異常比率、異常數(shù) | 基于異常比率 |
實時指標實現(xiàn) | 滑動窗口(LeapArray) | 滑動窗口(基于 RxJava) |
規(guī)則配置 | 支持多種數(shù)據(jù)源 | 支持多種數(shù)據(jù)源 |
擴展性 | 多個擴展點 | 插件的形式 |
基于注解的支持 | 支持 | 支持 |
調用鏈路信息 | 支持同步調用 | 不支持 |
限流 | 基于 QPS / 并發(fā)數(shù),支持基于調用關系的限流 | 有限支持 |
流量整形 | 支持慢啟動、勻速器模式 | 不支持 |
系統(tǒng)負載保護 | 支持 | 不支持 |
控制臺 | 開箱即用,可配置規(guī)則、查看秒級監(jiān)控、機器發(fā)現(xiàn)等 | 較為簡單 |
常見框架的適配 | Servlet、Spring Cloud、Dubbo、gRPC 等 | Servlet、Spring Cloud Netflix |
五. Sentinel核心
Sentinel 的使用可以分為兩個部分:
核心庫(Java 客戶端):不依賴任何框架/庫,能夠運行于 Java 7 及以上的版本的運行時環(huán)境,同時對 Dubbo / Spring Cloud 等框架也有較好的支持(見 主流框架適配)。
控制臺(Dashboard):控制臺主要負責管理推送規(guī)則、監(jiān)控、集群限流分配管理、機器發(fā)現(xiàn)等。
六、Sentinel控制臺
1. 介紹
? ? ?Sentinel 提供一個輕量級的開源控制臺,它提供機器發(fā)現(xiàn)以及健康情況管理、監(jiān)控(單機和集群),規(guī)則管理和推送的功能。這里,我們將會詳細講述如何通過簡單的步驟就可以使用這些功能。
2. 功能
Sentinel 控制臺包含如下功能:
- 查看機器列表以及健康情況:收集 Sentinel 客戶端發(fā)送的心跳包,用于判斷機器是否在線。
- 監(jiān)控 (單機和集群聚合):通過 Sentinel 客戶端暴露的監(jiān)控 API,定期拉取并且聚合應用監(jiān)控信息,最終可以實現(xiàn)秒級的實時監(jiān)控。
- 規(guī)則管理和推送:統(tǒng)一管理推送規(guī)則。
- 鑒權:生產環(huán)境中鑒權非常重要。這里每個開發(fā)者需要根據(jù)自己的實際情況進行定制。
3. 文檔
控制臺 · alibaba/Sentinel Wiki · GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服務的高可用流控防護組件) - 控制臺 · alibaba/Sentinel Wiki
https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0
4. 控制臺安裝
1)進入下載頁面
2)下載jar包
3)將jar包移動到合適目錄并啟動
執(zhí)行命令(注意版本要改為自己的,可以使用tab鍵補全):
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.5.jar
?七.? 客戶端接入控制臺
1. 添加依賴
1)父工程中添加
<!-- 父工程添加如下依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version></dependency>
2)子工程中添加
<!-- 在子工程中導入依賴 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>
3)添加配置文件?
sentinel:transport:port: 8719dashboard: localhost:8080
4)重啟服務并發(fā)送一次請求
然后刷新控制臺就有顯示了?
2. 定義資源
?ps:資源屬性
重啟服務后,刷新控制臺就有顯示資源了
Field 說明 默認值 resource 資源名,資源名是限流規(guī)則的作用對象 count 限流閾值 grade 限流閾值類型,QPS 模式(1)或并發(fā)線程數(shù)模式(0) QPS 模式 limitApp 流控針對的調用來源 default
,代表不區(qū)分調用來源strategy 調用關系限流策略:直接、鏈路、關聯(lián) 根據(jù)資源本身(直接) controlBehavior 流控效果(直接拒絕 / 排隊等待 / 慢啟動模式),不支持按調用關系限流 直接拒絕 clusterMode 是否集群限流 否
3. 定義規(guī)則
1)流量控制規(guī)則
(不推薦和這一樣在控制臺進行設置,這里的設置重啟服務后會消失,推薦使用動態(tài)規(guī)則)
請求超過設置,觸發(fā)限流方法(上文的method1)
2)熔斷降級規(guī)則
熔斷降級規(guī)則是遠程調用奔潰了,就會調用熔斷降級觸發(fā)方法(上文的method2)
3)熱點參數(shù)規(guī)則
熱點參數(shù)規(guī)則是一種更細粒度的流控規(guī)則,它允許將規(guī)則具體到參數(shù)上
4)授權規(guī)則
? ? 根據(jù)調用來源來判斷該次請求是否被允許,這時可以調用Sentinel的來源訪問控制的功能。來源訪問根據(jù)資源的請求來源(origin)限制資源是否通過。
設置禁止訪問的來源:
添加配置類:
/*** 自定義來源處理規(guī)則*/ @Component public class MyRequestOriginParser implements RequestOriginParser {@Overridepublic String parseOrigin(HttpServletRequest httpServletRequest) {return httpServletRequest.getParameter("userName");} }
5)系統(tǒng)保護規(guī)則
? ? 系統(tǒng)保護規(guī)則是從應用級別的入口流量進行控制,從單臺機器的總體 Load、RT、入口 QPS 和線程數(shù)四個維度監(jiān)控應用數(shù)據(jù),讓系統(tǒng)盡可能跑在最大吞吐量的同時保證系統(tǒng)整體的穩(wěn)定性。
? ? 系統(tǒng)保護規(guī)則是應用整體維度的,而不是資源維度的,并且僅對入口流量生效。入口流量指的是進入應用的流量(
EntryType.IN
),比如 Web 服務或 Dubbo 服務端接收的請求,都屬于入口流量。系統(tǒng)規(guī)則支持以下的閾值類型:
- Load(僅對 Linux/Unix-like 機器生效):當系統(tǒng) load1 超過閾值,且系統(tǒng)當前的并發(fā)線程數(shù)超過系統(tǒng)容量時才會觸發(fā)系統(tǒng)保護。系統(tǒng)容量由系統(tǒng)的?
maxQps * minRt
?計算得出。設定參考值一般是?CPU cores * 2.5
。- CPU usage(1.5.0+ 版本):當系統(tǒng) CPU 使用率超過閾值即觸發(fā)系統(tǒng)保護(取值范圍 0.0-1.0)。
- RT:當單臺機器上所有入口流量的平均 RT 達到閾值即觸發(fā)系統(tǒng)保護,單位是毫秒。
- 線程數(shù):當單臺機器上所有入口流量的并發(fā)線程數(shù)達到閾值即觸發(fā)系統(tǒng)保護。
- 入口 QPS:當單臺機器上所有入口流量的 QPS 達到閾值即觸發(fā)系統(tǒng)保護。
6)動態(tài)規(guī)則擴展
1. 支持
Sentinel 目前支持以下數(shù)據(jù)源擴展:
- Pull-based: 動態(tài)文件數(shù)據(jù)源、Consul,?Eureka
- Push-based:?ZooKeeper,?Redis,?Nacos,?Apollo,?etcd
2. 本地文件中設置方式Demo
在yml文件中進行配置
datasource:ds1:file:file: classpath:flowRule.jsondata-type: jsonrule-type: flow
增加并配置JSON文件
?重啟項目后,調用接口
八. RestTemplate支持
? ? Spring Cloud Alibaba Sentinel 支持對 RestTemplate 調用的服務進行服務保護。需要在構造 RestTemplate Bean 時添加?
@SentinelRestTemplate
?注解。1. 配置異常類
/*** sentinel異常工具類*/ public class ExceptionUtil {// 服務流量控制處理public static ClientHttpResponse handleException(HttpRequest request,byte[] body,ClientHttpRequestExecution execution,BlockException exception) {exception.printStackTrace();return new SentinelClientHttpResponse(JSON.toJSONString(new Order(333L, 333L, "333", 333, 3L, new ArrayList<>())));}// 服務熔斷降級處理public static ClientHttpResponse fallback(HttpRequest request,byte[] body,ClientHttpRequestExecution execution,BlockException exception) {exception.printStackTrace();return new SentinelClientHttpResponse(JSON.toJSONString(new Order(444L, 444L, "444", 444, 4L, new ArrayList<>())));} }
2. RestTemplate的聲明位置加上注解
@SentinelRestTemplate(blockHandler = "handleException", blockHandlerClass = ExceptionUtil.class,fallback = "fallback", fallbackClass = ExceptionUtil.class)
3.注釋掉之前在方法上的聲明
?4. 增加流控進行測試
?
九. OpenFeign支持
1. 添加依賴
<!-- spring cloud openfeign 依賴 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- spring cloud alibaba sentinel 依賴 --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
2. 開啟Sentinel
yml文件中添加兩處地方:
# feign 開啟 sentinel 支持 feign:sentinel:enabled:true
cloud:sentinel:transport:port:8719dashboard:localhost:8080
創(chuàng)建異常注解
/*** 服務熔斷降級處理可以捕獲異常*/ @Component publicclass ProductServiceFallbackFactory implements FallbackFactory<ProductService> {// 獲取日志,在需要捕獲異常的方法中進行處理Logger logger = LoggerFactory.getLogger(ProductServiceFallbackFactory.class);@Overridepublic ProductService create(Throwable throwable) {returnnew ProductService() {@Overridepublic Product selectProductById(Integer id) {return new new Order(333L, 333L, "333", 333, 3L, new ArrayList<>());}};}}
服務接口類中添加注解即可
@FeignClient(value = "user-service", fallbackFactory = ProductServiceFallbackFactory.class)
參考文獻
home | Sentinelhome
https://sentinelguard.io/zh-cn/index.html微服務系列之Sentinel服務哨兵今日份視頻來啦,通過視頻學習可真是一點不累,快點進來 ~
https://mp.weixin.qq.com/s?__biz=MzA4MDEwNTI1NA==&mid=2459057627&idx=1&sn=2c4b1d9d98b6ea847face29de41d3872&chksm=88cfc792bfb84e84a792ffaa1dd464603297e99f3eccb28f379794875daf985f2835376501d5&cur_album_id=1337276895993430016&scene=189#wechat_redirect
?最后,
????????相關內容會陸續(xù)更新,希望文章對你有所幫助!