数据库中间件-Middleware - Go语言中文社区

数据库中间件-Middleware


概念

中间件,也就是处于中间的软件,通过位置而非功能或特性来定义。中间件根据不同的功能又可以分为不同的种类,比如服务中间件Tomcat,消息中间件MQ等,这里主要讨论数据库中间件。

数据库平台需要解决以下三个问题:

  • 可以为各个服务提供高性能、大容量、高可用的数据访问
  • 满足增量数据的订阅与消费,比如缓存数据一致性的需求
  • 异地,异构数据源的同步


image.png | center | 614x389

整个数据库解决方案中,各个部分都有与之对应的中间件。

类别

分库分表

分库分表中间件主要负责与上层应用交互,屏蔽读写分离或者分库分表的底层实现细节,对开发人员透明,像操作单库单表一样去操作数据。分库分表中间件除了基本的分库分表功能,还可以提供读写分离、水平扩容等功能。
典型的分库分表中间件有两种设计方案:

  • 直接为应用提供依赖,如Java中引入Jar文件,使用特定代理数据源,内部管理多个普通数据源(c3p0、druid、dbcp等),每个数据源各自与不同的库建立连接。典型代表有网易的DDB和阿里的TDDL等。
  • 单独部署代理服务,应用层通过标准JDBC访问代理,代理服务根据数据库(如MySQL)的标准通信协议解析请求,再转发到集群中的各个分库分表。典型代表有阿里Cobar,Mycat(基于Cobar)等。

数据增量

关于数据增量订阅/消费通过一个应用场景来说明。

为了提高查询效率,应对高并发,通常会把热点数据放入缓存中(如从MySQL数据中查询出数据,载入到Redis),如果数据变更该如何通知Redis进行缓存更新?

  • 一般思路:更新数据时,先更新database,然后再更新redis。这样实现思路最简单,但是database与缓存操作耦合度很高,并且如何保证database与cache的数据一致性。


image.png | center | 419x225

  • 其他思路:在MySQL主从复制的实现方案中,Slave会读取Master的二进制日志文件(binlog),从而实现两者数据同步。同样的我们可以模拟一个Slave来订阅database的binlog,进而执行CURD操作,更新cache中数据。


image.png | center | 408x467

典型的中间件有阿里Canal(支持MySQL),Erosa(支持Oracle)等

数据同步

数据同步可以实现跨(同)机房同步以及异地容灾备份、分流等功能。可以涉及多种数据库,处理之后的数据也可以以多种形式存储。某种程度上,数据增量订阅/消费也可以看做是一种数据同步,典型的数据同步中间件有Otter,JingoBus,DRC等。

数据迁移

相同数据库之间的数据迁移较为简单,如MySQL主备同步,更改相应的配置即可,难点是异构数据库(甚至是不同数据源)之间的数据迁移。典型的中间件有yugong,DataX等。

参考资料

  1. 数据库相关中间件介绍
  2. 数据库中间件设计方案
  3. 缓存一致性和跨服务器查询的数据异构解决方案canal
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u013201439/article/details/81840860
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 15:39:20
  • 阅读 ( 996 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢