伴隨互聯網的高速發展,對業務系統的能力要求也越來越高,做為底層提供數據服務的MySQL數據庫更是如此;基本的MySQL集群模式雖提供了高可用、高并發的服務能力,但突然的高并發,或流量并沒被業務架構層層過濾,最終過載的流量流向數據庫,這時MySQL的服務能力就會降低,甚至雪崩。
高質量的MySQL服務就是時時提供高可用、高效、高穩定的能力,杜絕雪崩產生。
本文采用限流、超時SQL攔截的手段來保證MySQL服務的高質量,但MySQL數據庫本身或現有集群模式并沒提供這種能力。因此需設計一個數據庫中間件來提供這種能力,事前杜絕這些隱患,保證后端MySQL服務的高質量。下圖為數據庫中間件產品的主要功用模塊,簡單說明以下幾個:
1)SQL解析器:對客戶端發來的sql語句進行解析處理,以便進行sql的路由操作。
2)SQL攔截器:對耗時超過閥值的SQL進行攔截,直接返回錯誤,不再路由至后端MySQL數據庫。
3)SQL路由器:對解析后的sql語句,依據讀寫分隔、分片配置信息,轉發至相應后端MySQL節點。
4)限流器:限制后端MySQL節點的QPS能力,降低突增流量帶來的影響。
限流的方式有很多種,以下為目前常見的限流方式:
通過限制單位時間段內調用量來限流
通過限制系統的并發調用程度來限流
使用漏桶(Leaky Bucket)算法來進行限流
使用令牌桶(Token Bucket)算法來進行限流
本產品采用令牌桶算法進行業務的限流,下面簡單介紹下令牌桶算法
1)以固定頻率往桶中添加令牌,如果桶滿,則丟棄
2)請求到來時,從桶中取N個令牌
3)如果桶中現有令牌數>=N,則執行請求,并銷毀N個令牌
4)如果桶中現有令牌數
首先程序實現一個令牌桶算法模塊,以MySQL最大QPS為頻率向桶中添加令牌,以后每個數據庫請求都需訪問該模塊,以判讀該請求是否可以執行。
1)初始化N個令牌桶
后端有多少MySQL節點,則初始化多少個令牌桶,并與節點綁定。以相應節點最大QPS為頻率,即1/QPS秒向桶中添加一個令牌
2)令牌請求
客戶端請求的SQL經過解析后,由SQL路由器轉發至某一個后端MySQL節點時,請求相應令牌桶中的令牌,請求滿足,則執行相應SQL
3)令牌不足
如果請求不滿足,則把SQL放入相應節點隊列中等待,直到有令牌滿足或隊列滿時直接返回錯誤。
超時SQL攔截的意思是,耗時的SQL語句直接返回錯誤,不再路由轉發至后端節點;當某類sql運行時長超過閥值,并達到一定次數后,記錄下該類sql的id,下次再有這類sql請求時,中間件直接攔截并返回錯誤。
程序實現這種邏輯的方法有很多種,比如使用map結構,以sql的id做為key,或者以數組方式記錄下超時sql的id,但這類方式占用內存較高,并且效率很低;再比如使用redis數據庫,以sql_id做為key來緩存這些數據,雖說redis效率比較高,但每次sql請求都要訪問一次,總體來說效率還是比較低的。
本產品以降低內存使用、提高效率為目的,采用的是位圖算法。
在一個結構中,用一個比特位來描述一個數據的狀態,這種結構就稱為位圖。位圖實際上是哈希表的一種變形,它的主要使用場景為:
大數據濾重
大數據查詢、定位
大數據排序
它的主要優點為:
節省內存
位操作,效率更快
程序實現一個位圖模塊,主要有設置(set)、查詢(get)、清除(clear)sqlid等方法。
1)初始化位圖模塊
初始化一個容量為2^20的byte數組為bitmap,占用內存128K,可記錄百萬類SQL
2)SQL請求過濾
每個SQL請求到來時,生成該類sql的數字標識符id,用該id與bitmap進行位與運算,如果為0,則執行sql,否則直接返回。
3)SQL請求超時
如果sql運行時長超過閥值,并達到固定次數后,用該sqlid 與bitmap進行位或運算,以達到在bitmap中記錄的目錄。
4)超時SQL入庫
超時sql異步入庫,以達到后期優化處理的目的。
本文以限流、超時SQL攔截兩個手段來達到提高MySQL服務質量的目的。限流是為了攔截突增流量,保證Mysql服務的穩定;超時SQL攔截是為了提高MySQL服務效率,減低MySQL服務器資源使用率。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129977.html
摘要:創立者云計算必須建在開源之上的成功是歸功于全世界成千上萬的傳道者開創開源公司新的盈利模式于年加入,擔任。云計算潛力的發揮,必須建立在開源之上在公司任職期間,看到云計算將成為一種新的計算趨勢。 云計算,IT行業最熱門的技術之一,開源云計算則被認為IT的發展趨勢。Marten Mickos,作為開源數據庫MySQL創立者、開源云計算平臺Eucalyptus(桉樹)公司CEO,除被稱為開源軟件...
摘要:數據庫數據庫入門教程系列工具掘金工具共同編輯,修正錯誤,這里點擊進去在這里持續更新由于軟件是基于模式的數據庫管理系統一個客戶機服務器,因此在日常各種工作中,可以通過各種客戶端軟件來與數據庫管理系統關聯。 MySQL入門教程系列-1.5 如何學習MySQL - 掘金 在這里持續更新 MySQL入門教程系列-1.5 如何學習MySQL 如何學習 MySQL 這是一個偽命題,每個人都有適合自...
摘要:安裝使用文檔代碼質量相信是每個團隊的最高追求之一,質量高的團隊,開發成本維護成本都很低同樣人數的團隊,一年內高質量團隊是低質量團隊產出的倍打個比方,一個團隊開發完產品,行代碼出一個和行代碼一個的團隊。 SonarQube Scanner 安裝使用文檔 代碼質量相信是每個團隊的最高追求之一,質量高的團隊,開發成本、維護成本都很低;同樣人數的團隊,一年內高質量團隊是低質量團隊產出的10倍;...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20