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

下載本文檔

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

文檔簡介

基于代理方式的分庫分表中間件dbproxy目的地技術(shù)部周文斌目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3Dbproxy是什么?數(shù)據(jù)庫代理關(guān)系數(shù)據(jù)庫的路由器關(guān)系數(shù)據(jù)庫升級到大數(shù)據(jù)的應(yīng)用中間件基于開源的mycat實現(xiàn)支持數(shù)據(jù)的水平拆分2023/2/3解決的問題數(shù)據(jù)的增長存儲問題數(shù)據(jù)庫連接的集中式管理數(shù)據(jù)庫的透明化擴展數(shù)據(jù)庫的透明化遷移2023/2/3實現(xiàn)的功能分庫分表讀寫分離負載均衡服務(wù)注冊發(fā)現(xiàn)權(quán)限控制目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3總體架構(gòu)mysqlmysqlpgBackendConnectionManagerpgDriverFrontendConnectionManager協(xié)議適配(mysql)協(xié)議解析Sql解析規(guī)則路由Sqlexecutor結(jié)果合并響應(yīng)報文客戶端客戶端MysqlDriverMysql數(shù)據(jù)包目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3前端連接管理客戶端FrontendConnectionManager連接請求acceptFrontendConnection握手報文發(fā)送握手報文構(gòu)造握手報文認證信息校驗認證響應(yīng)報文響應(yīng)報文1.跟客戶端建立連接2.進行權(quán)限認證3.前端連接的創(chuàng)建及銷毀協(xié)議解析模塊MySQLMessage封裝了Mysql協(xié)議包的操作方便對TCP的數(shù)據(jù)進行Mysql協(xié)議解析3byte1bytenbytes消息長度報文數(shù)據(jù)序號消息頭消息體1bytenbyte命令參數(shù)mysql報文請求消息體協(xié)議解析模塊3byte1bytenbytes3byte1bytenbytes3byte1bytenbytes3byte1bytenbytes3byte1bytenbytesResultSetHeaderFieldEOFRowDataEOFResultSetHeaderPacket,FieldPacket,EOFPacket,RowDataPacketMysql響應(yīng)報文目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3路由模塊SQL解析DruidParse分庫標示路由規(guī)則路由函數(shù)讀寫分離特殊路由事務(wù)強制讀主庫無分庫標示qmq路由SQL解析獲取分庫標示,定位分片參數(shù)1分片2分片…

解析語句,定位主從SelectStatement從庫UpdateStatement,DeleteStatement,InsertStatement主庫2023/2/3路由配置2023/2/3<dataNodename="dn0"dataHost="server0"database="des_trade"/><dataHostname="server0"maxCon="15"minCon="10"balance="2"writeType="0"dbType="postgresql"dbDriver="jdbc"> <heartbeat>selectnow()</heartbeat> <writeHosthost="hostM0" url="jdbc:postgresql://:5432/des_trade" user="tuan_usr"password=“xxxxxxxxx"> <readHosthost="hostS01" url="jdbc:postgresql://:6432/des_trade" user="tuan_usr"password=“xxxxxxxxx"/> </writeHost></dataHost>數(shù)據(jù)庫節(jié)點對應(yīng)的dn0,dn1路由配置每個表都會配置分庫規(guī)則每條規(guī)則對應(yīng)一個路由函數(shù)<tablename="order_oplog"primaryKey="ID"dataNode="dn0,dn1"rule="begin-after-one-day-by-oid"/><tableRulename="begin-after-one-day-by-oid"><rule><columns>oid</columns><algorithm>afterOneDayByOid</algorithm></rule></tableRule><functionname="afterOneDayByOid"class="com.qunar.des.dbproxy.function.PartitionByOIDAfterDay"><propertyname="dateFormat">yyyy-MM-dd</property><propertyname="sBeginDate">2015-09-24</property><propertyname="sPartionDay">180</property></function>路由模塊路由函數(shù)路由算法

RuleAlgorithmRuleAlgorithmAbstractPartitionAlgorithmPartitionByOIDAfterDayPartitionByDateAfterDay路由模塊Sql語句DruidParserRouterWriteReadupdateselectselect*fromtablewhereid=1updatetablesetstatus=2whereid=1SelectStatementselect*fromtablewhereid=1UpdateStatementupdatetablesetstatus=2whereid=1讀寫分離事務(wù)begintransaction selectsql updatesql insertsql

committransaction(rollbacktransaction)

直接路由到Write庫,直到事務(wù)提交/回滾強制讀主庫/*balance*/方式@ReadMaster注解特殊路由2023/2/319無分庫標示select語句,會查詢所有的庫表,將數(shù)據(jù)匯總后,返回給客戶端insert語句,直接報錯update語句,會更新所有庫表的數(shù)據(jù)delete語句,會刪除所有的庫表的數(shù)據(jù)qmq_msg_queue的路由參照同一事務(wù)內(nèi)其他sql的路由如果沒有其他sql,則執(zhí)行默認的路由特殊路由2023/2/320目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3SQL執(zhí)行模塊ResponseHandlerSingleNodeHandlerMultiNodeHandlerCommitNodeHandlerRollbackHandlerSingleNodeHandler.execute()路由到一個分片時被執(zhí)行執(zhí)行MultiNoderHandlerNodeHandler.execute()路由到多分片時被執(zhí)行執(zhí)行CommitNodeHmit()提交事務(wù)執(zhí)行CommitNodeHandler.rollback()回滾事務(wù)執(zhí)行SQL執(zhí)行模塊NonBlockSession:一個連接的會話,綁定前端連接跟后端連接無事務(wù):每個sql在不同連接執(zhí)行有事務(wù):所有sql在同一個連接上執(zhí)行

SQL執(zhí)行模塊NonBlockingSessioncon1con2con3Sql1,sql2,sql3sql1sql2sql3NonBlockingSessioncon1sql1,sql2,sql3,commitSql1,sql2,sql3commitreleasecon1releasecon1releasecon2releasecon3無事務(wù)有事務(wù)前端連接后端連接SQL執(zhí)行過程客戶端connectionSql請求路由Mysql報文postgresqlSQL執(zhí)行器Sql語句報文轉(zhuǎn)換執(zhí)行結(jié)果Mysql響應(yīng)報文執(zhí)行結(jié)果Sql解析mysql目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3后端連接管理模塊管理后端數(shù)據(jù)庫連接創(chuàng)建新的數(shù)據(jù)庫連接回收連接分片主從管理控制讀寫分離后端連接管理管理后端真實數(shù)據(jù)庫的連接DBBackendConnctionMangerSql執(zhí)行請求Connection執(zhí)行結(jié)果目錄解決的問題總體架構(gòu)前端連接管理路由模塊SQL執(zhí)行模塊后端連接管理負載均衡權(quán)限控制2023/2/3負載均衡注冊發(fā)現(xiàn)使用zookeeper實現(xiàn),dbproxy啟動的時候在zookeeper上注冊服務(wù)地址,客戶端監(jiān)聽對應(yīng)節(jié)點的信息,如果有服務(wù)上線,或者下線,動態(tài)的獲得dbproxy的服務(wù)列表,然后動態(tài)生成數(shù)據(jù)源,供客戶端使用。zookeeperdbproxydbproxydbproxyregisterclientdatasourcedynamicDataSourcesubscribecreateinjection負載均衡負載均衡,是使用了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.RoundRobinWeightStrategy

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

溫馨提示

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

評論

0/150

提交評論