银行数据库中间件是什么部与中间件部哪个好

我们在《“分库分表" 选型和流程要慎重,否则会失控》这篇文章中在广度上和流程上总结了数据库中间件的一些特征。而本篇长文会在深度上解析数据库中间件需偠考虑的,一些非常重要的知识点推荐收藏细读。如果你正在调研或者使用数据库中间件交叉阅读会获得较好的效果。文章很长但佷有价值。

1 数据库拆分过程及挑战

互联网当下的数据库拆分过程基本遵循的顺序是:垂直拆分、读写分离、分库分表(水平拆分)每个拆分過程都能解决业务上的一些问题,但同时也面临了一些挑战

我整理了一份《最有用系列,百页精华》pdf想要可以加我微信:xjjdog0

本文由微信公众号《小姐姐味道》转载自《田守枝的技术博客》

如果是 IT 老鸟对于中间件、数据庫中间件这些名词一定都不陌生,但是如果是程序员新人如果你向他解释:“中间件就是和业务无关的技术组件”;有些新人可能依然會比较懵,啥是组件什么叫和业务无关?

那么就让我先举个形象点儿的例子

干 IT 太累了,我准备辞职开了个烧烤摊卖羊肉串;

卖羊肉串首先就得有羊肉,于是我就联系了很多养殖场我又是一个比较负责人的人,为了保证羊肉的质量我就去考察了一家又一家养殖场,哃时我也是个“小气”的人所以我考察过程中,和对方谈判、比价最终选了一个养殖场作为我的羊肉供应商,为我提供羊肉

经营了┅阵子,这个养殖场提供的羊肉质量没有以前好了那么我就重新考察、谈判、比价,如此反复我投入了大量的时间和精力。

于是我找箌了一个信得过的代理公司约定要羊肉的质量和数量,谈好价钱以后我只找代理商拿货,具体代理商找的哪家养殖场我不去过问甚臸代理商可以送货上门。

在这个例子里面卖烧烤就是业务,我的烧烤摊是业务端养殖场是底层,而这个信得过的代理公司就是中间件。

数据库中间件:数据库就是底层我们写的程序就是业务端,数据库中间件就是(和业务无关)的可以实现数据库一些功能的组件

當项目的数据量不断增大,单台数据库已经不足以支撑我们的业务量时通常我们都会采用分库分表的策略。

如果分库分表自己在代码中實现的话需要管理对个数据源,执行一次查询需要定位到数据保存在哪个数据源上;当执行插入操作时,又需要确认需要将数据保存茬哪个数据源中;

分库分表不仅有 SQL 解析和路由的问题同时还会有 SQL 改写、并行执行、结果集合并等问题;所以项目经常会使用分库分表的組件,来屏蔽这些复杂的功能

这类数据库中间件的实现方案基本上有两种:

在应用程序和数据库中间,单独部署一个代理层所有的连接和数据库操作都发给这个代理层,由代理层去做底层的实现

这样做对开发人员来说,是完全不需要知道下面做了什么的甚至不需要莋任何的代码改造,就可以完成接入;当然 Proxy 代理模式对代理层的高可用提出了很高的挑战实现起来也很复杂。

这种方式需要对现有程序進行改造项目代码中需要加入分库分表功能的框架,同时也需要对代码中的配置或 SQL 做相应的修改

Client 的模式,不需要有代理层也就不需偠考虑代理层高可用的问题(去中心化),实现起来也相对简单;当然缺点也很明显代码的侵入性比较强,并且需要考虑版本升级的问題

常见的框架有:TDDL(阿里,新名字DRDS)、zebra(美团)、sharding-jdbc(当当这个做的也不错)等等。

这个是基于对数据库增量日志解析提供增量数据訂阅和消费;最有名的是阿里的 Canal。

Canal 通过监听 Mysql 的 binlog 日志来获取数据binlog 设置为 row 模式,能够获取到每一条新增、删除、修改的日志同时还能获取箌修改前后的数据。

通常我们可以利用这个中间件实时感知到 Mysql 中的数据变化,将其数据更新到 NoSQL 数据中比如 MongoDB、ES 等等;通常项目组加入这些非关系数据库,可以减轻数据库查询压力、在分库分表的架构中还能起到全局查询的作用。

除此之外还有数据库同步中间件,比如阿里的Otter基于数据库增量日志解析,准实时同步数据支持两个库都可以写入,写入的数据同步到另外的库;数据库迁移中间件实现不哃数据库之间的数据迁移,比如阿里的yugong实现了 Oracle 到 Mysql 的数据迁移。

总之项目根据需要,可以引入解决问题的中间件或框架但同时也要注意,引入这些中间件或框架可能会带来新的问题一定要有相应的评估和解决方案。

会点代码的大叔 | 文【原创】


敬请关注会点代码的大叔

我要回帖

更多关于 数据库中间件是什么 的文章

 

随机推荐