OneProxy,集连接池、负载均衡、分库分表、SQL防火墙等功能于一身的数据库中间件!

MySQL版本的OneProxy是一款基于协议的数据库中间件,运行在应用程序和数据库中间,为应用程序提供智能的SQL路由功能,使用C语言研发使得它相对于其他的同类产品有非常强的性能和稳定性优势。协议兼容的OneProxy可以用来作为数据库上层的统一连接池;通过分析协议包里的SQL语句还可以提供透明的负载均衡、读写分离、故障切换等功能;也可以根据SQL里的表名和字段值来做分库分表的路由访问,帮助你轻松搭建分布式MySQL集群;还可以根据IP地址和SQL白名单对非法的数据库访问进行拦截。OneProxy是基于数据库协议的交换机、路由器、防火墙,可以让你轻松地玩转数据库集群。

oneproxy_architecture

OneProxy运行成应用和数据库之间,通过分析每一个通信包来进行智能路由工作,可以根据操作类型和表名进行路由选择,也可以根据Where条件中的列值进行更高级的智能转发。从应用层来看OneProxy就是一台MySQL服务器,后端真实的MySQL服务对应用不可见,所有的SQL语句都经由OneProxy透明地转发到后端的MySQL数据库,应用和后端之间没有直接交互。OneProxy可以运行在公有云主机和私有云主机上,并可以自由迁移,可参考迈出OneProxy的第一步进行安装。与其他同类产品(基于开源的变种)或开源项目相比,除在功能上的区别外,具有如下综合优势

  • OneProxy在参数配置方面充分考虑了运维的简洁性(参考读写分离配置步骤),不需要Java或其他动态脚本语言(如Groovy等)来配置分片规则,更加方便SA或DBA做好OneProxy的运行维护工作。
  • 在系统稳定性方面极具优势,使用C&C++语言让它可充分管理好内存使用,无内存回收(GC)问题,做聚合运算时也没有Java类中间件的内存放大问题。并且更加节约CPU资源,同等QPS下要比Java类中间件要低40%的CPU利用率。
  • 所有用户使用一个版本,不存在个别用户的定制版本,所有用户的需求或反馈让软件更加稳定和完善,避免开源项目各个用户重复踩坑问题,并保证不同版本之间的平滑升级。
  • 商业化运作保证软件质量,百分之百的代码掌控力,可以更加迅速地定位和解决问题,并且有更多的资源去投入后续功能的研发,以及有专门的技术支持人员帮你解决可能遇到的问题。

更多的功能介绍将在下面一一介绍:

  1. 透明连接池,OneProxy完全接管应用的登录过程,OneProxy到后端的连接池可以被不同的请求、不同的语言、不同的系统所共享,从而有效地控制后端MySQL数据库的并发连接数(需在编程或接入时注意一些不兼容的SQL编程习惯),并可起到线程池(Thread Pool)的功效。
  2. 自动故障切换,OneProxy可以根据指定的策略,将查询请求路由到其他存活的节点。一个后端节点的不可用,只要应用到OneProxy的连接不中断,将对应用完全透明。
  3. 透明读写分离,OneProxy可以识别请求中的读和写操作,并根据当前连接的事务上下文,将读的操作透明地路由到多个备上去执行进行分流,只有写操作作落入主库,从而大大减轻主库的压力。实现这样的架构改造并不需要修改应用代码,可根据后端“Read Only”设置自动识别主从节点,并可自动踢除时延过久的从库
  4. 水平分库分表,OneProxy的SQL解析模块可以在100微秒内解释出SQL中的表名和Where条件中的列值,从而可以根据表名或关键列值进行智能路由,并且对应用十分透明,只需要在OneProxy中配置哪些表需要分片,及分片的条件;并且支持DDL操作,可以一次性对表结构进行维护。
  5. 结果集合并,当一个查询语句涉及多个分片时,OneProxy可以对多个结果集进行合并操作,并且支持排序、分组汇总、分页这样的复杂操作,可以减轻应用层代码研发投入。
  6. 并行查询支持,当一个查询涉及多个分片时(也可通过视图将大表虚拟成Sharding表),OneProxy还可以并行执行,可以在MySQL中轻松统计上亿条记录的大表,只需要在SQL中添加一个并行执行的注释。
  7. 安全控制和SQL审计,在OneProxy中可以禁止DDL语句或DML语句,还可以禁止没有Where条件的更询或更新语句,并可以记录每一个从应用发过来的SQL请求,或者执行出错的SQL语句;或者结果集超过一定大小的SQL语句,包括查询的结果集或更新操作影响的行数,以便于协助发现拖库现象。
  8. SQL防火墙,可以开启IP地址白名单,只允许指定的应用客户来连接;还可以启用SQL白名单,以防止SQL注入攻击;也可以启用基于IP地址的流量限制,以防止单个IP过来的过多查询请求;将IP地址注释到SQL语句中可以轻松地在MySQL端进行慢查询跟踪。
  9. 性能统计信息,所有的流量都经过OneProxy,因此可以很方便地进行性能数据采集,可以按SQL语句、按表名、按客户端IP地址等多个不同维度进行实时汇总;你可以使用MySQL客户端工具来访问这些性能数据,或者打开内置HTTP Server直接访问(在线演示)。
  10. 高可用机制,可以让OneProxy永不停机,守护进程可以防止进程级的不可用,当一个进程出现意外时,会在一秒内再启动一个,只要应用能够重连就不会有大的可用率问题;也可以配置双机或三机做HA以防止主机级的故障,或者布署多台机器使用F5对OneProxy做多点负载均衡。
  11. 分布式Sequence,OneProxy内置分布式的Sequence生成机制(类似于Oracle中Sequence对象的工作机制),非常适合用来生成分库分表下的主键值,并且性能非常优越,单个OneProxy实例每秒种可以生成上百万个唯一值,完全的分布式无单点的先进架构。
  12. SQL关联度分析,作为一名数据库架构师,或者接入一个新的应用时,需要了解表与表之间的关系(比如哪几张表常常出现在同一个事务中,或者出现在同一个查询中),以及每个表的访问量,就会对数据库的访问特征有很好的了解,从而能轻松胜任架构分析工作,参考对Zabbix应用的分析
  13. 事务监控,可在OneProxy中以事务为单位记录性能数据(包括事务的SQL结构),从而分析应用API的性能,并可以在SQL出错时打印事务的SQL堆栈
  14. 敏感数据识别,可在OneProxy中定义敏感数据(比如身份证号、手机号、银行卡号、邮件地址等)的正则表达式,可以识别出哪些SQL涉及了敏感数据,也可以实时监控到哪些客户端在访问敏感数据。
  15. 大数据分析,可以与Spark-SQL轻松集成,进行大数据分析(运行复杂的SQL语句)和机器学习分析,用OneProxy搭建分布式MySQL集群,有足够强的吞吐能力,和Hadoop/HBase一样可以作为Spark稳定的外部数据源。
  16. MyCAT分片兼容,OneProxy灵活的数据分片机制(Range/Hash/List),使得只需要增加对应的Hash函数,就可以兼容开源中间件的数据分布算法,实现无数据迁移的中间件切换。
  17. 多种集群策略,为Percona XtraDB Cluster/MySQL Group Replication集群预设多种集群专用SQL路由策略,无须应用程序更改代码。
  18. 支持图形客户端,OneProxy支持Navicat/SQLlog等图形客户端连接和操作,无须更换日常使用工具,不影响用户使用习惯。

OneProxy是商业软件,目前有大大小小数百个客户和用户在生产环境的上千台机器上布署运行,每个用户分别测重不同的功能点,连接池、读写分离和分库分表是大家都关心的点。针对PostgreSQL数据库的OneProxy也已经正式发布可以使用了。

因为所有的流量都经过OneProxy,所以它比较消耗CPU资源和网络资源,应当选择频率相对较高的CPU,一颗多核的Intel® Xeon® Processor E5-2697 v3应当可以支持每秒50万查询请求,并且最好使用万兆网络,可参考高性能OneProxy注意事项