微服務治理熱門技術揭秘:動態讀寫分離

来源:https://www.cnblogs.com/88223100/archive/2022/08/22/The-Secret-of-Microservice-Governance-Popular-Technologies_Dynamic-Read-Write-Separation.html
-Advertisement-
Play Games

我們從應用的視角出發整理抽象了我們在訪問、使用資料庫時場景的一些穩定性治理、性能優化、提效等方面的實戰經驗,對於每一個後端應用來說,資料庫無疑是重中之重,我們希望通過我們的資料庫治理能力,可以幫助到大家更好地使用資料庫服務。 本文將詳細介紹 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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HMS Core機器學習服務文本翻譯能力提供多種語言和多種應用場景的翻譯服務,比如,在出國旅游的場景中,用戶可以藉助應用的語音翻譯播報功能在打車、酒店入住等場景中無障礙溝通,也可以通過拍照翻譯功能讀懂餐廳菜單、路牌信息等。 中文直譯模型讓文本翻譯能力升級 當前主流的翻譯模式大都以語料資源較為豐富的英 ...
  • 當const定義的常量是基本數據類型的時候不可以被更改 當const定義的常量是引用數據類型的時候,其值可以被更改。 文字有點描述不清楚,或者說用什麼存在記憶體什麼的解釋也有點不好理解。直接上圖吧。 重新定義const定義的數值的話,就會出現:Uncaught TypeError: Assignmen ...
  • 本文是深入淺出 ahooks 源碼系列文章的第十一篇,該系列已整理成文檔-地址。覺得還不錯,給個 star 支持一下哈,Thanks。 本文來講下 ahooks 中的 useUrlState。 通過 url query 來管理 state 的 Hook。 useUrlState 的特殊 在之前的架構 ...
  • 內聯模板 點擊打開視頻講解更加詳細 當 inline-template 這個特殊的 attribute 出現在一個子組件上時,這個組件將會使用其裡面的內容作為模板,而不是將其作為被分發的內容。這使得模板的撰寫工作更加靈活。 <my-component inline-template> <div> < ...
  • 組件之間的迴圈引用 點擊打開視頻講解更詳細 假設你需要構建一個文件目錄樹,像訪達或資源管理器那樣的。你可能有一個 <tree-folder> 組件,模板是這樣的: <p> <span>{{ folder.name }}</span> <tree-folder-contents :children=" ...
  • 在面向對象出現之前,已有面向過程的分析方法,為什麼面向對象被提出了呢?究其本質原因,人們發現面向過程並不是按照人正常認識事物的方式去分析軟體,那麼人究竟是怎麼認識事物的呢,Yourdon 在《面向對象的分析》一書中提到,人類認識事物是遵循分類學的原理,分類學主要包含三點:區分對象及其屬性;區分整體對... ...
  • MEMS感測器即微機電系統(Micro-electro Mechanical Systems),是指將精密機械繫統與微電子電路技術結合發展出來的一項工程技術,它的尺寸一般在微米量級。 ...
  • 同步、非同步,併發、並行、串列,這些名詞在我們的開發中會經常遇到,這裡對非同步編程做一個詳細的歸納總結,希望可以對這方面的開發有一些幫助。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...