日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务流量卫兵 Sentinel

發布時間:2024/3/13 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务流量卫兵 Sentinel 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 定義概述

啥是流量,啥又是防衛兵呢?

在分布式系統中,流量注定是越來越大的,在每一秒鐘都可能處理上百萬乃至千萬的請求,設想一下服務器宕掉,那對于用戶而言,體驗肯定是非常壞的;所以我們為了保證 可用性,我們需要有一款流量控制工具,能夠幫助我們進行操作。

1.1 sentinel

  • 阿里巴巴開源的分布式流量控制工具
  • 豐富的應用場景:流量的削峰填谷、集群流量控制、實時熔斷下游不可應用。
  • 具備可視化平臺,具備實時監控功能

Github 學習文檔:Sentinel 文檔

在使用 Sentinel 之前,我們需要熟悉 其中的兩個內容,也是它的核心概念

  • 資源:是Sentinel 的核心概念之一,可以是你程序中的任何內容,也可以是某一個服務甚至小到一個方法,在 sentinel 中,它都是一個資源。
  • 規則:我們要以怎樣的方式來保護資源,他是我們定義的規則,流控規則,熔斷降級規則等

1.3 sentinel 的組成

sentinel 分為兩個部分,核心庫(Java 客戶端)和控制臺(Dashboard)

核心庫:能運行所有的Java 運行時環境,同時對于其他的框架具有很好的兼容度

控制臺: 基于 Springboot 開發的應用,不需要額外的Tomcat容器。

2. 引入 Sentinel 并搭建

2.1 導入依賴

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>

控制臺的相關文檔:(https://github.com/alibaba/Sentinel/wiki)

2.2 啟動部署

//-Dserver.port=8080 用于指定 Sentinel 控制臺端口為 8080 //默認用戶名和密碼都是 sentinel ? // 啟動指令 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar如何判斷在線呢? 采用心跳檢測機制,sentinel 客戶端會發送心跳包,判斷機器是否在線

sentinel 控制臺主界面

2.4 配置使用

spring:cloud:sentinel:transport:dashboard: 127.0.0.1:8080 port: 9999 ? #dashboard: 8080 控制臺端口 #port: 9999 本地啟的端口,隨機選個不能被占用的,與dashboard進行數據交互,會在應用對應的機器上啟動一個 Http Server,該 Server 會與 Sentinel 控制臺做交互, 若被占用,則開始+1一次掃描
  • Sentinel 是懶加載模式,因此不會配置就生效,而是需要訪問服務,才能被控制臺發現

3. 熔斷的狀態與恢復

服務熔斷一般有三種狀態:

  • 熔斷關閉(closed)

    服務沒有故障,熔斷器所處的狀態,對調用方的狀態沒有任務限制

  • 熔斷開啟(open)

    后續對該服務接口的調用不再經過網絡,直接執行本地的fallback方法

  • 半熔斷(half - open)

    所謂半熔斷,就是說在隔一段時間之后,系統會恢復正常調用

    ?

  • 熔斷恢復

    經過熔斷時長后,熔斷器會進入探測恢復狀態,嘗試恢復服務調用,允許有限的流量對該服務進行調用,同時會進行監控成功率;

    如果成功率達到預期,說明服務已經恢復,進入熔斷關閉的狀態,如果成功率仍舊很低,則重新進入熔斷狀態。

4. Sentinel 自定義異常

微服務的數據交互都是json格式,而初始的熔斷信息是一段英文,這樣對于調用方來說非常不友好,因此我們可以將異常定義成json格式的異常信息

Alibaba Cloud 2.2 之后的新版寫法

@Component public class UrlBlockHandler implements BlockExceptionHandler {@Overridepublic void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception {//降級業務處理} }

4.1 異常種類的總結

FlowException #限流異常 DegradeException #降級異常 ParamFlowException #參數限流異常 SystemBlockException #系統負載異常 AuthorityException #授權異常

因此我們可以在 Handler 中的 降級業務處理 中書寫如下代碼段:

Map<String,Object> backMap=new HashMap<>();if (e instanceof FlowException){backMap.put("code",-1);backMap.put("msg","限流-異常啦");}else if (e instanceof DegradeException){backMap.put("code",-2);backMap.put("msg","降級-異常啦");}else if (e instanceof ParamFlowException){backMap.put("code",-3);backMap.put("msg","熱點-異常啦");}else if (e instanceof SystemBlockException){backMap.put("code",-4);backMap.put("msg","系統規則-異常啦");}else if (e instanceof AuthorityException){backMap.put("code",-5);backMap.put("msg","認證-異常啦");}// 設置返回json數據httpServletResponse.setStatus(200);httpServletResponse.setHeader("content-Type","application/json;charset=UTF-8");httpServletResponse.getWriter().write(JSON.toJSONString(backMap));

5. Sentinel 整合 Feign

依舊按照 微服務系列文章所沿用的,視頻訂單 項目例子

添加依賴

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>

在配置文件的 Feign 中開啟對 Sentinel 的支持

feign:sentinel:enabled: true

在service包中 準備容錯service ,Fallback()(即當出現熔斷式要返回給調用方什么數據)

@Service public class VideoServiceFallback implements VideoService {@Overridepublic Video findById(int videoId) {Video video = new Video();video.setTitle("這個是Fallback里面的視頻");return video;}@Overridepublic int save(Video video) {return 0;} }

然后在 FeigClient 的注解中聲明好 上面的 Fallback類

@FeignClient(value = "xdclass-video-service", fallback = VideoServiceFallback.class)

總結

以上是生活随笔為你收集整理的微服务流量卫兵 Sentinel的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。