基于代理的分庫分表中間件_第1頁
基于代理的分庫分表中間件_第2頁
基于代理的分庫分表中間件_第3頁
基于代理的分庫分表中間件_第4頁
基于代理的分庫分表中間件_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于代理方式的分庫分表中間件dbproxy目的地技術(shù)部周文斌目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12Dbproxy是什么? 數(shù)據(jù)庫代理 關(guān)系數(shù)據(jù)庫的路由器 關(guān)系數(shù)據(jù)庫升級(jí)到大數(shù)據(jù)的應(yīng)用中間件 基于開源的mycat實(shí)現(xiàn) 支持?jǐn)?shù)據(jù)的水平拆分2022-6-12解決的問題 數(shù)據(jù)的增長存儲(chǔ)問題 數(shù)據(jù)庫連接的集中式管理 數(shù)據(jù)庫的透明化擴(kuò)展 數(shù)據(jù)庫的透明化遷移2022-6-12實(shí)現(xiàn)的功能 分庫分表 讀寫分離 負(fù)載均衡 服務(wù)注冊發(fā)現(xiàn) 權(quán)限控制目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡

2、權(quán)限控制2022-6-12總體架構(gòu)mysqlmysqlpgBackendConnectionManagerpgDriverFrontendConnectionManager協(xié)議適配(mysql)協(xié)議解析Sql解析規(guī)則路由Sql executor結(jié)果合并響應(yīng)報(bào)文客戶端客戶端MysqlDriverMysql數(shù)據(jù)包目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12前端連接管理客戶端FrontendConnectionManager連接請求acceptFrontendConnection握手報(bào)文發(fā)送握手報(bào)文構(gòu)造握手報(bào)文認(rèn)證信息校驗(yàn)認(rèn)證

3、響應(yīng)報(bào)文響應(yīng)報(bào)文1. 跟客戶端建立連接2. 進(jìn)行權(quán)限認(rèn)證3. 前端連接的創(chuàng)建及銷毀協(xié)議解析模塊MySQLMessage 封裝了Mysql協(xié)議包的操作 方便對TCP的數(shù)據(jù)進(jìn)行Mysql協(xié)議解析3byte1byten bytes消息長度報(bào)文數(shù)據(jù)序號(hào)消息頭消息體1byten byte命令參數(shù)mysql報(bào)文請求消息體協(xié)議解析模塊3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytesResult Set HeaderFieldEOFRow DataEOFResultSetHeaderPac

4、ket, FieldPacket,EOFPacket,RowDataPacketMysql響應(yīng)報(bào)文目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12路由模塊 SQL解析 DruidParse 分庫標(biāo)示 路由規(guī)則 路由函數(shù) 讀寫分離特殊路由 事務(wù) 強(qiáng)制讀主庫 無分庫標(biāo)示 qmq路由SQL解析 獲取分庫標(biāo)示,定位分片 參數(shù) 1分片 2分片 解析語句,定位主從 SelectStatement 從庫 UpdateStatement,DeleteStatement,InsertStatement 主庫2022-6-12路由配置2022-

5、6-12select now()數(shù)據(jù)庫節(jié)點(diǎn)對應(yīng)的dn0, dn1路由配置 每個(gè)表都會(huì)配置分庫規(guī)則 每條規(guī)則對應(yīng)一個(gè)路由函數(shù)oidafterOneDayByOidyyyy-MM-dd2015-09-24180路由模塊 路由函數(shù)路由算法 RuleAlgorithmRuleAlgorithmAbstractPartitionAlgorithmPartitionByOIDAfterDayPartitionByDateAfterDay路由模塊Sql語句DruidParserRouterWriteReadupdateselectselect * from table where id=1update ta

6、ble set status =2 where id=1SelectStatementselect * from table where id=1UpdateStatementupdate table set status =2 where id=1讀寫分離 事務(wù) begin transaction select sql update sql insert sql commit transaction( rollback transaction) 直接路由到Write庫,直到事務(wù)提交/回滾 強(qiáng)制讀主庫 /*balance*/方式 ReadMaster注解特殊路由2022-6-1219 無分庫標(biāo)

7、示 select語句,會(huì)查詢所有的庫表,將數(shù)據(jù)匯總后,返回給客戶端 insert語句,直接報(bào)錯(cuò) update語句,會(huì)更新所有庫表的數(shù)據(jù) delete語句,會(huì)刪除所有的庫表的數(shù)據(jù) qmq_msg_queue的路由 參照同一事務(wù)內(nèi)其他sql的路由 如果沒有其他sql,則執(zhí)行默認(rèn)的路由特殊路由2022-6-1220目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12SQL執(zhí)行模塊ResponseHandlerSingleNodeHandlerMultiNodeHandlerCommitNodeHandlerRollbackHandle

8、rSingleNodeHandler.execute() 路由到一個(gè)分片時(shí)被執(zhí)行執(zhí)行MultiNoderHandlerNodeHandler.execute() 路由到多分片時(shí)被執(zhí)行執(zhí)行CommitNodeHmit() 提交事務(wù)執(zhí)行CommitNodeHandler.rollback() 回滾事務(wù)執(zhí)行SQL執(zhí)行模塊 NonBlockSession: 一個(gè)連接的會(huì)話,綁定前端連接跟后端連接 無事務(wù):每個(gè)sql在不同連接執(zhí)行 有事務(wù):所有sql在同一個(gè)連接上執(zhí)行 SQL執(zhí)行模塊NonBlockingSessioncon1con2con3Sql1, sql2, sql3sql1sql2sql3Non

9、BlockingSessioncon1sql1, sql2, sql3,commitSql1,sql2, sql3commitrelease con1release con1release con2release con3無事務(wù)有事務(wù)前端連接后端連接SQL執(zhí)行過程客戶端connectionSql請求路由Mysql報(bào)文postgresqlSQL執(zhí)行器Sql語句報(bào)文轉(zhuǎn)換執(zhí)行結(jié)果Mysql響應(yīng)報(bào)文執(zhí)行結(jié)果Sql解析mysql目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12后端連接管理模塊 管理后端數(shù)據(jù)庫連接 創(chuàng)建新的數(shù)據(jù)庫連接 回

10、收連接 分片主從管理 控制讀寫分離后端連接管理 管理后端真實(shí)數(shù)據(jù)庫的連接DBBackendConnctionMangerSql執(zhí)行請求Connection執(zhí)行結(jié)果目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12負(fù)載均衡 注冊發(fā)現(xiàn)使用zookeeper實(shí)現(xiàn),dbproxy啟動(dòng)的時(shí)候在zookeeper上注冊服務(wù)地址,客戶端監(jiān)聽對應(yīng)節(jié)點(diǎn)的信息,如果有服務(wù)上線,或者下線,動(dòng)態(tài)的獲得dbproxy的服務(wù)列表,然后動(dòng)態(tài)生成數(shù)據(jù)源,供客戶端使用。zookeeperdbproxydbproxydbproxyregisterclientda

11、tasourcedynamicDataSourcesubscribecreateinjection負(fù)載均衡 負(fù)載均衡,是使用了spring的動(dòng)態(tài)數(shù)據(jù)源AbstractRoutingDataSource,擴(kuò)展了該數(shù)據(jù)源,從動(dòng)態(tài)數(shù)據(jù)源中根據(jù)一定的負(fù)載均衡策略,選出一個(gè)可以使用的數(shù)據(jù)源。(1). 隨機(jī)策略 :隨機(jī)選一個(gè)可用的數(shù)據(jù)源。 com.qunar.des.dbproxy.datasource.balance.RandomStrategy (2). 輪詢策略 :從可用的數(shù)據(jù)源中,按照順序輪詢。com.qunar.des.dbproxy.datasource.balance.RoundRobinW

12、eightStrategy 可以通過實(shí)現(xiàn)BalanceStrategy.getNext實(shí)現(xiàn)不同的負(fù)載均衡策略。Dbproxy分組 通過為dbproxy配置不同的組,可以靈活的組裝不同的dbproxy為一個(gè)集群dbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydes.dbproxy.orderdes.dbproxy.voucherdes.dbproxy.task目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負(fù)載均衡 權(quán)限控制2022-6-12權(quán)限控制 基于appcode進(jìn)行權(quán)限控制 新增應(yīng)用Qconfig動(dòng)態(tài)增加appcode 增加新機(jī)器就已經(jīng)有權(quán)限了2022-6-12 監(jiān)控報(bào)警 慢查詢監(jiān)控 連接數(shù)監(jiān)控

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論