OneProxy是由原支付宝首席架构师楼方鑫开发,目前由楼方鑫创立的杭州平民软件公司(@平民架构)提供技术支持。目前已有多家公司在生成环境中使用,其中包括了支付、电商等行业。
OneProxy的主要功能有:
1. 垂直分库
2. 水平分表
3. Proxy集群
4. 读高可用
5. 读写分离(master不参与读)
6. 读写分离(master参与读)
7. 写高可用
8. 读写随机
OneProxy for MySQL是一款基于MySQL协议的数据库中间件,运行在应用程序和MySQL数据库之间,为应用程序提供智能透明的SQL路由和流量分析功能。可以帮助大家在不改变或只更改少量应用代码的情况下, 实现后端MySQL数据库的集群化布署,可以象使用网络交换机/路由器组建网络那样轻松组建分布式数据库集群,并通过流量实时分析,为上层的应用和底层的数据库集群提供丰富的性能监控功能。
OneProxy for MySQL可以让不同应用复用到后端数据库的连接,降低数据库的并发连接数;可以即时发现和踢除不可用的后端节点,将应用请求转发到其他可用节点实现高效故障隔离, 可配合Galera Cluster或MySQL Group Replication实现快速切换; 内置的守护进程模式和HA VIP机制,可以轻松实现Proxy的单机及多机高可用,确保业务服务的稳定性;可以透明地将查询语句分发到多个MySQL备库执行, 用读写分离方案支持上千万的并发访问;也可以根据SQL语句中的值进行分库分表路由, 将写操作均匀分散到多个MySQL主库上,以构建每秒百万TPS的MySQL集群; 跨多分片的结果集合并, 极大地简化了应用程序的开发工作量;在分片的情况下可根据分片并行执行SQL,解决了MySQL在大数据量下的汇总统计性能问题。
OneProxy for MySQL可以对访部请求进行安全检查,拒绝危险的DDL操作;可根据IP地址进行访问控制,只允许可信的IP地址进行访问;可以对每个SQL访问请求进行审核,实现SQL白名单机制, 彻底杜绝SQL注入式攻击;可以实现前后端密码分离,应用无须使用真实密码连接数据库,实现数据库密码的保护;可以分别设定前端应用和后端数据库的SQL请求频率,实现QoS控制; 可以通过正则表达式实现敏感数据过滤和审计,也可以在日志中记录大数据量的访问和更新操作,确保数据的安全。
OneProxy for MySQL可实时透明地分析流量,包括SQL语句和结果集,实时统计SQL和事务的运行时间,分析事务的SQL结构,得到各种不同维度的实时性能报告, 并可通过内置Web服务器方便直观地查看实时性能数据,弥补上层应用和MySQL实时性能监控方面的不足。使用C&C++开发,充分利用高性能的异步网络事件编程框架, 使单个OneProxy实例可支持高达40W的QPS/TPS;并可充分利用和管理内存,无Java类语言的内存回收问题,确保7x24的稳定性;内置的守护进程模式和HA VIP机制,可以轻松实现Proxy的多机高可用; 平民软件完全自主编写源代码,无外部代码和模块依赖,可以迅速分析和解决运行过程中的可能遇到的问题和故障。
超高性能
OneProxy for MySQL使用C&C++语言开发,充分发挥高性能的异步网络事件编程框架(libevent)优势,历经168小时的高压内存泄漏测试,做到零内存泄露,并使用jemalloc来优化内存分配,单个OneProxy实例可支持高达40W的QPS/TPS。
OneProxy for MySQL内置高效的SQL分析器,解析一条SQL的平均时间为100微秒,基本做到无时延的请求转发,无须担心代理层的性能和时延消耗;固定可调节的工作进程的模式,可以在任何机器上发挥优异的性能, 充分利用CPU和万兆网络资源,实现100万QPS转发。
在256个并发的情况下,和直连MySQL有同等的QPS能力,达到无损转发。使用透明连接池的功能,具备MySQL企业版连接池效果,提升后端数据库的处理能力,让应用无限扩容,无须担心后端MySQL连接数。
透明集群
OneProxy for MySQL可在协议层实现对应用透明的读写分离路由,实现读操作的无限扩展,并可实时监控主备之间的复制时延,并与MHA / PXC / MGR等多种高可用集群技术配合,实现实现应用对后端无感知的高可用。
OneProxy for MySQL可以透明分析SQL语句,根据Where条件中的值在协议层实现分库分表路由,实现写操作的灵活扩展,并实时监控后端数据库的运行状态,根据既定的集群策略进行故障切换,应用无须知道后端运行状态和节点规模。
OneProxy for MySQL支持跨分片的多结果集合操作,例如排序、汇总、分页等等,可让应用无须知道后端节点的规模数,实现对应用透明的扩容和缩容,搭建对应用透明的数据库集群。
安全审计
OneProxy for MySQL可以对不安全的登录和访问请求进实时拦截,可以根据SQL请求的类型进行灵活处理,比如禁止DDL语句、不允许数据删除命令等; 可以根据请求的IP地址进行拦截,对登录者身份进行额外的身份验证(基于不可逆的算法)。
OneProxy for MySQL完全接管应用的登录验证工作,可以实现前后端的密码分离,应用只配置登录OneProxy的密码,而真正登录数据库的密码只需配置在OneProxy上,以防止黑客从应用机器上获取密码。
OneProxy for MySQL可对每一个SQL请求进行实时检查和拦截,可以动态配置黑白SQL名单进行SQL特征检查,以杜绝SQL注入式攻击。通过丰富的实时访问统计数据,以及记录所有的SQL错误操作,可以快速发现试探性的黑客行为。
流量分析
OneProxy for MySQL可实时分析SQL和结果集的流量,与数据库后端的性能视图相比,OneProxy知道SQL语句的来源IP地址、会话及事务上下文,有更多的维度可展示数据,具有更强的结果呈现能力。
根据IP维度的统计,可以快速了解不同应用的数据库交互情况,包括应用访问具体表的情况、SQL执行信息、事务的性能数据,也可了解不同应用使用数据库的交集,实现数据架构的快速优化。
根据事务维度的统计,可以快速了解不同事务和数据库交互情况,包括事务的执行频率、总体执行时间、纯SQL的执行时间、DML操作所占的时间,高效进行性能优化,并可轻松分析事务之间的关联,推动业务数据模型的优化。
稳定可靠
OneProxy for MySQL历经168小时(数百亿次SQL)高压测试,并且对公众用户开放Binary进行试用,数百个用户使用同一个OneProxy版本进行丰富的业务场景验证,造就了OneProxy稳定可靠的品质。
OneProxy for MySQL内置高可用机制,即有实现进程级的重起机制,也有跨机器之间的HA/VIP机制(可实现三节点,用类Paxos机制实现多点选主),也可与Haproxy / LVS / Zookeeper配合实现多活架构,以确保OneProxy的高可用。
OneProxy for MySQL可与多种高可用架构(如MHA、 Percoan XTraDB Cluster、 MySQL Group Replication等)进行协同工作,实现故障的快速发现、隔离或切换,确保业务层稳定可靠。