客户端(Python)负载平衡MySQL服务器

时间:2018-05-05 07:58:20

标签: python mysql python-3.x debian-based

我有一个有趣的问题,我想找到解决方案。

我有一个在Ubuntu(16.04)上运行的MySQL服务器。我还有许多存储系统信息的服务器,如CPU温度,网络流量数据和数据。 CPU在MySQL服务器上的数据库中加载。为了实现这一点,我在每台服务器上运行了几个Python程序,它们收集数据并将其推送到数据库 在这些服务器上,我还提供了许多脚本,这些脚本定期查询数据库中的历史数据,然后将其绘制并显示在网页上。

我现在设置此方式的方式导致所有服务器几乎在同一时间倾向于查询数据库。这会导致MySQL服务器负载过高,然后长时间几乎没有负载。

有哪些选项(最好是客户端Python)可以帮助我更均匀地分担SQL服务器上的负载?

1 个答案:

答案 0 :(得分:1)

这通常被称为 stampeding 雷鸣般的群体问题。突然间,大量客户想要一些东西,然后活动又回归到了什么。有不同的方法来应对。如果您在客户端和服务器之间有一些中介,例如负载均衡器,您可以使用它来分散负载,甚至可以根据需要使用它来启动新的服务器实例。

在直接客户端-MySQL连接的情况下,通常不是一个选项。也许你可以切换到只读的复制从属,它可以更容易地吸收影响(即水平缩放)。或者你得到一个更大的服务器,它具有更好的峰值负载性能。当然,如果99%的时间没有任何负担,这些解决方案并不具有成本效益。

廉价的解决方案是避免所有客户端同时向服务器发出冲击。可以单独抵消每个客户端(例如,为0 * * * *5 * * * *10 * * * *等安排他们的cron作业,或者每次只是随机延迟每个客户端(sleep(randint(0, 360))在Python中,bash中的sleep $((RANDOM % 360)) && ...