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

2.雙/單向同步
在異地多活場(chǎng)景中數(shù)據(jù)庫(kù)的雙向同步、跨機(jī)房災(zāi)備的單向同步等場(chǎng)景,常用組件otter。
https://github.com/alibaba/otter

其他類似組件:dataLink、databus
https://github.com/ucarGroup/DataLink
https://github.com/linkedin/databus
備注:在單/雙向同步場(chǎng)景中通常伴隨著DDL的同步。
當(dāng)隨著數(shù)據(jù)同步的場(chǎng)景越來越多,為每個(gè)不同的數(shù)據(jù)源寫一個(gè)同步插件變得復(fù)雜和不好維護(hù),此時(shí)可以考慮搭建一個(gè)數(shù)據(jù)同步平臺(tái)。
通過ReaderPugin和WriterPlugin插件化 插件化對(duì)接入的數(shù)據(jù)源和目標(biāo)數(shù)據(jù)源只需要編寫插件即可 數(shù)據(jù)轉(zhuǎn)換為提高吞吐性能可以引入Flink批處理框架

備注:數(shù)據(jù)同步平臺(tái)社區(qū)也有開源DataX可供參考。
https://github.com/alibaba/DataX/blob/master/introduction.md
Flink-CDC
https://github.com/ververica/flink-cdc-connectors
在分布式數(shù)據(jù)庫(kù)中最好使用分布式全局唯一ID作為數(shù)據(jù)記錄的唯一標(biāo)識(shí),原因也很簡(jiǎn)單,主要是避免主鍵沖突。
跨庫(kù)數(shù)據(jù)遷移避免主鍵沖突 雙活數(shù)據(jù)庫(kù)雙向同步時(shí)避免主鍵沖突 唯一鍵設(shè)計(jì)合理對(duì)排序和識(shí)別均有良好的輔助作用
生成全局唯一ID的方案有很多,常見的有:
UUID 數(shù)據(jù)庫(kù)發(fā)放不同的ID區(qū)段 雪花算法(snowflake)生成唯一標(biāo)識(shí)
雪花算法: 由Twitter創(chuàng)建生成全局唯一ID算法,一個(gè)Snowflake ID組成共64位構(gòu)成如下,如果不需要這么多位可以改造縮短一些長(zhǎng)度。

Twitter Scala 版本:
https://github.com/twitter-archive/snowflake/tree/scala_28
https://github.com/twitter-archive/snowflake/releases/tag/snowflake-2010
雪花算法java版本參考:
https://github.com/beyondfengyu/SnowFlake/blob/master/SnowFlake.java
將常用的一些與DB相關(guān)需要手動(dòng)的創(chuàng)建的自動(dòng)化、可視化。
數(shù)據(jù)庫(kù)申請(qǐng)與創(chuàng)建 DDL變更自動(dòng)化 SQL執(zhí)行結(jié)果導(dǎo)出 同步任務(wù)申請(qǐng)自動(dòng)化 任務(wù)運(yùn)行監(jiān)控可視化
