xSkyProxy

xSkyProxy是一个简单易用的MYSQL代理程序,使用C++开发, 提供mysql数据分库分表,连接池,主从读写分离等功能。 xSkyProxy 开源社区群 302102856 xSkyProxy 开源社区群

xSkyProxy是什么?

xSkyProxy 是一个处于你的client端和MySQL server端之间的简单程序,实现了MYSQL客户端和服务器协议.它可以监测、分析或改变它们的通信。程序完全C++开发,单线程事件驱动; 主要功能包括:负载平衡,故障、查询分析,查询过滤和SQL路由和SQL改写等等。

简单的说,xSkyProxy 就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且按照用户自定义配置的分库分表规则, 可以实现复杂的SQL路由,达到数据分库分表存储的目的; 同时也能根据用户MYSQL主从库配置信息,对读写SQL自动识别与路由, 从而实现读写分离和负载平衡。

对于应用来说,xSkyProxy 是完全透明的,应用则只需要连接到 xSkyProxy 的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

功能与特性

  • 0.C++开发,异步事件驱动,跨平台(支持LINUX,WINDOWS), 不基于MySQLProxy代码.
  • 1.可以多模式运行:做为Mysql分库分表中间件或是MYSQL数据代理转发.
  • 2.可以按自定义规则分库分表,支持从外部载入分库分表规则模块.
  • 3.支持自动读写分离, 支持MySQL一主多从的模式.
  • 4.负载均衡.
  • 5.支持到每个分片库的连接池.
  • 6.支持多用户账号不同账号密码登陆.
  • 7.强大的WEB后台管理,可以通过后台在线热更新各种配置,添加/删除DB节点等; 附带在线通过MYSQL命令访问各个节点数据库等 .

xSkyProxy 的 Sharding 架构


xSkyProxy 中的分库分表概念

在 xSkyProxy 中,一个表可以分库后存储在多个mysqlDB中,每个DB中可以包含多个mysql数据表; mysql数据表是数据存储的单位, 一个表的路由是由 database_index和tabname_index 组成, 。 共同组成表的路径:database_index.tabname_index。 一个逻辑表可以分片到多个database里, 每个database里有一个或是多个分表; 这些分片的database可以存储在一个或是多个MYSQL实例里,每个database可以配置多个slave服务器。


xSkyProxy数据切分策略

xSkyProxy 数据切分支持内置部分分库分表算法,也支持从外部加载用户自定义的分库分表算法。

xSkyProxy内置的分库分表算法

内部自带的分库分表算法如下:

1. 单库分表算法
     设计思想:根据分表KEY(认为KEY值为整数)按总表数取模
     tbi = key % 总表数

2. 多库多表二维数组分库分表算法
     设计思想:根据分表KEY分别计算库表的二维索引值
     dbi = (key & (库数 * 表数 - 1)) / 表数;
     tbi = (key & (库数 * 表数 - 1)) & (表数 - 1);

3. 多库多表按范围分库分表算法
     多库多表按范围分库分表算法
     设计思想:根据分表KEY(认为KEY值为整数)按总表数取模
     dbi = key / (单库总表数*单表容量 )
     tbi = key / 单表容量

4. 多库多表按日期范围分库分表算法
     设计思想:每年一个库,包含本年所有的表,每月一个表。
     dbi = 年
     tbi = 月

5. 多库多表按日期范围分库分表算法
     设计思想:每年一个库,包含本年所有的表,每天一个表。
     dbi = 年
     tbi = 天

6.  多库多表按日期范围分库分表算法
     设计思想:每月一个库,包含本月所有的表,每天一个表。
     dbi = 月
     tbi = 天

xSkyProxy中MYSQL语句与语法的有限支持

xSkyProxy 对于配置有分库分表规则的数据库只支持DML语句 select/delete/update/insert/replace 语句;
对于没有分库分表的库表,xSkyProxy工作在数据转发模式,支持DDL.

xSkyProxy中关于事务与JOIN的支持

xSkyProxy 目前不支持分布式事务。因为数据被分库分表的原因,如果需要事务功能,只能支持数据都在同一个库里的事务。 此需求可以对数据都在同一个库里时用存储过程里采用事务实现。

当分库表与未分库表在同一个MYSQL实例里时,支持JOIN语法; 不支持跨节点的JOIN.

xSkyProxy 中数据库的节点扩展与负载均衡

xSkyProxy 的分库分表功能支持数据分布在同一个库的多个表里,也支持分布在多个库的多个表里;采用分库的方式在数据量大时可以很容易的做到迁移数据降低负载,只需要把分库迁移到新的MYSQL实例上,同时修改连接表里对应新库对应的主机连接信息。

xSkyProxy 管理后台与性能监控

xSkyProxy 提供强大web后台对配置信息进行管理,后台也可以查看 xSkyProxy进程内部的连接状态与统计信息。
并附带MYSQL命令行shell,可以通过xSkyProxy直接在后端节点执行SQL命令。