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