OneProxy :: 基于客户端IP地址的流量控制功能,可以有效保护后端MySQL数据库!

最近发布的OneProxy 5.8.2版本支持基于客户端IP地址的流量控制,并且此功能完全对应用透明,不需要更改任何应用代码就可以实施上线,可以用来防止单个客户端IP地址过来的请求压跨数据库,从而有效地保护应用。当某个客户端每秒的请求数超过设定值后,OneProxy就会返回客户端如下的错误信息,过去曾经将这样的功能做在应用程序端,现在数据库的中间件里实现起来,综合成本和效果更佳。

mysql> select user();
+--------------------+
| user()             |
+--------------------+
| test@192.168.1.119 |
+--------------------+
1 row in set (0.00 sec)

mysql> select user();
ERROR 1149 (42000): execute frequency out of QoS limit in OneProxy.
mysql> select user();
ERROR 1149 (42000): execute frequency out of QoS limit in OneProxy.
mysql> select user();
+--------------------+
| user()             |
+--------------------+
| test@192.168.1.119 |
+--------------------+
1 row in set (0.00 sec)

默认情况下,基于客户端的流量控制(简称QoS限流)功能并未被打开,默认的值是0,表示不启用。可以在OneProxy的管理端口中用“SET IPQOS ‘<ipaddress>’ 限流值”来开启此功能。

mysql> set ipqos '192.168.1.143' 1;
Query OK, 0 rows affected (0.00 sec)

为了实现QoS功能,OneProxy实时统计了每个客户端最近10秒钟里每秒的请求数,在管理端口中可以使用“LIST IPQOS”命令来查看。

mysql> list ipqos;
+---------------+------+-------+-------+-------+------+------+-------+-------+-------+-------+-------+
| ADDRESS       | QoS  | T01   | T02   | T03   | T04  | T05  | T06   | T07   | T08   | T09   | T10   |
+---------------+------+-------+-------+-------+------+------+-------+-------+-------+-------+-------+
| 192.168.1.120 |    0 |     0 |     0 |     0 |    0 |    0 |     0 |     0 |     0 |     0 |     0 |
| 192.168.1.143 |    1 |     0 |     0 |     0 |    0 |    0 |     0 |     0 |     0 |     0 |     0 |
| 192.168.1.119 |    0 | 20844 | 20882 | 20899 | 4835 |    0 | 21351 | 20763 | 21055 | 20881 | 21358 |
| 127.0.0.1     |    0 |     2 |     2 |     2 |    1 |    0 |     2 |     2 |     2 |     2 |     2 |
+---------------+------+-------+-------+-------+------+------+-------+-------+-------+-------+-------+
4 rows in set (0.00 sec)

如果已经开启了一个事务,事务中的SQL不会受到限流功能的管制,平民软件认为过长的事务对数据库是有伤害的,因此不对事务中的SQL语句限流。在当前事务结束后,开启下一个事务时就会受到QoS的管制。通过增加各种对应用透明的功能,OneProxy正在成为大家都会很喜欢的数据库负载均衡解决方案。