分布式數(shù)據(jù)庫(kù)由數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)訪問構(gòu)成:數(shù)據(jù)存儲(chǔ)基于開源關(guān)系型數(shù)據(jù)庫(kù)MariaDB改造,提供高可靠的數(shù)據(jù)存儲(chǔ)能力。數(shù)據(jù)訪問基于開源數(shù)據(jù)庫(kù)中間件Cobar改造,屏蔽數(shù)據(jù)庫(kù)分庫(kù)分表帶來(lái)的訪問難題。這里所指的分布式數(shù)據(jù)庫(kù)由統(tǒng)一數(shù)據(jù)訪問層(TeleUDAL)及數(shù)據(jù)高可用(TeleDB)兩部分組成。統(tǒng)一數(shù)據(jù)訪問層(TeleUDAL):借鑒多種分布式數(shù)據(jù)庫(kù)訪問模式,基于MySQL開源協(xié)議,采用數(shù)據(jù)庫(kù)代理方式,形成分布式數(shù)據(jù)庫(kù)中間件解決方案,解決分布式系統(tǒng)數(shù)據(jù)庫(kù)分庫(kù)分表帶來(lái)的數(shù)據(jù)透明訪問難題。數(shù)據(jù)高可用(TeleDB):基于開源MariaDB數(shù)據(jù)庫(kù),自主研發(fā),為客戶提供高性能、高可用的數(shù)據(jù)庫(kù)集群系統(tǒng)。
udal特性
1、無(wú)限擴(kuò)容
自動(dòng)水平拆分
支持多種分片算法
支持字符串,數(shù)字,日期等多種拆分緯度
業(yè)務(wù)不中斷平滑擴(kuò)容
2、彈性擴(kuò)展
應(yīng)用透明讀寫分離,應(yīng)用零代碼改動(dòng)
平滑擴(kuò)展,業(yè)務(wù)不中斷
3、性能卓越
分布式服務(wù)架構(gòu),對(duì)比單機(jī)數(shù)據(jù)庫(kù)服務(wù)能力線性提升
優(yōu)化SQl解析引擎,效率成倍提升
支持切片索引,減少?gòu)V播查詢
全局表同步功能,分布式JOIN效率成倍提升
單機(jī)平均性能:~11w TPS(4路8核,512GB內(nèi)存,萬(wàn)兆網(wǎng)卡)
4、簡(jiǎn)單易用
全面兼容MYSQL協(xié)議、語(yǔ)法
兼容大部分MYSQL客戶端
提供WEB控制臺(tái),數(shù)據(jù)庫(kù)操作簡(jiǎn)單
一鍵實(shí)現(xiàn)數(shù)據(jù)庫(kù)擴(kuò)容(分片數(shù)不變)
業(yè)務(wù)零代碼改動(dòng),實(shí)現(xiàn)讀寫分離
5、安全穩(wěn)定
完善的數(shù)據(jù)層主備容災(zāi)方案,保證數(shù)據(jù)安全
分布式架構(gòu)無(wú)服務(wù)單點(diǎn),服務(wù)穩(wěn)定
完善的運(yùn)維管控報(bào)警體系
6、低成本
使用廉價(jià)X86主機(jī)
使用廉價(jià)存儲(chǔ)
開源軟件+自研結(jié)合
從上面的架構(gòu)圖可看出,UDAL主要的構(gòu)成如下:
LVS:為DBProxy提供服務(wù)注冊(cè)發(fā)現(xiàn)及負(fù)載均衡功能,應(yīng)用發(fā)送的請(qǐng)求通過LVS均衡分布到各個(gè)DBProxy上。
DBProxy:UDAL的核心組件,是一個(gè)實(shí)現(xiàn)了mysql協(xié)議的Sever進(jìn)程,前端用戶可以把DBProxy看成數(shù)據(jù)庫(kù)代理,可用mysql客戶端工具或命令行方式直接訪問,其后端以mysql原生協(xié)議與多個(gè)mysql數(shù)據(jù)庫(kù)進(jìn)行通信,也可以用jdbc協(xié)議與大多數(shù)主流數(shù)據(jù)庫(kù)服務(wù)器通信,DBProxy的核心功能是分庫(kù)分表并對(duì)應(yīng)用層屏蔽分庫(kù)分表帶來(lái)的訪問難題。
GiServer:切片索引服務(wù)進(jìn)程,是為了提升非分片鍵查詢(select語(yǔ)句)時(shí)的效率(避免廣播查詢)而開發(fā)的,與數(shù)據(jù)庫(kù)的索引沒有任何關(guān)系,是完全不同的兩個(gè)概念,GiServer是切片索引數(shù)據(jù)的生產(chǎn)者,真正的消費(fèi)者是DBProxy進(jìn)程,假設(shè)客戶表是以cust_id進(jìn)行分表的,但應(yīng)用需要通過客戶身份證來(lái)查詢客戶信息,如果沒有切片索引,則DBProxy會(huì)將查詢語(yǔ)句廣播到所有節(jié)點(diǎn)執(zhí)行,接收到執(zhí)行結(jié)果進(jìn)行匯聚后再返回給應(yīng)用,如果建立了切片索引,則DBProxy首先會(huì)根據(jù)身份證號(hào)碼從切片索引中查詢到對(duì)應(yīng)的cust_id,再根據(jù)分片算法定位到cust_id對(duì)應(yīng)的分片,這樣就避免了廣播查詢。
配套功能:包括功能測(cè)試、性能測(cè)試、持續(xù)集成、監(jiān)控、發(fā)布、配置、運(yùn)維等功能,這些配套功能都將通過管理平臺(tái)(UDAL_ADMIN)進(jìn)行管理。
外部組件:UDAL依賴的外部組件主要有zookeeper及分布式緩存,zookeeper用于存放DBProxy、GiServer的配置信息及全局序列數(shù)據(jù),分布式緩存用于存放切片索引數(shù)據(jù)。
1、讀寫分離
對(duì)于sql進(jìn)行類型判定,如果判定為讀取操作,則按照用戶設(shè)置的讀權(quán)重進(jìn)行sql路由,到主實(shí)例或者到只讀上進(jìn)行sql操作。
dbproxy使用以下兩種方式開啟讀寫分離功能:
1、配置dbproxybalance參數(shù).
2、在select語(yǔ)句前增加/*!HINT({"balance":"?"})*/注解
屬性配置
在管理平臺(tái)依次點(diǎn)擊以下按鈕即可打開相應(yīng)數(shù)據(jù)庫(kù)的讀寫分離屬性配置窗口:
即可打開設(shè)置屬性窗口設(shè)置balance參數(shù):
balance參數(shù)可選值為01 2,分別對(duì)應(yīng)頁(yè)面上”關(guān)閉”,“讀語(yǔ)句發(fā)往讀庫(kù)”,“讀語(yǔ)句隨機(jī)發(fā)往讀庫(kù)和寫庫(kù)”個(gè)選項(xiàng):
balance= 0 不開啟讀寫分離,所有語(yǔ)句發(fā)往寫節(jié)點(diǎn).
balance= 1 開啟讀寫分離,所有事務(wù)外(autocommit=1)的select語(yǔ)句發(fā)往讀節(jié)點(diǎn);所有事務(wù)內(nèi)(autocommit=0)的語(yǔ)句發(fā)往寫節(jié)點(diǎn).
balance= 2 開啟讀寫分離,所有事務(wù)外(autocommit=1)的select語(yǔ)句隨機(jī)發(fā)往讀節(jié)點(diǎn)或?qū)懝?jié)點(diǎn);所有事務(wù)內(nèi)(autocommit=0)的語(yǔ)句發(fā)往寫節(jié)點(diǎn).
/* !HINT({"balance":"?"})*/ 語(yǔ)句
使用/*!HINT({"balance":"?"})*/注解可以強(qiáng)制指定select語(yǔ)句按照指定規(guī)則進(jìn)行讀寫分離,balance有三種取值方式,與dbproxy的balance屬性類似:
/*!HINT({"balance":"0"})*/ 強(qiáng)制select語(yǔ)句發(fā)往寫節(jié)點(diǎn)
/*!HINT({"balance":"1"})*/ 強(qiáng)制select語(yǔ)句發(fā)往讀節(jié)點(diǎn)
/*!HINT({"balance":"2"})*/ 強(qiáng)制select語(yǔ)句隨機(jī)發(fā)往數(shù)據(jù)庫(kù)讀節(jié)點(diǎn)或?qū)懝?jié)點(diǎn)
注意
insert,update, delete語(yǔ)句在任何情況下都將發(fā)往寫節(jié)點(diǎn),所以讀寫分離實(shí)際只針對(duì)select語(yǔ)句。
/*!HINT({"balance":"?"})*/的讀寫分離規(guī)則優(yōu)先級(jí)高于配置balance屬性。
配置balance屬性進(jìn)行讀寫分離需結(jié)合autocommit=1使用,而/*!HINT({"balance":"?"})*/方式不需要。
2、水平拆分
分片鍵(拆分字段)
3、數(shù)據(jù)分布
UDAL中的數(shù)據(jù)是按照拆分字段值,加上特定的算法進(jìn)行計(jì)算,根據(jù)結(jié)果存儲(chǔ)數(shù)據(jù)到對(duì)應(yīng)分片。
4、Sql路由
當(dāng)用戶SQL到UDAL時(shí),UDAL會(huì)理解整個(gè)SQL含義,然后按照拆分字段的值和執(zhí)行策略將SQL路由到對(duì)應(yīng)分區(qū)進(jìn)行執(zhí)行。
5、數(shù)據(jù)匯聚
如果一個(gè)SQL對(duì)應(yīng)多個(gè)分片數(shù)據(jù)執(zhí)行,UDAL會(huì)將各個(gè)分片返回的數(shù)據(jù)按照原始SQL語(yǔ)義進(jìn)行合并。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/130162.html
摘要:作者鐘離,酷家樂客戶端負(fù)責(zé)人原文地址酷家樂客戶端下載地址文章背景在酷家樂客戶端在改版成功后,我們積累了許多的寶貴的經(jīng)驗(yàn)和最佳實(shí)踐。用戶在電腦上安裝客戶端,實(shí)際上會(huì)將客戶端代碼文件持久儲(chǔ)存到本機(jī)。通常我們會(huì)在軟件啟動(dòng)時(shí)檢查更新。 作者:鐘離,酷家樂PC客戶端負(fù)責(zé)人原文地址:https://webfe.kujiale.com/electron-autoupdate/酷家樂客戶端:下載地址...
摘要:作者鐘離,酷家樂客戶端負(fù)責(zé)人原文地址酷家樂客戶端下載地址文章背景在酷家樂客戶端在改版成功后,我們積累了許多的寶貴的經(jīng)驗(yàn)和最佳實(shí)踐。用戶在電腦上安裝客戶端,實(shí)際上會(huì)將客戶端代碼文件持久儲(chǔ)存到本機(jī)。通常我們會(huì)在軟件啟動(dòng)時(shí)檢查更新。 作者:鐘離,酷家樂PC客戶端負(fù)責(zé)人原文地址:https://webfe.kujiale.com/electron-autoupdate/酷家樂客戶端:下載地址...
摘要:來(lái)這里看看的工程師如何進(jìn)行持續(xù)集成與持續(xù)部署。主要介紹了豆瓣移動(dòng)持續(xù)集成和測(cè)試相關(guān)實(shí)踐,用工具化自動(dòng)化社會(huì)化測(cè)試來(lái)解決遇到的問題,將打包發(fā)布環(huán)節(jié)自動(dòng)化。這期的持續(xù)集成實(shí)踐分享就到這里。 我們??吹皆S多團(tuán)隊(duì)和開發(fā)者分享他們的持續(xù)集成實(shí)踐經(jīng)驗(yàn),本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等項(xiàng)目搭建持續(xù)集成的實(shí)踐,以及一些國(guó)內(nèi)外公司的內(nèi)部持續(xù)集成...
閱讀 1493·2023-01-11 13:20
閱讀 1851·2023-01-11 13:20
閱讀 1289·2023-01-11 13:20
閱讀 2041·2023-01-11 13:20
閱讀 4241·2023-01-11 13:20
閱讀 2948·2023-01-11 13:20
閱讀 1581·2023-01-11 13:20
閱讀 3853·2023-01-11 13:20