




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、基于代理方式的分庫分表中間件dbproxy目的地技術部周文斌目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12Dbproxy是什么? 數(shù)據(jù)庫代理 關系數(shù)據(jù)庫的路由器 關系數(shù)據(jù)庫升級到大數(shù)據(jù)的應用中間件 基于開源的mycat實現(xiàn) 支持數(shù)據(jù)的水平拆分2022-6-12解決的問題 數(shù)據(jù)的增長存儲問題 數(shù)據(jù)庫連接的集中式管理 數(shù)據(jù)庫的透明化擴展 數(shù)據(jù)庫的透明化遷移2022-6-12實現(xiàn)的功能 分庫分表 讀寫分離 負載均衡 服務注冊發(fā)現(xiàn) 權限控制目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡
2、權限控制2022-6-12總體架構(gòu)mysqlmysqlpgBackendConnectionManagerpgDriverFrontendConnectionManager協(xié)議適配(mysql)協(xié)議解析Sql解析規(guī)則路由Sql executor結(jié)果合并響應報文客戶端客戶端MysqlDriverMysql數(shù)據(jù)包目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12前端連接管理客戶端FrontendConnectionManager連接請求acceptFrontendConnection握手報文發(fā)送握手報文構(gòu)造握手報文認證信息校驗認證
3、響應報文響應報文1. 跟客戶端建立連接2. 進行權限認證3. 前端連接的創(chuàng)建及銷毀協(xié)議解析模塊MySQLMessage 封裝了Mysql協(xié)議包的操作 方便對TCP的數(shù)據(jù)進行Mysql協(xié)議解析3byte1byten bytes消息長度報文數(shù)據(jù)序號消息頭消息體1byten byte命令參數(shù)mysql報文請求消息體協(xié)議解析模塊3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytes3byte1byten bytesResult Set HeaderFieldEOFRow DataEOFResultSetHeaderPac
4、ket, FieldPacket,EOFPacket,RowDataPacketMysql響應報文目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12路由模塊 SQL解析 DruidParse 分庫標示 路由規(guī)則 路由函數(shù) 讀寫分離特殊路由 事務 強制讀主庫 無分庫標示 qmq路由SQL解析 獲取分庫標示,定位分片 參數(shù) 1分片 2分片 解析語句,定位主從 SelectStatement 從庫 UpdateStatement,DeleteStatement,InsertStatement 主庫2022-6-12路由配置2022-
5、6-12select now()數(shù)據(jù)庫節(jié)點對應的dn0, dn1路由配置 每個表都會配置分庫規(guī)則 每條規(guī)則對應一個路由函數(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讀寫分離 事務 begin transaction select sql update sql insert sql commit transaction( rollback transaction) 直接路由到Write庫,直到事務提交/回滾 強制讀主庫 /*balance*/方式 ReadMaster注解特殊路由2022-6-1219 無分庫標
7、示 select語句,會查詢所有的庫表,將數(shù)據(jù)匯總后,返回給客戶端 insert語句,直接報錯 update語句,會更新所有庫表的數(shù)據(jù) delete語句,會刪除所有的庫表的數(shù)據(jù) qmq_msg_queue的路由 參照同一事務內(nèi)其他sql的路由 如果沒有其他sql,則執(zhí)行默認的路由特殊路由2022-6-1220目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12SQL執(zhí)行模塊ResponseHandlerSingleNodeHandlerMultiNodeHandlerCommitNodeHandlerRollbackHandle
8、rSingleNodeHandler.execute() 路由到一個分片時被執(zhí)行執(zhí)行MultiNoderHandlerNodeHandler.execute() 路由到多分片時被執(zhí)行執(zhí)行CommitNodeHmit() 提交事務執(zhí)行CommitNodeHandler.rollback() 回滾事務執(zhí)行SQL執(zhí)行模塊 NonBlockSession: 一個連接的會話,綁定前端連接跟后端連接 無事務:每個sql在不同連接執(zhí)行 有事務:所有sql在同一個連接上執(zhí)行 SQL執(zhí)行模塊NonBlockingSessioncon1con2con3Sql1, sql2, sql3sql1sql2sql3Non
9、BlockingSessioncon1sql1, sql2, sql3,commitSql1,sql2, sql3commitrelease con1release con1release con2release con3無事務有事務前端連接后端連接SQL執(zhí)行過程客戶端connectionSql請求路由Mysql報文postgresqlSQL執(zhí)行器Sql語句報文轉(zhuǎn)換執(zhí)行結(jié)果Mysql響應報文執(zhí)行結(jié)果Sql解析mysql目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12后端連接管理模塊 管理后端數(shù)據(jù)庫連接 創(chuàng)建新的數(shù)據(jù)庫連接 回
10、收連接 分片主從管理 控制讀寫分離后端連接管理 管理后端真實數(shù)據(jù)庫的連接DBBackendConnctionMangerSql執(zhí)行請求Connection執(zhí)行結(jié)果目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12負載均衡 注冊發(fā)現(xiàn)使用zookeeper實現(xiàn),dbproxy啟動的時候在zookeeper上注冊服務地址,客戶端監(jiān)聽對應節(jié)點的信息,如果有服務上線,或者下線,動態(tài)的獲得dbproxy的服務列表,然后動態(tài)生成數(shù)據(jù)源,供客戶端使用。zookeeperdbproxydbproxydbproxyregisterclientda
11、tasourcedynamicDataSourcesubscribecreateinjection負載均衡 負載均衡,是使用了spring的動態(tài)數(shù)據(jù)源AbstractRoutingDataSource,擴展了該數(shù)據(jù)源,從動態(tài)數(shù)據(jù)源中根據(jù)一定的負載均衡策略,選出一個可以使用的數(shù)據(jù)源。(1). 隨機策略 :隨機選一個可用的數(shù)據(jù)源。 com.qunar.des.dbproxy.datasource.balance.RandomStrategy (2). 輪詢策略 :從可用的數(shù)據(jù)源中,按照順序輪詢。com.qunar.des.dbproxy.datasource.balance.RoundRobinW
12、eightStrategy 可以通過實現(xiàn)BalanceStrategy.getNext實現(xiàn)不同的負載均衡策略。Dbproxy分組 通過為dbproxy配置不同的組,可以靈活的組裝不同的dbproxy為一個集群dbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydbproxydes.dbproxy.orderdes.dbproxy.voucherdes.dbproxy.task目錄 解決的問題 總體架構(gòu) 前端連接管理 路由模塊 SQL執(zhí)行模塊 后端連接管理 負載均衡 權限控制2022-6-12權限控制 基于appcode進行權限控制 新增應用Qconfig動態(tài)增加appcode 增加新機器就已經(jīng)有權限了2022-6-12 監(jiān)控報警 慢查詢監(jiān)控 連接數(shù)監(jiān)控
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療差錯分析與防范對策
- 醫(yī)療行業(yè)中的區(qū)塊鏈技術選舉透明化的新路徑
- 醫(yī)療數(shù)據(jù)挖掘與健康預測模型研究
- 兒童獲得性免疫缺陷綜合征的臨床護理
- 醫(yī)療創(chuàng)新引領下的智能辦公設備設計思考
- 考研心得體會模版
- 范稿模板15財務部出納年度個人工作總結(jié)模版(修改)
- epc提供合同范例
- 個人車庫互換合同范例
- 學校開展世界無煙日的活動總結(jié)模版
- 數(shù)獨題目大全與答案
- 2024年安徽合肥通航控股有限公司招聘筆試參考題庫含答案解析
- 兒童超聲心動圖操作指南與標準課件
- 刑事案件模擬法庭劇本完整版五篇
- 2022年高考全國I卷數(shù)學高考真題(原卷版)
- 東風EQ1092F型汽車分動器的設計
- 小主持人社團教案
- 2023年貴州省初中學業(yè)水平考試物理中考試卷真題(答案詳解)
- 2017版《水利水電工程單元工程施工質(zhì)量驗收評定表和填表說明》(下冊)
- 城市水污染的現(xiàn)狀及治理建議分析
- DBJ51T 189-2022 四川省建設工程施工現(xiàn)場安全資料管理標準
評論
0/150
提交評論