我們從應用的視角出發整理抽象了我們在訪問、使用資料庫時場景的一些穩定性治理、性能優化、提效等方面的實戰經驗,對於每一個後端應用來說,資料庫無疑是重中之重,我們希望通過我們的資料庫治理能力,可以幫助到大家更好地使用資料庫服務。 本文將詳細介紹 MSE 資料庫治理的熱點功能,動態讀寫分離的設計與實現。 ...
我們從應用的視角出發整理抽象了我們在訪問、使用資料庫時場景的一些穩定性治理、性能優化、提效等方面的實戰經驗,對於每一個後端應用來說,資料庫無疑是重中之重,我們希望通過我們的資料庫治理能力,可以幫助到大家更好地使用資料庫服務。
本文將詳細介紹 MSE 資料庫治理的熱點功能,動態讀寫分離的設計與實現。
01 讀寫分離的概述
資料庫動態讀寫分離的常見場景:
-
一個大客戶的請求過來,查詢資料庫返回上萬條幾百 M 的數據,資料庫的 CPU 直接打滿。
-
微服務應用的某些業務並不是那麼重要,卻存在大量查詢資料庫的邏輯,影響資料庫實例穩定性,從而導致整體服務質量的下降。
-
在業務處理過程中,如果對資料庫的讀操作遠多於寫操作,那麼在做系統性能優化時就可以考慮引入讀寫分離的方案,一方面只讀庫可以承擔主庫的壓力,另一方面能夠有效的避免由數據更新導致的鎖等待,提升微服務應用的性能。
-
隨著業務的增長,我們在一定時機下需要對資料庫實例進行擴容。根據經驗大多數應用的讀寫比都在 5:1 以上,有些場景甚至大量的高於 10:1,在對資料庫有少量寫請求,但有大量讀請求的應用場景下,單個實例可能無法承受讀取壓力,甚至對業務產生影響。
可以瞭解到的是資料庫讀寫分離方案可以滿足阿裡雲上大多數公司的穩定性治理、性能提升以及資料庫擴容的需求。
如果瞭解讀寫分離實現的同學一定會關註以下這些問題:
-
MSE 是如何解決讀寫分離對業務的侵入性?如何做到業務無需改動一行代碼,即可具備讀寫分離能力。
-
MSE 如何做到精細化動態的讀寫分離控制?即使我們不知道這個業務介面真實的 SQL 是什麼,但我們已經可以控制這個介面的讀 SQL 訪問只讀實例。
-
MSE 是如何解決讀寫分離帶來的一致性問題?對於一致性敏感的業務,如何實現一致性的保障,滿足業務在不同場景下對一致性級別的要求。
02 MSE 讀寫分離技術揭秘
讀寫分離也就是將資料庫拆分為主庫和從庫,即主庫負責處理事務性的增刪改操作,從庫負責處理查詢操作的資料庫架構。單單看讀寫分離的概念,第一感覺就是對業務的侵入性一定不小,那麼 MSE 是如何做到無侵入的呢?
2.1 無侵入性:無需修改一行代碼
MSE 資料庫治理能力通過 JavaAgent 技術,動態增加用戶的數據源,註入動態讀寫分離能力,支持運行時動態將弱讀請求路由至只讀實例。
MSE 在數據源層面實現了抽象,其中 DynamicConnection、DynamicStatement 會根據具體規則從而實現 Master/Slaver 的切換,做到根據 SQL 的讀寫類型、事務的狀態以及用戶的業務規則來做 SQL 的路由,將符合條件的讀 SQL 請求轉發至 RDS 只讀實例中。
2.2 精細化路由:按照請求條件、介面、SQL 多層次多條件
很多時候我們通過編寫 DAO 訪問資料庫,那麼在一些複雜應用的場景下,我們很可能只知道 DAO 介面,在一些複雜場景下我們只知道微服務的介面,內部甚至搞不清楚到底調用的哪個 DAO 介面、SQL 語句,甚至如果是運維角色參與設計,我們很可能不知道哪個微服務介面導致的讀請求導致資料庫抖動,我們只知道入口應用的某個 uid。那麼我們如何做到對業務介面內的讀請求路由至只讀實例呢?
MSE 資料庫治理提供了應用層面完整的 callStack 信息,可以讓我們站在應用的視角上清晰地看到哪些介面內部執行了哪些 SQL。
MSE 通過鏈路傳遞技術,支持在入口微服務、微服務介面、DAO 層面標記弱讀請求的標記,支持標記的當前線程內的 SQL 調用、當前微服務內的 SQL 調用、符合流量條件的請求鏈路級別的所有 SQL 調用等多個層面的弱讀標記傳遞,最終傳遞給讀寫分離組件的路由引擎進行 SQL 的路由依據的判斷。
2.3 強一致性模式:指定介面、事務
當資料庫負載很高時,例如對大表執行 DDL(如加欄位)操作或大批量插入數據的時候,延遲會非常嚴重,從而導致無法從只讀實例中讀取最新數據。MSE 提供了一些策略解決如上問題,某些介面或者某些業務對一致性比較非常高,我們可以通過規則配置告訴 MSE 在特定場景下,某些讀介面標記為強讀請求。MSE 內部會通過一些機制保證讀寫分離的強一致性效果。
2.4 白屏化能力:通過 AccessLog 實時感知讀寫分離情況
有讀寫分離能力,那麼我們如何知道讀寫分離的執行情況,到底哪些應用,哪些請求被分離至了只讀實例?MSE 白屏化能力提供了一套完整的 AccessLog。
-
讀請求路由至只讀實例
-
讀請求路由至主實例
03 總結
MSE 從應用的視角出發,結合微服務治理通用的技術,MSE 推出的是完整的資料庫治理解決方案,從 SQL 洞察、SQL 流控降級與容錯、連接池治理到資料庫灰度、動態讀寫分離。我們希望通過資料庫治理能力可以幫助用戶的微服務可以更好地使用資料庫,降低資料庫使用的成本,提升資料庫訪問的穩定性。
MSE 的資料庫治理能力也需要更多更加深入的客戶場景與落地實踐,如果您對 MSE 的資料庫治理能力感興趣,歡迎聯繫我們,只有經過客戶打磨的產品才會愈發歷久彌新。
在建設資料庫治理能力的同時,我們也通過 OpenSergo 在與社區共同建設資料庫治理的標準。
作 者 | 十眠
本文來自博客園,作者:古道輕風,轉載請註明原文鏈接:https://www.cnblogs.com/88223100/p/The-Secret-of-Microservice-Governance-Popular-Technologies_Dynamic-Read-Write-Separation.html