调研了下面8家数据库代理
- 1.Oracle/mysql-router,前身是mysql-proxy
(支持元数据动态修改,会实时同步命令到所有mysql上, 同时自身存储元数据状态)
官方对元数据的描述: https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-general-metadata.html
- 2.京东数科/shardingsphere
(支持元数据动态修改, 文件+内存+第三方(etcd,nacos,zk,Apollo等))
官方对元数据的描述: https://shardingsphere.apache.org/document/current/cn/features/orchestration/config-center/
- 3.sysown/proxysql
(支持元数据动态修改, 文件+内存+SQLite3)
官方对元数据的描述: https://github.com/sysown/proxysql/wiki/Global-variables
- 4.奇虎360/Atlas
(奇虎360基于mysql官方mysql-proxy二次开发)
- 5.flike/kingshard
(支持元数据动态修改, 文件+内存)
官方对元数据的描述: https://github.com/flike/kingshard/blob/master/doc/KingDoc/admin_command_introduce.md
- 6.阿里巴巴/cobar
(不支持元数据,事务和字符集设置语句除外)
官方对元数据的描述: https://github.com/alibaba/cobar/wiki/%E4%BD%BF%E7%94%A8%E7%BA%A6%E6%9D%9F
Cobar - Alibaba Open Sesame.pdf
- 7.overview/vitess
(支持元数据动态修改, etcd)
官方对元数据的描述: https://vitess.io/zh/docs/overview/architecture/
- 8.siddontang/mixer
(不支持元数据,事务和字符集设置语句除外)
官方对元数据的描述: https://github.com/siddontang/mixer
总结
-
元数据结构 {type, key, value}. 注:值可以为json.
-
元数据的数据(代理的普通用户账号, 代理的状态信息, 前端的状态信息,后端的状态信息, 以及统计信息)
-
元数据的生命周期. session, global(本地持久化,本地内存, 第三方存储)
-
用户可以通过sql或UI或API去操作元数据,实时的修改状态,账号密码,以及代理的路由逻辑等。
比如:
admin> select @@mysql-query_processor_regex;
admin> set @@mysql-query_processor_regex='^select .* test1.*';
admin> select * from stats_mysql_query_rules;
+---------+------+
| rule_id | hits |
+---------+------+
| 1 | 1 |
| 2 | 1 |
+---------+------+