System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本申請涉及文件讀寫,尤其涉及一種集群多副本寫讀方法、裝置、設備及存儲介質。
技術介紹
1、在一個mysql復制集群中,通常會配置一個主節點(leader)處理寫請求,多個從節點(follower)處理讀請求,這種讀寫分離架構主要有兩個目的:
2、1、提高資源利用率:從節點可以分擔主節點的讀負載,充分利用集群的計算資源,提高整體的讀性能和吞吐量;
3、2、提高可用性:當主節點發生故障時,可以快速將一個從節點提升為新的主節點,保證業務連續性。
4、然而,由于mysql的主從復制是異步的,從節點總是需要一些時間來回放來自主節點的日志,這造成了“寫后讀”的一致性問題:如果一個客戶端在主節點上寫入了數據,緊接著在從節點上發起讀請求,可能無法立即讀取到自己剛寫入的最新數據。這種現象在讀寫分離時尤為常見,因為讀請求會被自動路由到從節點,其中,“寫后讀”指的是客戶端在寫入數據后立即發起讀請求,期望能讀到自己剛寫入的數據,它是數據一致性的一種要求,對于許多應用場景如金融交易、電商下單非常重要,如果違反了寫后讀一致性,可能導致業務邏輯錯誤。
5、而現有的讀寫分離方案在保障寫后讀一致性方面存在一些不足,主要體現為性能損耗較大,且需要引入額外的網絡交互來同步主從節點的數據狀態,導致延遲增加。
技術實現思路
1、本申請提供的一種集群多副本寫讀方法,旨在解決現有技術中為保障寫后讀一致性造成的性能損耗較大且延遲增加的問題。
2、為實現上述目的,本申請采
3、本申請的一種集群多副本寫讀方法,包括以下步驟:
4、獲取寫請求的全局事務標識符,并根據當前數據庫代理層的一致性級別存儲所述全局事務標識符;
5、獲取每個數據庫節點的最新全局事務標識符集合,并將所有數據庫節點的最新全局事務標識符存儲到當前數據庫代理層的內存中得到第一全局事務標識符集合;
6、接收來自客戶端的讀請求,并根據所述第一全局事務標識符集合確定所述讀請求可讀取最新寫入數據的目標數據庫節點;
7、將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求。
8、作為優選,所述方法還包括:
9、計算所有最新全局事務標識符集合的交集,并濾除所述交集中大于所述第一全局事務標識符集合的數據;
10、將所述第一全局事務標識符集合與過濾后的交集進行并集運算,得到壓縮的全局事務標識符集合。
11、作為優選,所述一致性級別包括用于確保每個讀請求均能讀取客戶端最新寫入數據的會話級、用于確保每個讀請求均能讀取特定實例中最新寫入數據的實例級以及用于確保每個讀請求均能讀取整個集群最新寫入數據的集群級。
12、作為優選,所述根據當前數據庫代理層的一致性級別存儲所述全局事務標識符,包括:
13、于當前數據庫代理層的一致性級別為會話級時,將所述全局事務標識符存儲到數據庫代理層客戶端會話的上下文中;
14、于當前數據庫代理層的一致性級別為實例級時,將所述全局事務標識符存儲到數據庫代理層的全局內存結構中;
15、于當前數據庫代理層的一致性級別為集群級時,不存儲所述全局事務標識符。
16、作為優選,所述將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求,包括:
17、于不存在可作為目標數據庫節點的數據庫從節點時,將所述讀請求發送給主數據庫。
18、作為優選,所述將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求,包括:
19、于不存在可作為目標數據庫節點的數據庫從節點時,在所述讀請求的結構化查詢語言前添加用于允許在從服務器上等待特定的全局事務標識符集合被應用的數據庫命令以使數據庫從節點等待該事務完成后再執行所述讀請求。
20、作為優選,所述獲取寫請求的全局事務標識符,包括:
21、獲取寫請求,并利用數據庫的會話追蹤機制對所述寫請求進行解析得到所述寫請求的全局事務標識符。
22、一種集群多副本寫讀裝置,包括:
23、解析模塊,用于獲取寫請求的全局事務標識符,并根據當前數據庫代理層的一致性級別存儲所述全局事務標識符;
24、存儲模塊,用于獲取每個數據庫節點的最新全局事務標識符集合,并將所有數據庫節點的最新全局事務標識符存儲到當前數據庫代理層的內存中得到第一全局事務標識符集合;
25、判斷模塊,用于接收來自客戶端的讀請求,并根據所述第一全局事務標識符集合確定所述讀請求可讀取最新寫入數據的目標數據庫節點;
26、執行模塊,用于將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求。
27、一種電子設備,包括存儲器和處理器,所述存儲器用于存儲一條或多條計算機指令,其中,所述一條或多條計算機指令被所述處理器執行以實現如上述中任一項所述的一種集群多副本寫讀方法。
28、一種存儲有計算機程序的計算機可讀存儲介質,所述計算機程序使計算機執行時實現如上述中任一項所述的一種集群多副本寫讀方法。
29、本專利技術具有如下有益效果:
30、1、支持會話級、實例級和集群級的mysql集群寫后讀一致性,提升了客戶端體驗和開發效率。
31、2、所有關鍵步驟均不引入額外的網絡交互開銷,保證了性能。
32、3、利用mysql原生的gtid機制實現,無需引入額外組件,簡單高效。
33、4、實現gtid集合的合并和壓縮,可有效控制sql語句長度以及內存開銷。
本文檔來自技高網...【技術保護點】
1.一種集群多副本寫讀方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的一種集群多副本寫讀方法,其特征在于,所述方法還包括:
3.根據權利要求1所述的一種集群多副本寫讀方法,其特征在于,所述一致性級別包括用于確保每個讀請求均能讀取客戶端最新寫入數據的會話級、用于確保每個讀請求均能讀取特定實例中最新寫入數據的實例級以及用于確保每個讀請求均能讀取整個集群最新寫入數據的集群級。
4.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述根據當前數據庫代理層的一致性級別存儲所述全局事務標識符,包括:
5.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求,包括:
6.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求,包括:
7.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述獲取寫請求的全局事務標識符,包括:
8.一
9.一種電子設備,其特征在于,包括存儲器和處理器,所述存儲器用于存儲一條或多條計算機指令,其中,所述一條或多條計算機指令被所述處理器執行以實現如權利要求1~7中任一項所述的一種集群多副本寫讀方法。
10.一種存儲有計算機程序的計算機可讀存儲介質,其特征在于,所述計算機程序使計算機執行時實現如權利要求1~7中任一項所述的一種集群多副本寫讀方法。
...【技術特征摘要】
1.一種集群多副本寫讀方法,其特征在于,包括以下步驟:
2.根據權利要求1所述的一種集群多副本寫讀方法,其特征在于,所述方法還包括:
3.根據權利要求1所述的一種集群多副本寫讀方法,其特征在于,所述一致性級別包括用于確保每個讀請求均能讀取客戶端最新寫入數據的會話級、用于確保每個讀請求均能讀取特定實例中最新寫入數據的實例級以及用于確保每個讀請求均能讀取整個集群最新寫入數據的集群級。
4.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述根據當前數據庫代理層的一致性級別存儲所述全局事務標識符,包括:
5.根據權利要求3所述的一種集群多副本寫讀方法,其特征在于,所述將所述讀請求發送給所述目標數據庫節點以使所述目標數據庫節點執行所述讀請求,包括...
【專利技術屬性】
技術研發人員:郁光輝,
申請(專利權)人:杭州云猿生數據有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。