1.sharding-jdbc



1.图示(集成的方式)


 


 

  2.特点(组件,适配语言)

   1)sharding-jdbc 作为一个组件集成在应用内

   2)集成在应用内,要集成到代码里,开发成本相对较高;

      需要针对不同语言(java、C、PHP……)有不同的实现

      事实上sharding-jdbc目前只支持java,这样组件

      本身的维护成本也会很高

 

  3.三大模块

    ShardingSphere-JDBC:

     定位:

      轻量级Java框架,在Java的JDBC层提供的额外服务。

      它使用客户端直连数据库,以jar包形式提供服务,

      无需额外部署和依赖,可理解为增强版的JDBC驱动,

      完全兼容JDBC和各种ORM框架

    场景:

    (1)适用于任何基于JDBC的ORM框架,

        如:JPA, Hibernate, Mybatis,

        Spring JDBC Template 或直接使用JDBC

    (2)支持任何第三方的数据库连接池,

        如:DBCP, C3P0, BoneCP, Druid, HikariCP等

    (3)支持任意实现JDBC规范的数据库,

        目前支持MySQL,Oracle,SQLServer,PostgreSQL

        以及任何遵循SQL92标准的数据库

 

   ShardingSphere-Proxy:

     定位:

       透明化的数据库代理端,

       提供封装了数据库二进制协议的服务端版本,

       用于完成对异构语言的支持。

       目前提供MySQL和PostgreSQL版本,

       它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端

       如:MySQL Command Client, MySQL Workbench, Navicat等

       操作数据,对DBA更加友好

    优点:

    (1)向应用程序完全透明,可直接当做

        MySQL/PostgreSQL 服务端使用

    (2)适用于任何兼容 MySQL/PostgreSQL

        协议的的客户端

   ShardingSphere-Sidecar(TODO):

      定位:

       为Kubernetes的云原生数据库代理,

       以Sidecar的形式代理所有对数据库的访问。

       通过无中心、零侵入的方案提供与数据库交互的的啮合层,

       即​​Database Mesh​​,又可称数据库网格

 

       Database Mesh 的关注重点在于如何将分布式的数据

       访问应用与数据库有机串联起来,它更加关注的是交互,

       是将杂乱无章的应用与数据库之间的交互进行有效地梳理。

       使用Database Mesh,访问数据库的应用和数据库终将形成

       一个巨大的网格体系,应用和数据库只需在网格体系中对号

       入座即可,它们都是被啮合层所治理的对象

       数据库中间件:sharding-jdbc,mycat,DRDS_html

 

 


 

2.mycat



1.图示(服务器的方式)


 


   2.作用(数据库代理)

     mycat支持SQL92标准,遵守Mysql原生协议,

     跨语言,跨平台,跨数据库的通用中间件代理

  

  3.特点

    需要单独部署,不支持二维路由,仅支持单库多表或多库单表

    自身维护有连接池,需要根据业务设置,否则容易抛出异常

    mycat以逻辑表的形式屏蔽掉应用处理分库分表的复杂逻辑,

    遵守Mysql原生协议,跨语言,跨平台,有着更为通用的应用场景

    


 

3.DRDS(mycat商业产品化)



1.介绍
DRDS兼容MySQL 协议和语法,
支持分库分表、平滑扩容、服务升降配、
透明读写分离和分布式事务等特性,
具备分布式数据库全生命周期的运维管控能力
drds不是一个简单的做sharding路由,
即使原来使用的是rds,也无法通过drds做路由,
唯一的办法新建drds实例,定义路由规则(
drds支持二维路由),导入历史数据

2.图示(读写分离的例子)

   数据库中间件:sharding-jdbc,mycat,DRDS_数据库_02