【dubbo流量監控】分佈式dubbo與Sentinel整合實現流量控制、降級、熔斷(整合篇)

阿里巴巴中間件公衆號瞭解的Sentinel框架,sentinel字面意思爲哨兵,開始以爲是redis的sentinel哨兵,瞭解後才發現並不是。
微服務流行,相信很多團隊拆分服務,進行服務和服務之間調用,Sentinel是分佈式架構體系中流量控制框架,主要以流量爲切入點,熔斷降級,系統保護等功能額,來保護系統穩定性。

Sentinel簡要介紹:
流量控制功能:
提供服務負載能力有限,爲防止某個服務流量過大,導致拖垮了整個系統的其它服務,可以對其接口流量監控,對其進行處理。sentinel具體的怎麼進行流量控制,下篇文章進行介紹。

熔斷降級
某個服務突然流量很大,調用料率特別不穩定,會導致不可用,佔用很大內存,cpc,jvm,導致整個系統的服務都會不可用。Hystrix後期也會陸續介紹一下。

系統負載保護
在熔斷降級的時候,說了,分佈式架構系統中,某個節點某個服務壓力特別大,如果處理不及時會拖垮這個節點,系統負載保護,言外之意就是如果此節點此服務壓力特別大,可把到達這個請求直接轉移到其它的無壓力能處理的請求的節點,可減輕此節點的壓力,起到高可用服務的設計。

本應用需要關鍵技術、dubbo、spring、sentinel、zookeeper、maven
環境下面開始準備、

Sentinel目前已經公開的最新的版本1.3.0-GA版本,本系列篇也是根據這個版本來做使用。

pom.xml關鍵引用

<!-- https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-dubbo-adapter -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-dubbo-adapter</artifactId>
            <version>1.3.0-GA</version>
        </dependency>

        <!-- 客戶端接入sentinel控制檯需要的jar –> --> 
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.3.0-GA</version>
        </dependency>

解釋:
sentinel-dubbo-adapter包是來適配dubbo的jar包,sentinel目前是適配http、dubbo、springcloud、grpc、springboot,每個都有適配的jar包。
sentinel-transport-simple-http是用來和Sentinel控制檯通信的jar包,往控制檯發送心跳包。控制檯是什麼?下面會介紹使用啓動方式。

可能有些私服會下載不了這兩個jar包文件,目前我用的是maven的settings.xml文件是下面的網址,此網址可下載sentinel的有關jar包,當然,有同學有更好的網址也可使用你們的,隨意。

 <mirror>  
    <id>repo2</id>  
    <mirrorOf>central</mirrorOf>  
    <name>Human Readable Name for this Mirror.</name>  
    <url>http://repo2.maven.org/maven2</url>
     <!--<url>https://mvnrepository.com/</url>  -->

    </mirror>

項目已上傳到我的github上,地址是:
https://github.com/growup818/dubbo-monitor/tree/master/sentinel-monitor

下面是項目架構圖,採用dubbo分佈式分層的架構,進行使用,spring配置文件,並不是官方用的springboot版本,此版本是用來測試和使用,目前精簡版本,可以直接使用。

系統架構圖:
【dubbo流量監控】分佈式dubbo與Sentinel整合實現流量控制、降級、熔斷(整合篇)

服務端層
sentinel-dubbo-plat-model是傳統使用的model層,存放param,vo,model類
sentinel-dubbo-plat-dao層存放數據層,也就是和數據庫交互的(本篇不設計數據庫的方面,無此層)
sentinel-dubbo-plat-rpc-interface層是接口層,存放接口類
sentinel-dubbo-plat-rpc-interface-impl是接口實現層,存放接口實現類,spring配置文件,是服務端的web層,具體可下載下來進行查看。

客戶端層:
sentinel-dubbo-plat-rpc-web,是客戶端層,用來和前端頁面通信的層,是dubbo消費者層,來調用服務端也就是dubbo提供者服務的。

上面介紹了概念,以及一些本系統的架構,下面開始此篇的啓動服務篇。

按順序進行下面步驟啓動。
zookeeper啓動
由於啓動dubbo服務需要zookeeper,可以谷歌一下,搜索一下安裝教程吧,不在這裏多說了。

服務端啓動
sentinel-dubbo-plat-rpc-interface-impl一個war包,需要一個tomcat,進行啓動,注意,此項目是採用了分環境的,
【dubbo流量監控】分佈式dubbo與Sentinel整合實現流量控制、降級、熔斷(整合篇)

三套環境,online,qatest,rdtest三套
本人採用的是eclipse進行開發的,在tomcat裏配置。

圖片一
【dubbo流量監控】分佈式dubbo與Sentinel整合實現流量控制、降級、熔斷(整合篇)

第二種辦法:
找到spring-applicationContext.xml 文件,

<!-- 集中加載配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:properties/dubbo/${sys.server.type}/dubbo.properties</value>
            </list>
        </property>
    </bean>

${sys.server.type} 改成rdtest或qatest或online即可

直接啓動,啓動日誌:

十一月 17, 2018 8:06:55 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'dispatcherServlet'
十一月 17, 2018 8:06:58 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8083"]
十一月 17, 2018 8:06:58 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-nio-8012"]
十一月 17, 2018 8:06:58 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 14582 ms

好了,服務端可以啓動了。

客戶端啓動:
客戶端啓動也是同理,參照服務端啓動即可,注意服務端和客戶端啓動的tomcat端口是否一樣,修改成不一樣,否則端口占用。

客戶端啓動需要加入進去幾個參數:
也是跟服務端一樣的路徑下加入配置,
eclipse->servers->雙擊後按照下面的步驟進行配置
參考圖片一的配置,加入進去這幾個參數,或在tomcat的catalina.sh 文件里加入這些參數也可以,本人是在eclipse環境下

-Dsys.server.type="rdtest"  (環境)
-Djava.net.preferIPv4Stack=true 
-Dcsp.sentinel.api.port=8088  
-Dcsp.sentinel.dashboard.server=127.0.0.1:8081 控制檯ip和地址
-Dproject.name=dubbo-service-demo  工程名字

客戶端啓動日誌:

INFO: log base dir is: C:\Users\sdc\logs\csp\
INFO: log name use pid is: false
十一月 17, 2018 8:08:25 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'dispatcherServlet'
十一月 17, 2018 8:08:29 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-nio-8088"]
十一月 17, 2018 8:08:29 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-nio-8023"]

INFO: log base dir is: C:\Users\sdc\logs\csp\

這個路徑是sentinel的初始化路徑,裏面會存放一些重要文件,用於推送信息,和sentinel控制檯交互的,啓動後注意一下。

現在dubbo服務端和客戶端都已經啓動了,開始啓動Sentinel控制檯。

在你的本地庫找到
sentinel-dashboard-1.3.0.jar這個jar包,這個包是sentinel控制檯jar包,springboot的簡易的一個服務。

控制檯啓動命令:
java -Dserver.port=8081 -jar sentinel-dashboard-1.3.0.jar
8081是你的控制檯端口

日誌如下:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.5.RELEASE)

2018-11-17 20:24:00 [main] INFO  c.t.c.s.d.DashboardApplication - Starting DashboardApplication on DESKTOP-V5QV6BS with PID 2788 (C:\Users\sdc\Desktop\sentinel\sentinel-dashboard-1.3.0.jar started by sdc in C:\Users\sdc\Desktop\sentinel)
2018-11-17 20:24:00 [main] INFO  c.t.c.s.d.DashboardApplication - No active profile set, falling back to default profiles: default
2018-11-17 20:24:00 [main] INFO  o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@46f5f779: startup date [Sat Nov 17 20:24:00 CST 2018]; root of context hierarchy

啓動成功後,訪問:
控制檯地址:http://127.0.0.1:8081 8081是你的啓動的端口

訪問成功會看到如下頁面。

【dubbo流量監控】分佈式dubbo與Sentinel整合實現流量控制、降級、熔斷(整合篇)

紅色框框是Sentinel統計的服務。

初始化的時候是無數據的,dubbo客戶端啓動成功後,瀏覽器輸入地址:
http://127.0.0.1:8088/sentinel-monitor/demo/test
多輸入幾次就可以看見控制檯有數據了。

項目已上傳到我的github上,地址是:
https://github.com/growup818/dubbo-monitor/tree/master/sentinel-monitor

參考
阿里巴巴Sentinel開源地址:
https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

本人原創,如有雷同,請告知,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章