聊聊数据库组件功能设计点

数据库 其他数据库
数据库中间件承担应用与数据库之间的粘合与润滑,数据库中间件设计的合理应用跑起来就丝滑,否则会拉胯。

引言

数据库中间件承担应用与数据库之间的粘合与润滑,数据库中间件设计的合理应用跑起来就丝滑,否则会拉胯。本文就常见数据库组件相关的功能设计点做个归纳整理:

  • 分库分表
  • 数据复制
  • 数据同步平台
  • 全局唯一主键
  • 运维自动化可视化

一、分库分表

分库分表组件主要为分担数据库压力,通过多库多表承接请求。尽管拥有众多的分库分表组件,Apache ShardingSphere作为Apache的顶级项目依旧是主流。无论直接使用还是基于其二次开发或者自研,均值得研究。

1.ShardingSphere-JDBC

客户端直连数据库,分布式无中心化,主要针对java语言,数据库连接消耗多。

2.ShardingSphere-Proxy

客户端先连接到Proxy代理,通过代理连接数据库,能够跨语言,消耗数据库的连接数少(仅代理直接连接数据库),但是中心化风险点也主要在此。

3.ShardingSphere-Sidecar

网格化代理还在规划中,从当前蚂蚁对外提供的service mesh商业方案中,还没DB的mesh,下沉能力的同时,也带来了数据面和控制面板的复杂性。

https://github.com/apache/shardingsphere.git

备注:当前还是客户端直连数据库为主流,中心化的Proxy依然有公司采纳然占比依旧很少,至于Sidecar模式的大规模使用还在未来。

二、数据复制

1.单向搬运

将Mysql数据同步到消息队列或者其他数据存储源,常用开源组件为canal。

https://github.com/alibaba/canal

![](https://gitee.com/laoliangcode/md-picture/raw/master/img/mysql binlog 解析.png)

2.双/单向同步

在异地多活场景中数据库的双向同步、跨机房灾备的单向同步等场景,常用组件otter。

https://github.com/alibaba/otter

其他类似组件:dataLink、databus

https://github.com/ucarGroup/DataLink

https://github.com/linkedin/databus​

备注:在单/双向同步场景中通常伴随着DDL的同步。

三、数据同步平台

当随着数据同步的场景越来越多,为每个不同的数据源写一个同步插件变得复杂和不好维护,此时可以考虑搭建一个数据同步平台。

  • 通过ReaderPugin和WriterPlugin插件化
  • 插件化对接入的数据源和目标数据源只需要编写插件即可
  • 数据转换为提高吞吐性能可以引入Flink批处理框架

备注:数据同步平台社区也有开源DataX可供参考。

https://github.com/alibaba/DataX/blob/master/introduction.md

Flink-CDC

https://github.com/ververica/flink-cdc-connectors

四、全局唯一主键

在分布式数据库中最好使用分布式全局唯一ID作为数据记录的唯一标识,原因也很简单,主要是避免主键冲突。

  • 跨库数据迁移避免主键冲突
  • 双活数据库双向同步时避免主键冲突
  • 唯一键设计合理对排序和识别均有良好的辅助作用

生成全局唯一ID的方案有很多,常见的有:

  • UUID
  • 数据库发放不同的ID区段
  • 雪花算法(snowflake)生成唯一标识

雪花算法: 由Twitter创建生成全局唯一ID算法,一个Snowflake ID组成共64位构成如下,如果不需要这么多位可以改造缩短一些长度。

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相关需要手动的创建的自动化、可视化。

  • 数据库申请与创建
  • DDL变更自动化
  • SQL执行结果导出
  • 同步任务申请自动化
  • 任务运行监控可视化


责任编辑:武晓燕 来源: 瓜农老梁
相关推荐

2022-01-17 21:48:35

流量录制设计点

2022-09-23 07:44:48

时序数据库物联网

2021-10-28 19:28:04

数据库开发Spring

2023-01-26 00:18:53

云原生数据库云资源

2023-01-06 08:31:53

数据库基准测试

2024-10-12 15:29:56

2016-12-02 09:03:20

Apache CarbUpdateDelete

2020-11-11 08:04:34

低代码

2017-10-12 12:13:09

设计师搜索功能搜索框

2023-06-28 09:53:41

智能驾驶

2022-09-21 07:30:12

数据库勒索病毒企业

2023-10-11 08:09:53

事务隔离级别

2024-05-08 08:14:18

数据库IO备份

2020-12-09 08:50:55

web组件开发

2011-03-10 11:12:59

数据库

2011-03-10 11:17:03

数据库设计技巧

2011-04-15 13:28:44

数据库设计

2010-04-22 16:16:35

Oracle数据库

2023-09-05 08:38:33

数据库高可用测试

2022-10-17 09:03:52

点赞
收藏

51CTO技术栈公众号