System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本專利技術屬于數據庫管理,特別涉及一種同源binlog消息路由方法。
技術介紹
1、在軟件技術的實際生產應用中,常見多個應用部署環境共用一個數據源(例如使用mysql數據庫)的情形,這種做法有效節省了硬件成本和人力資源,免去了為每個環境單獨設立并維護數據庫的繁瑣。此外,它還促進了并行驗證多種程序功能的實現:例如,在測試環節,兩個不同的團隊可以在同一應用內同時開發兩個獨立功能,而這些功能可能部分或全部共用相同的數據集;又如,在功能部署階段,新代碼往往會先被推送至預發布環境,與生產環境共享部分或全部數據,以此作為檢驗新代碼穩定性和可靠性的重要手段。
2、binlog是mysql數據庫中的日志文件,用于記錄數據庫的所有更改操作,包含了對數據庫執行的所有修改操作的詳細信息,如插入、更新、刪除等。因為不同的應用部署環境共享了同一數據源,這為binlog消息處理帶來了相互干擾的問題:在傳統數據庫binlog消息處理機制中,應用部署環境a與應用部署環境b所生成的binlog消息被混合同存于一個binlog文件內,導致無法有效區分各消息源自哪個具體的應用部署環境。在實際生產流程中,我們期望實現這樣的處理邏輯:應用部署環境a相對應的應用代碼來處理和消費,以避免由其它應用部署環境相對應的應用代碼來處理和消費,否則會因為代碼不一致而產生不符合預期的消息處理結果。
3、圖1是傳統同數據源的應用部署場景的binlog消息傳遞圖。如圖1所示,在傳統同數據源的應用部署場景中,由于各個應用部署環境(如開發、測試、生產等)共用同一個數據庫
技術實現思路
1、鑒于上述現有技術的不足之處,本專利技術的目的在于提供一種同源binlog消息路由方法,以實現同數據源、不同應用部署環境之間binlog消息的隔離。
2、為了達到上述目的,本專利技術采取了以下的技術方案。
3、一種同源binlog消息路由方法,
4、配置消息源,所述消息源包括在不同應用部署環境下運行的應用;所有應用均通過與應用部署環境相關聯的用戶名連接至同一個數據庫,實現對數據庫中部分或全部數據的共享訪問;
5、配置數據庫,所述數據庫,將不同用戶名下的binlog消息路由到與用戶名對應的消息隊列或主題中;
6、配置消費者客戶端,消費者客戶端的應用能夠根據其運行的應用部署環境,自動監聽相應的消息隊列或主題,并消費該消息隊列或主題中的binlog消息。
7、一種同源binlog消息路由方法,包括以下步驟:
8、步驟s1,binlog消息的生成機制:消息源中的各個應用配置有與其它應用不同的用戶名,并連接到同一個的數據庫上對數據進行訪問和操作,所有應用部署環境中的應用都能夠在同一數據庫服務器上生成帶有各自用戶名的binlog消息;
9、步驟s2:binlog消息數據的解析、識別與存儲流程:使用binlog數據庫增量日志解析工具,來解析binlog消息并識別用戶名;建立用戶名和其對應數據庫服務器線程id的映射關系并保存;完成識別后,記錄這些識別結果,并根據識別出的用戶名,對binlog消息進行分類存儲;
10、步驟s3,binlog消息的差異化處理與轉發機制:根據binlog消息中攜帶的用戶名信息,將binlog消息投遞至同一個消息隊列集群下的與其用戶名對應的消息隊列或主題。
11、進一步,步驟s1中,生成的binlog消息,包括數據庫事務id和數據庫服務器線程id;
12、步驟s2中,利用binlog文件的全局有序性質,在讀取到任一binlog消息頭時便將包含數據庫事務id和數據庫服務器線程id的消息頭緩存到本地線程變量threadlocal;
13、獲取到消息體和消息頭后,使用數據庫服務器線程id去請求數據庫服務器,查詢該線程所屬的用戶名,獲取每一條binlog消息的用戶名。
14、進一步,步驟s2中,查詢使用以下sql:select?user,host,db?from?information_schema.processlist?where?id=#{threadid};其中,information_schema.processlist為查詢的數據庫系統表。
15、進一步,一種同源binlog消息路由方法,還包括步驟s4,通知結果返回與異常判斷流程:將binlog消息數據的解析結果和轉發結果,返回至指定的處理器并判斷解析結果和轉發結果是否正常:若正常,則繼續執行后續操作,包括消費并提交canal隊列中的消息,否則,啟動異常攔截機制,將異常信息記錄至異常數據管理表中,同時,觸發異常處理器根據預設的邏輯自動進行補償和重試操作。
16、進一步,一種同源binlog消息路由方法,還包括:應用監聽并消費binlog消息:改造消費者客戶端,調整應用監聽消息隊列或主題的接入機制;改造后的消費者客戶端,自動地為消息隊列或主題的監聽行為加上與應用部署環境相對應的后綴,從而生成唯一標識;消費者應用自動根據所處的應用部署環境,確認唯一標識和消息隊列或主題的用戶名之間的關聯,然后自動監聽和消費與唯一標識相對應的消息隊列或主題中的binlog消息。
17、本方案提供了一種高效、可靠且低成本的binlog消息路由機制,具體體現在以下幾個方面:
18、1,環境標識與消息精準隔離:在消息生成環節,本專利技術巧妙地引入了環境標識(即用戶名),并利用binlog中的線程id作為唯一“指紋”,精確區分不同環境來源的消息。這一創新設計確保了消息能夠被準確無誤地分類并投遞至相應的消息隊列或主題中,有效避免了跨環境消息干擾,提升了消息處理的準確性和效率。
19、2,自動監聽與環境自適應匹配:消費者應用能夠根據其當前運行的應用部署環境,自動監聽對應的消息隊列主題。這一特性保證了消息僅在相同環境內流通,實現了消息的嚴格隔離,進一步減少了消息處理過程中的混淆和錯誤。
20、3,內存緩存技術優化性能:本方案采用了先進的內存緩存技術,不僅顯著降低了數據庫請求的壓力,還有效解決了canal在批量處理同一事務消息時線程id丟失的難題。這一技術革新極大地提升了系統的響應速度和穩定性。
21、4,低成本、高透明度與易實施:本方法在保證軟件研發高效進行的同時,本文檔來自技高網...
【技術保護點】
1.一種同源Binlog消息路由方法,其特征在于,
2.根據權利要求1所述的一種同源Binlog消息路由方法,其特征在于,包括以下步驟:
3.根據權利要求2所述的一種同源Binlog消息路由方法,其特征在于,
4.根據權利要求3所述的一種同源Binlog消息路由方法,其特征在于,包括以下步驟:
5.根據權利要求2所述的一種同源Binlog消息路由方法,其特征在于,還包括步驟S4,通知結果返回與異常判斷流程:將Binlog消息數據的解析結果和轉發結果,返回至指定的處理器并判斷解析結果和轉發結果是否正常:若正常,則繼續執行后續操作,包括消費并提交Canal隊列中的消息,否則,啟動異常攔截機制,將異常信息記錄至異常數據管理表中,同時,觸發異常處理器根據預設的邏輯自動進行補償和重試操作。
6.根據權利要求1或2或5所述的一種同源Binlog消息路由方法,其特征在于,還包括:應用監聽并消費Binlog消息:改造消費者客戶端,調整應用監聽消息隊列或主題的接入機制;改造后的消費者客戶端,自動地為消息隊列或主題的監聽行為加上與應用部署環
...【技術特征摘要】
1.一種同源binlog消息路由方法,其特征在于,
2.根據權利要求1所述的一種同源binlog消息路由方法,其特征在于,包括以下步驟:
3.根據權利要求2所述的一種同源binlog消息路由方法,其特征在于,
4.根據權利要求3所述的一種同源binlog消息路由方法,其特征在于,包括以下步驟:
5.根據權利要求2所述的一種同源binlog消息路由方法,其特征在于,還包括步驟s4,通知結果返回與異常判斷流程:將binlog消息數據的解析結果和轉發結果,返回至指定的處理器并判斷解析結果和轉發結果是否正常:若正常,則繼續執行后續操作,包括消費并提...
【專利技術屬性】
技術研發人員:唐鵬,
申請(專利權)人:客思服杭州科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。