在影響系統穩定性的各類因素中,慢 SQL 是相對比較致命的,可能會致使 CPU、LOAD 異常、系統資源耗盡。線上生產環境出現慢 SQL 每每有不少緣由:html
AHAS 提供了豐富的 SQL 場景支持,不須要更改代碼便可實現SQL識別與防禦,包括:數據庫
AHAS 流控降級經過自動檢測常見的 DAO 類、JDBC 驅動類等自動識別應用中的 SQL 語句,用戶能夠經過 Java Agent或者 JAVA SDK 兩種接入方式來實現 SQL 的監控和攔截。其中 Java Agent 目前支持 MySQL JDBC 和 Oracle JDBC 驅動,SDK 目前支持 MyBatis 框架下的 SQL 識別。第三方組件和框架的版本支持狀況詳見支持列表。網絡
若是使用Agent接入只需下載並安裝最新的Agent便可:併發
wget -O ./install_agent.sh https://ahasoss-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/agent/prod/latest/install_agent.sh && source ./install_agent.sh {YourAppName} default
SDK接入須要在應用依賴中引入ahas-sentinel-client:框架
<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>ahas-sentinel-client</artifactId> <version>x.y.z</version> </dependency>
接入成功後就能夠在AHAS控制檯的監控頁看到SQL資源調用的QPS以及RT等信息,用戶能夠在監控頁面經過查看SQL對應的RT值來判斷該SQL執行是否過慢,從而提早設置限流和降級規則進行多手段防禦。對於SQL的常見防禦規則咱們會在慢SQL防禦中詳細說明。運維
AHAS 流控降級提供了多種不一樣的防禦手段,對於線上出現慢SQL的狀況,能夠從限流和降級兩方面來對系統進行防禦。規則配置開啓後當即生效,不只可以提早設置防禦,還能在線上出現問題時緊急處理避免由於大量慢SQL的調用把系統拖垮。性能
基於控制檯自動識別出的SQL語句,使用者能夠配置相應的限流規則對SQL執行進行控制。AHAS支持對QPS和併發線程數兩種維度進行限制,SQL控制通常採起併發線程數模式,當出現慢SQL調用時能夠限制同一時刻執行的SQL數量,防止過多的慢SQL語句執行把資源耗盡。
流控模式
AHAS 提供了多種不一樣的流控模式,用戶能夠基於自身業務場景來選擇使用,在慢SQL防禦中,比較經常使用的有直接和關聯兩種模式:
一、直接模式。
最經常使用的一種流控模式,在該模式下,閾值配置爲當前SQL資源,超過設置的值後多餘的請求將被拒絕。url
二、關聯模式。
閾值配置爲關聯SQL資源,關聯的資源請求超過設置的以後,該資源的調用將被攔截。能夠根據須要將SQL讀關聯寫資源。spa
除了限流規則以外,AHAS還提供了基於RT和異常比例的降級策略。對於慢SQL防禦,使用者能夠根據SQL執行的RT設置對應的閾值以及時間窗口,超過指定的RT值後在時間窗口內 SQL 執行將被降級,拋出包裝好的異常。線程
資源被流控降級後會拋出 BlockException 異常類的子類(限流會拋流控異常 FlowException,降級會拋出降級異常 DegradeException),開發人員能夠自定義異常的業務處理,如重試等一系列操做。
AHAS提供了強大的監控功能來幫助使用者快速發現問題並及時處理。在應用概覽頁能夠查看集羣的總QPS、拒絕QPS、RT等信息:
除此以外還可以很直觀的看到不一樣 SQL 語句執行的 TOP 狀況,包括請求 QPS TOP、拒絕 QPS TOP、RT TOP,以及對應的單機 TOP 數據:
在監控詳情頁,能夠查看每條 SQL 語句的調用及執行狀況,發現 RT 請求過長的 SQL 調用能夠進行一鍵限流或降級:
上述就是 AHAS 流控降級所提供的基於慢 SQL 的防禦手段,經過 監控->發現異常->配置規則->有效防禦 保障應用的高可用服務能力。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。