Java主流数据库连接池优劣及未来( 二 )


阿飞做了如下统计工作,都是基于最新tag统计的,只统计java文件和xml文件,druid(alibaba-druid)总行数:430289,HikariCP(brettwooldridge-HikariCP)总行数:18372 。
只统计java代码,druid(alibaba-druid)总行数:428749,HikariCP(brettwooldridge-HikariCP)总行数:17556 。
再过滤一下test目录,(alibaba-druid)总行数:215232,(brettwooldridge-HikariCP)总行数:7960 。
光一个DruidDataSource就3000行,且不说性能,druid是在jdbc的基础上,自己编码做得增强 。
【Java主流数据库连接池优劣及未来】如果这么说,druid准确的说是生活在第一代和第二代连接池的面向过程的年代 。druid可能忘了松耦合这个概念,把监控和数据库连接池做在一个项目里,本身就是紧耦合 。既然微服务提倡业务隔离性,那么这种难道不应该隔离么?让组件工具一次只做一件事不好么?监控的事情在service mesh的将来毕竟是有别的其天然的监控手法的而不是硬编码在一个小小的连接池里 。综上所述,放在现在或是未来的趋势去拼,大概率比不过拥抱springboot 2.0以及大道至简精简到极致的HikariCP 。
未来的中间件,一定是和spring生态圈和servich mesh一样,大道至简,越来越薄,升级中间件不再是需要用户强行升级maven依赖解决依赖冲突,而是通过mesh的方式极致到升级让业务方无感知 。所以那些热部署、潘多拉boot、容器隔离等解决依赖冲突的妥协方式也将可能大概率被置换掉 。
从Sharding-jdbc架构演进看未来Database Mesh,一个搭乘 Service Mesh 浪潮衍生出来的新兴词汇 。顾名思义,Database Mesh 使用一个啮合层,将散落在系统各个角落中的数据库统一治理起来 。通过啮合层集中在一起的应用与数据库之间的交互网络,就像蜘蛛网一样复杂而有序 。它的首要目标并非啮合存储于数据库中的数据,而是啮合应用与数据库间的交互 。
Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互有效的梳理 。
使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象 。
Sharding-JDBC 一直以来,以 JDBC 层分片作为其核心理念 。它的架构图如下:

Java主流数据库连接池优劣及未来

文章插图
 
Sharding-JDBC 将分别实现 Driver、Server 以及 Sidecar 这三个不同的版本,一起组成 Sharding-JDBC 的生态圈,为不同的需求与环境提供更加具有针对性的差异化服务 。
Java主流数据库连接池优劣及未来

文章插图
 
由于 Sharding-JDBC-Server 的出现,使得原来 DBA 通过 Sharding-JDBC-Driver 无法对数据进行操作的缺憾得到了补偿 。由于 Sharding-JDBC-Driver 无需通过代理层进行二次转发,因此线上性能更佳,可以通过以下的混合部署方案使用 Sharding-JDBC:
Java主流数据库连接池优劣及未来

文章插图
 
线上应用使用 Sharding-JDBC-Driver 直连数据库以获取最优性能,使用 MySQL 命令行或 UI 客户端连接 Sharding-JDBC-Server 方便的查询数据和执行各种 DDL 语句 。它们使用同一个注册中心集群,通过管理端配置注册中心中的数据,即可由注册中心自动将配置变更推送至 Driver 和 Server 应用 。若数据库拆分的过多而导致连接数会暴涨,则可以考虑直接在线上使用 Sharding-JDBC-Server,以达到有效控制连接数的目的 。
在不久的将来,Sharding-JDBC-Sidecar 也将问世,它的部署架构是这样的:
Java主流数据库连接池优劣及未来

文章插图
 
基于 Sharding-JDBC 的 Database Mesh 与 Service Mesh 互不干扰,相得益彰 。服务之间的交互由 Service Mesh Sidecar 接管,基于 SQL 的数据库访问由 Sharding-JDBC-Sidecar 接管 。
对于业务应用来说,无论是 RPC 还是对数据库的访问,都无需关注其真实的物理部署结构,做到真正的零侵入 。由于 Sharding-JDBC-Sidecar 是随着宿主机的生命周期创建和消亡的,
因此,它并非静态 IP,而是完全动态和弹性的存在,整个系统中并无任何中心节点的存在 。对于数据运维等操作,仍然可以通过启动一个 Sharding-JDBC-Server 的进程作为静态 IP 的入口,通过各种命令行或 UI 客户端进行操作 。
参考来源:https://mp.weixin.qq.com/s/aBeX307FI6vnw_DatqjC0g




推荐阅读