微服務(wù)架構(gòu)--流量控制Sentinel(二)

一琼了、Sentinel簡介

??Sentinel 是面向分布式服務(wù)架構(gòu)的輕量級流量控制產(chǎn)品赞辩,主要以流量為切入點,從流量控制瓶堕、熔斷降級、系統(tǒng)負(fù)載保護等多個維度來幫助您保護服務(wù)的穩(wěn)定性症歇。
??Sentinel 可以簡單的分為 Sentinel 核心庫和 Dashboard郎笆。核心庫不依賴 Dashboard,但是結(jié)合 Dashboard 可以取得最好的效果忘晤。
文檔:https://github.com/alibaba/Sentinel/wiki

  1. Sentinel 和之前常用的熔斷降級庫 Netflix Hystrix 有什么異同呢宛蚓?
    對比內(nèi)容| Sentinel |Hystrix
    :---|:---|:---
    隔離策略 |信號量隔離 |線程池隔離/信號量隔離
    熔斷降級策略 |基于響應(yīng)時間或失敗比率 |基于失敗比率
    實時指標(biāo)實現(xiàn)| 滑動窗口 |滑動窗口(基于 RxJava)
    規(guī)則配置| 支持多種數(shù)據(jù)源 |支持多種數(shù)據(jù)源
    擴展性| 多個擴展點| 插件的形式
    基于注解的支持 |支持| 支持
    限流 |基于 QPS,支持基于調(diào)用關(guān)系的限流| 不支持
    流量整形| 支持慢啟動设塔、勻速器模式 |不支持
    系統(tǒng)負(fù)載保護| 支持| 不支持
    控制臺| 開箱即用凄吏,可配置規(guī)則、查看秒級監(jiān)控闰蛔、機器發(fā)現(xiàn)等 |不完善
    常見框架的適配| Servlet痕钢、Spring Cloud、Dubbo钞护、gRPC 等 |Servlet盖喷、Spring Cloud Netflix
  2. Sentinel 控制臺最少應(yīng)該包含如下功能:
    查看機器列表以及健康情況:收集 Sentinel 客戶端發(fā)送的心跳包,用于判斷機器是否在線难咕。
    監(jiān)控 (單機和集群聚合):通過 Sentinel 客戶端暴露的監(jiān)控 API,定期拉取并且聚合應(yīng)用監(jiān)控信息距辆,最終可以實現(xiàn)秒級的實時監(jiān)控余佃。
    規(guī)則管理和推送:統(tǒng)一管理推送規(guī)則。
    鑒權(quán):生產(chǎn)環(huán)境中鑒權(quán)非常重要跨算。這里每個開發(fā)者需要根據(jù)自己的實際情況進行定制爆土。

二哮幢、Sentinel 基本概念

  1. 資源
    資源是 Sentinel 的關(guān)鍵概念慨飘。它可以是 Java 應(yīng)用程序中的任何內(nèi)容,例如妈嘹,由應(yīng)用程序提供的服務(wù)背犯,或由應(yīng)用程序調(diào)用的其它應(yīng)用提供的服務(wù)坏瘩,甚至可以是一段代碼。
    只要通過 Sentinel API 定義的代碼漠魏,就是資源倔矾,能夠被 Sentinel 保護起來。大部分情況下,可以使用方法簽名哪自,URL丰包,甚至服務(wù)名稱作為資源名來標(biāo)示資源。
  2. 規(guī)則
    圍繞資源的實時狀態(tài)設(shè)定的規(guī)則壤巷,可以包括流量控制規(guī)則邑彪、熔斷降級規(guī)則以及系統(tǒng)保護規(guī)則。所有規(guī)則可以動態(tài)實時調(diào)整胧华。

三寄症、Sentinel 功能和設(shè)計理念

  1. 流量控制
    ??流量控制在網(wǎng)絡(luò)傳輸中是一個常用的概念,它用于調(diào)整網(wǎng)絡(luò)包的發(fā)送數(shù)據(jù)撑柔。然而瘸爽,從系統(tǒng)穩(wěn)定性角度考慮,在處理請求的速度上铅忿,也有非常多的講究剪决。任意時間到來的請求往往是隨機不可控的,而系統(tǒng)的處理能力是有限的檀训。我們需要根據(jù)系統(tǒng)的處理能力對流量進行控制柑潦。Sentinel 作為一個調(diào)配器,可以根據(jù)需要把隨機的請求調(diào)整成合適的形狀峻凫,如下圖所示:


    流量控制
  2. 流量控制設(shè)計理念
    流量控制有以下幾個角度:
    資源的調(diào)用關(guān)系渗鬼,例如資源的調(diào)用鏈路,資源和資源之間的關(guān)系荧琼;
    運行指標(biāo)譬胎,例如 QPS、線程池命锄、系統(tǒng)負(fù)載等堰乔;
    控制的效果,例如直接限流脐恩、冷啟動镐侯、排隊等。
    Sentinel 的設(shè)計理念是讓您自由選擇控制的角度驶冒,并進行靈活組合苟翻,從而達到想要的效果。

  3. 熔斷降級
    ??除了流量控制以外骗污,降低調(diào)用鏈路中的不穩(wěn)定資源也是 Sentinel 的使命之一崇猫。由于調(diào)用關(guān)系的復(fù)雜性,如果調(diào)用鏈路中的某個資源出現(xiàn)了不穩(wěn)定身堡,最終會導(dǎo)致請求發(fā)生堆積邓尤。這個問題和 Hystrix 里面描述的問題是一樣的。


    熔斷降級

    ??Sentinel 和 Hystrix 的原則是一致的: 當(dāng)調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定,例如汞扎,表現(xiàn)為 timeout季稳,異常比例升高的時候,則對這個資源的調(diào)用進行限制澈魄,并讓請求快速失敗景鼠,避免影響到其它的資源,最終產(chǎn)生雪崩的效果痹扇。
    Hystrix 通過線程池的方式铛漓,來對依賴(在我們的概念中對應(yīng)資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離鲫构。缺點是除了增加了線程切換的成本浓恶,還需要預(yù)先給各個資源做線程池大小的分配。
    Sentinel 對這個問題采取了兩種手段:

  1. 通過并發(fā)線程數(shù)進行限制
    和資源池隔離的方法不同结笨,Sentinel 通過限制資源并發(fā)線程的數(shù)量包晰,來減少不穩(wěn)定資源對其它資源的影響。這樣不但沒有線程切換的損耗炕吸,也不需要您預(yù)先分配線程池的大小伐憾。當(dāng)某個資源出現(xiàn)不穩(wěn)定的情況下,例如響應(yīng)時間變長赫模,對資源的直接影響就是會造成線程數(shù)的逐步堆積树肃。當(dāng)線程數(shù)在特定資源上堆積到一定的數(shù)量之后,對該資源的新請求就會被拒絕瀑罗。堆積的線程完成任務(wù)后才開始繼續(xù)接收請求胸嘴。
  2. 通過響應(yīng)時間對資源進行降級
    除了對并發(fā)線程數(shù)進行控制以外,Sentinel 還可以通過響應(yīng)時間來快速降級不穩(wěn)定的資源斩祭。當(dāng)依賴的資源出現(xiàn)響應(yīng)時間過長后筛谚,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間窗口之后才重新恢復(fù)停忿。
  1. 系統(tǒng)負(fù)載保護
    ??Sentinel 同時對系統(tǒng)的維度提供保護。防止雪崩蚊伞,是系統(tǒng)防護中重要的一環(huán)席赂。當(dāng)系統(tǒng)負(fù)載較高的時候,如果還持續(xù)讓請求進入时迫,可能會導(dǎo)致系統(tǒng)崩潰颅停,無法響應(yīng)。在集群環(huán)境下掠拳,網(wǎng)絡(luò)負(fù)載均衡會把本應(yīng)這臺機器承載的流量轉(zhuǎn)發(fā)到其它的機器上去癞揉。如果這個時候其它的機器也處在一個邊緣狀態(tài)的時候,這個增加的流量就會導(dǎo)致這臺機器也崩潰,最后導(dǎo)致整個集群不可用喊熟。
    針對這個情況柏肪,Sentinel 提供了對應(yīng)的保護機制,讓系統(tǒng)的入口流量和系統(tǒng)的負(fù)載達到一個平衡芥牌,保證系統(tǒng)在能力范圍之內(nèi)處理最多的請求烦味。

二、下載啟動

  1. 下載地址
    https://github.com/alibaba/Sentinel/releases
    下載Jar
[root@localhost ~]# wget https://github.com/alibaba/Sentinel/releases/download/1.6.3/sentinel-dashboard-1.6.3.jar 
# 啟動
[root@localhost ~]# java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar 
# 后臺啟動
[root@localhost ~]# nohup  java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar  &

其中 -Dserver.port=8080 用于指定 Sentinel 控制臺端口為 8080壁拉。
從 Sentinel 1.6.0 起谬俄,Sentinel 控制臺引入基本的登錄功能,默認(rèn)用戶名和密碼都是 sentinel

  1. 使用Docker運行(開發(fā)模式推薦):
# 拉取鏡像
[root@192 ~]# docker pull bladex/sentinel-dashboard
# 運行鏡像
[root@192 ~]# docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard
d0e107c5498095607720ff4cbbdfe7454ed4000ceb3f092ff2d0e6e62ef2321b

  1. 訪問地址

三弃理、客戶端接入控制臺

  1. 引入JAR包
    ??客戶端需要引入 Transport 模塊來與 Sentinel 控制臺進行通信溃论。您可以通過 pom.xml 引入 JAR 包:
        <!--sentinel限流-->
        <!--與控制臺通訊包-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--dubbo 接入插件-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-dubbo-adapter</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--sentinel注解-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-annotation-aspectj</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!--熱點流控包-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-parameter-flow-control</artifactId>
            <version>1.4.1</version>
        </dependency>
  1. 配置啟動參數(shù)
    ??啟動時加入 JVM 參數(shù) -Dcsp.sentinel.dashboard.server=consoleIp:port 指定控制臺地址和端口。若啟動多個應(yīng)用痘昌,則需要通過 -Dcsp.sentinel.api.port=xxxx 指定客戶端監(jiān)控 API 的端口(默認(rèn)是 8719)钥勋。

  2. 用戶可以通過如下參數(shù)進行配置:
    -Dsentinel.dashboard.auth.username=sentinel 用于指定控制臺的登錄用戶名為 sentinel;
    -Dsentinel.dashboard.auth.password=123456 用于指定控制臺的登錄密碼為 123456控汉;如果省略這兩個參數(shù)笔诵,默認(rèn)用戶和密碼均為 sentinel;
    -Dserver.servlet.session.timeout=7200 用于指定 Spring Boot 服務(wù)端 session 的過期時間姑子,如 7200 表示 7200 秒乎婿;60m 表示 60 分鐘,默認(rèn)為 30 分鐘街佑;
    同樣也可以直接在 Spring properties 文件中進行配置谢翎。

四、查看機器列表以及健康情況

機器列表

五沐旨、監(jiān)控

  1. "簇點鏈路"中顯示剛剛調(diào)用的資源(單機實時)
    注意: 簇點監(jiān)控是內(nèi)存態(tài)的信息森逮,它僅展示啟動后調(diào)用過的資源。


    簇點鏈路
  2. "實時監(jiān)控"匯總資源信息(集群聚合)
    注意: 實時監(jiān)控僅存儲 5 分鐘以內(nèi)的數(shù)據(jù)磁携,如果需要持久化褒侧,需要通過調(diào)用實時監(jiān)控接口來定制。


    實時監(jiān)控

注意:請確保 Sentinel 控制臺所在的機器時間與自己應(yīng)用的機器時間保持一致谊迄,否則會導(dǎo)致拉不到實時的監(jiān)控數(shù)據(jù)闷供。

六、規(guī)則管理及推送

Sentinel 控制臺同時提供簡單的規(guī)則管理以及推送的功能统诺。規(guī)則推送分為 3 種模式歪脏,包括 "原始模式"、"Pull 模式" 和"Push 模式"粮呢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婿失,一起剝皮案震驚了整個濱河市钞艇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豪硅,老刑警劉巖哩照,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舟误,居然都是意外死亡葡秒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門嵌溢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眯牧,“玉大人,你說我怎么就攤上這事赖草⊙伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵秧骑,是天一觀的道長版确。 經(jīng)常有香客問我,道長乎折,這世上最難降的妖魔是什么绒疗? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮骂澄,結(jié)果婚禮上吓蘑,老公的妹妹穿的比我還像新娘。我一直安慰自己坟冲,他們只是感情好磨镶,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著健提,像睡著了一般琳猫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上私痹,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天脐嫂,我揣著相機與錄音,去河邊找鬼紊遵。 笑死雹锣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的癞蚕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辉哥,長吁一口氣:“原來是場噩夢啊……” “哼桦山!你這毒婦竟也來了攒射?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤恒水,失蹤者是張志新(化名)和其女友劉穎会放,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钉凌,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡咧最,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了御雕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢沿。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖酸纲,靈堂內(nèi)的尸體忽然破棺而出捣鲸,到底是詐尸還是另有隱情,我是刑警寧澤闽坡,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布栽惶,位于F島的核電站,受9級特大地震影響疾嗅,放射性物質(zhì)發(fā)生泄漏外厂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一代承、第九天 我趴在偏房一處隱蔽的房頂上張望汁蝶。 院中可真熱鬧,春花似錦次泽、人聲如沸穿仪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啊片。三九已至,卻和暖如春玖像,著一層夾襖步出監(jiān)牢的瞬間紫谷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工捐寥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笤昨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓握恳,卻偏偏與公主長得像瞒窒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乡洼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容