聊聊數(shù)據(jù)庫組件功能設(shè)計點
引言
數(shù)據(jù)庫中間件承擔應(yīng)用與數(shù)據(jù)庫之間的粘合與潤滑,數(shù)據(jù)庫中間件設(shè)計的合理應(yīng)用跑起來就絲滑,否則會拉胯。本文就常見數(shù)據(jù)庫組件相關(guān)的功能設(shè)計點做個歸納整理:
- 分庫分表
- 數(shù)據(jù)復(fù)制
- 數(shù)據(jù)同步平臺
- 全局唯一主鍵
- 運維自動化可視化
一、分庫分表
分庫分表組件主要為分擔數(shù)據(jù)庫壓力,通過多庫多表承接請求。盡管擁有眾多的分庫分表組件,Apache ShardingSphere作為Apache的頂級項目依舊是主流。無論直接使用還是基于其二次開發(fā)或者自研,均值得研究。
1.ShardingSphere-JDBC
客戶端直連數(shù)據(jù)庫,分布式無中心化,主要針對java語言,數(shù)據(jù)庫連接消耗多。
2.ShardingSphere-Proxy
客戶端先連接到Proxy代理,通過代理連接數(shù)據(jù)庫,能夠跨語言,消耗數(shù)據(jù)庫的連接數(shù)少(僅代理直接連接數(shù)據(jù)庫),但是中心化風(fēng)險點也主要在此。
3.ShardingSphere-Sidecar
網(wǎng)格化代理還在規(guī)劃中,從當前螞蟻對外提供的service mesh商業(yè)方案中,還沒DB的mesh,下沉能力的同時,也帶來了數(shù)據(jù)面和控制面板的復(fù)雜性。
https://github.com/apache/shardingsphere.git
備注:當前還是客戶端直連數(shù)據(jù)庫為主流,中心化的Proxy依然有公司采納然占比依舊很少,至于Sidecar模式的大規(guī)模使用還在未來。
二、數(shù)據(jù)復(fù)制
1.單向搬運
將Mysql數(shù)據(jù)同步到消息隊列或者其他數(shù)據(jù)存儲源,常用開源組件為canal。
https://github.com/alibaba/canal

2.雙/單向同步
在異地多活場景中數(shù)據(jù)庫的雙向同步、跨機房災(zāi)備的單向同步等場景,常用組件otter。
https://github.com/alibaba/otter
其他類似組件:dataLink、databus
https://github.com/ucarGroup/DataLink
https://github.com/linkedin/databus?
備注:在單/雙向同步場景中通常伴隨著DDL的同步。
三、數(shù)據(jù)同步平臺
當隨著數(shù)據(jù)同步的場景越來越多,為每個不同的數(shù)據(jù)源寫一個同步插件變得復(fù)雜和不好維護,此時可以考慮搭建一個數(shù)據(jù)同步平臺。
- 通過ReaderPugin和WriterPlugin插件化
- 插件化對接入的數(shù)據(jù)源和目標數(shù)據(jù)源只需要編寫插件即可
- 數(shù)據(jù)轉(zhuǎn)換為提高吞吐性能可以引入Flink批處理框架
備注:數(shù)據(jù)同步平臺社區(qū)也有開源DataX可供參考。
https://github.com/alibaba/DataX/blob/master/introduction.md
Flink-CDC
https://github.com/ververica/flink-cdc-connectors
四、全局唯一主鍵
在分布式數(shù)據(jù)庫中最好使用分布式全局唯一ID作為數(shù)據(jù)記錄的唯一標識,原因也很簡單,主要是避免主鍵沖突。
- 跨庫數(shù)據(jù)遷移避免主鍵沖突
- 雙活數(shù)據(jù)庫雙向同步時避免主鍵沖突
- 唯一鍵設(shè)計合理對排序和識別均有良好的輔助作用
生成全局唯一ID的方案有很多,常見的有:
- UUID
- 數(shù)據(jù)庫發(fā)放不同的ID區(qū)段
- 雪花算法(snowflake)生成唯一標識
雪花算法: 由Twitter創(chuàng)建生成全局唯一ID算法,一個Snowflake ID組成共64位構(gòu)成如下,如果不需要這么多位可以改造縮短一些長度。
Twitter Scala 版本:
https://github.com/twitter-archive/snowflake/tree/scala_28https://github.com/twitter-archive/snowflake/releases/tag/snowflake-2010
雪花算法java版本參考:
https://github.com/beyondfengyu/SnowFlake/blob/master/SnowFlake.java
五、運維自動化可視化
將常用的一些與DB相關(guān)需要手動的創(chuàng)建的自動化、可視化。
- 數(shù)據(jù)庫申請與創(chuàng)建
- DDL變更自動化
- SQL執(zhí)行結(jié)果導(dǎo)出
- 同步任務(wù)申請自動化
- 任務(wù)運行監(jiān)控可視化