阿里雲應用高可用服務 AHAS 流控降級實現 SQL 自動防禦功能

在影響系統穩定性的各類因素中,慢 SQL 是相對比較致命的,可能會致使 CPU、LOAD 異常、系統資源耗盡。線上生產環境出現慢 SQL 每每有不少緣由:html

  • 硬件問題。如網絡速度慢,內存不足,I/O 吞吐量小,磁盤空間滿等。
  • 沒有索引或者索引失效。
  • 數據過多。
  • DevOps 後沒有專業的 DBA 對 SQL 代碼進行 review,在項目初期沒有對 SQL 的性能作很好的考量。
    嚴重的慢 SQL 發生後可能會拖垮整個數據庫,對線上業務產生阻斷性的風險。AHAS 流控降級提供了 SQL 級別的識別與防禦,能夠幫助開發以及運維同窗快速的識別慢 SQL 並及時採起有效的防禦措施保障系統的穩定性。

AHAS產品地址

SQL自動防禦功能文檔地址

應用場景

AHAS 提供了豐富的 SQL 場景支持,不須要更改代碼便可實現SQL識別與防禦,包括:數據庫

  • 根據 SQL 語句的調用頻率、執行時間來進行控制,如直接拒絕或者排隊等待等。
  • 自動探測 SQL 的執行時間、頻率,並進行控制。
  • 數據庫讀寫聯動控制,例如,讀操做的速度由寫操做的速度決定。
  • SQL 執行併發控制。
    在慢 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防禦中詳細說明。運維

慢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 的防禦手段,經過 監控->發現異常->配置規則->有效防禦 保障應用的高可用服務能力。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索