【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版本,此版本是用來測試和使用,目前精簡版本,可以直接使用。
系統架構圖:
服務端層:
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,進行啟動,注意,此專案是採用了分環境的,
三套環境,online,qatest,rdtest三套
本人採用的是eclipse進行開發的,在tomcat裡配置。
圖片一
第二種辦法:
找到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是你的啟動的埠
訪問成功會看到如下頁面。
紅色框框是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
本人原創,如有雷同,請告知,謝謝!