1. 程式人生 > >【dubbo系列】dubbo與Sentinel整合篇

【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.ser[email protected]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

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