实际项目中,读写分离,失败重连,负载均衡,连接池等功能往往写在应用中,不仅干扰了实际应用的代码,还使应用出错的机会大大增加。
在应用中为数据库开发的上述功能,重用性较低,换成另外的项目或开发环境基本上就不能使用或者需要修改原来运用的代码,使得应用代码耦合了数据库封装的API。
为了为应用提供独立透明的高性能服务并尽可能保证代码的通用性以及减少代码的变动代价、提高运维效率,开发了中间件。

1.1 为什么不是DBproxy、Mysql proxy
通过上面的介绍读者可能会发现mysql proxy、DBproxy似乎也能实现这些功能,为什么使用ProxySQL,原因如下:
1、DBproxy是在奇虎360Atlas开发,功能源于mysql proxy;ProxySQL拓展性高、使用灵活、自动故障感知、处理能力较强
2、可少维护mysql上的vip,功能多、包含dbproxy功能
3、dbproxy在sql支持方面限制多,如使用业务改造点可能较多、代价大
4、2017年后dbproxy未出新版本,技术支持较弱;ProxySQL不停迭代更新
1.2
ProxySQL的角色
ProxySQL 位于Application与数据库之间,为应用提供透明的代理服务。
ProxySQL 对外接口采用
mysql protocol,没有定义自己的协议和接口,使得任何mysql的应用都能方便的使用ProxySQL。
ProxySQL 没有Build 任何 SQL语句,而是直接接收client的SQL、命令等进行代理转发, ProxySQL 采用 SQL、命令等 mysql protocol规范作为统一的接口,完备性得到了保证,能够完成mysql的所有功能操作。
1.3 定位
数据库中间层:简化应用程序实现高可用的代价、屏蔽DB集群的内部结构,消除集群调整对应用的影响、收敛入口,统一管理




