ProxySQL在这篇文章中,我们将看看如何使用ProxySQL来帮助处理ping的数据库负载。

我以前在博客中写道我们定期的客户之一,Life360。他们最近的一个问题是PING命令以每秒30% -40%的总查询在数据库基础设施。这是一个非平凡的数量和很容易成千上万的ping每秒。这增加了大量的延迟真正的查询。

大量ping是由于使用PHP的PDO持久连接。持久性或池,有必要减少时间连接,断开和重新连接。

不幸的是,在PHP(和其他)实现,司机检查数据库是否还活着,萍在发送实际的命令。逻辑上来讲,你可以使用实际的命令PING,如果失败可能返回相同的错误会如果萍自己失败了。施瓦兹男爵有很多关于如何明智使用PING在司机吗

除非修改PHP PDO,我们想出了另一个解决方案:ProxySQL。

测试ProxySQL之前,我们不知道有多少被转发到实际的主机(包括这些com_admin命令)。我们想测试快速PoC发现ProxySQL的实际行为是对这些命令。我们有两个假设我们想检查:

  1. ProxySQL前锋的一切包括com_commands
  2. ProxySQL响应com_commands本身

如果ProxySQL转发一切,我们建立了一个“诱饵”MySQL实例响应ping使用ProxySQL查询过滤。结果,我们发现ProxySQL迅速无声的回复ping,不前进到底层数据库服务器的后端。这是其他命令的情况,作为货运代理ProxySQL并非严格(但更多的反向代理)。

通过将ProxySQL应用服务器,Life360能够显著降低每秒。引入ProxySQL的另一个优点是,它是连接池和多路复用。

这是图com_ping当天部署:

ProxySQL

总的来说,我们谈论的是每天数亿ping到0。

我们可以看到,香草安装ProxySQL也极大的降低了活动线程:

ProxySQL

这种变化使得Life360推迟他们的一些扩展计划和提供其他的运营收益。

总之,您可以使用ProxySQL作为一个简单的(或高级)防火墙应用程序和数据库之间。它消耗很少的资源,但提供了一个巨大的性能提升。

虽然ProxySQL可以用作一个更先进的防火墙,这些特性超出了本文的范围。有非常具体的方式来配置它作为一种先进的防火墙。我们计划在这个博客更多。

4评论
最古老的
最新的 大多数投票
内联反馈
查看所有评论
尼尔斯

我能想到,PHP将发行COM_CHANGE_USER一旦再利用从池中连接(我不知道聪明的实现实际上是,例如,它只存储文件描述符散列的服务器或整个组合服务器+用户+ db),但COM_PING是相当愚蠢的,常常令情况更加糟糕的是,大多数PHP框架实际上并不处理数据库错误很好…

运行一个本地SQL代理通常意义只是为了改进的连接池。

雪利酒

很好的分享,“诱饵”MySQL实例是什么意思?

尼尔斯

据我理解他们建立另一个MySQL实例和配置ProxySQL ping转发给该实例。他们发现ProxySQL本身能回答ping,当部署在本地保存一个往返。

雪利酒

理解,谢谢尼尔斯