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

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

oneproxypg_key_features_zh

OneProxy运行成应用和数据库之间,通过分析每一个通信包来进行智能路由工作,可以根据操作类型和表名进行路由选择,也可以根据Where条件中的列值进行更高级的智能转发。从应用层来看OneProxy就是一台PostgreSQL服务器,后端真实的PostgreSQL服务对应用不可见,所有的SQL语句都经由OneProxy透明地转发到后端的PostgreSQL数据库,应用和后端之间没有直接交互。

OneProxy可以运行在公有云主机和私有云主机上,并可以自由迁移,可参考迈出OneProxy的第一步进行安装。更多的功能介绍将在下面一一介绍:

  1. 透明连接池,OneProxy完全接管应用的登录过程,OneProxy到后端的连接池可以被不同的请求、不同的语言、不同的系统所共享,从而有效地控制后端PostgreSQL数据库的并发连接数。
  2. 自动故障切换,OneProxy可以根据指定的策略,将查询请求路由到其他存活的节点。一个后端节点的不可用,只要应用到OneProxy的连接不中断,将对应用完全透明。
  3. 透明读写分离,OneProxy可以识别请求中的读和写操作,并根据当前连接的事务上下文,将读的操作透明地路由到多个备上去执行进行分流,只有写操作作落入主库,从而大大减轻主库的压力。实现这样的架构改造并不需要修改应用代码。
  4. 水平分库分表,OneProxy的SQL解析模块可以在100微秒内解释出SQL中的表名和Where条件中的列值,从而可以根据表名或关键列值进行智能路由,并且对应用十分透明,只需要在OneProxy中配置哪些表需要分片,及分片的条件;并且支持DDL操作,可以一次性对表结构进行维护。
  5. 结果集合并,当一个查询语句涉及多个分片时,OneProxy可以对多个结果集进行合并操作,并且支持排序、分组汇总、分页这样的复杂操作,可以减轻应用层代码研发投入。
  6. 并行查询支持,当一个查询涉及多个分片时,OneProxy还可以并行执行,可以在PostgreSQL中轻松统计上亿条记录的大表,只需要在SQL中添加一个并行执行的注释。
  7. 安全控制和审计,在OneProxy中可以禁止DDL语句或DML语句,还可以禁止没有Where条件的更询或更新语句,并可以记录每一个从应用发过来的SQL请求。
  8. SQL防火墙,可以开启IP地址白名单,只允许指定的应用客户来连接;还可以启用SQL白名单,以防止SQL注入攻击;也可以启用基于IP地址的流量限制,以防止单个IP过来的过多查询请求;将IP地址注释到SQL语句中可以轻松地在PostgreSQL端进行慢查询跟踪。
  9. 性能统计信息,所有的流量都经过OneProxy,因此可以很方便地进行性能数据采集,可以按SQL语句、按表名、按客户端IP地址等多个不同维度进行实时汇总;你可以使用PostgreSQL客户端工具来访问这些性能数据。
  10. 高可用机制,可以让OneProxy永不停机,守护进程可以防止进程级的不可用,当一个进程出现意外时,会在一秒内再启动一个,只要应用能够重连就不会有大的可用率问题;也可以配置双机或三机做HA以防止主机级的故障,或者布署多台机器使用F5对OneProxy做多点负载均衡。
  11. 分布式Sequence,OneProxy内置分布式的Sequence生成机制(类似于Oracle中Sequence对象的工作机制),非常适合用来生成分库分表下的主键值,并且性能非常优越,单个OneProxy实例每秒种可以生成上百万个唯一值,完全的分布式无单点的先进架构。
  12. SQL关联度分析,作为一名数据库架构师,或者接入一个新的应用时,需要了解表与表之间的关系(比如哪几张表常常出现在同一个事务中,或者出现在同一个查询中),以及每个表的访问量,就会对数据库的访问特征有很好的了解,从而能轻松胜任架构分析工作,参考对Zabbix应用的分析

OneProxy目前有大大小小20多个客户和用户在生产环境上布署运行,每个用户分别测重不同的功能点,连接池、读写分离和分库分表是大家都关心的点。

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