我们有一个应用程序,它由微服务组成,所有微服务都连接到同一个Percona实例。目前,它只是一个没有复制的16核/32 GB内存的实例。我们的问题之一是,有时我们的一个微服务会对数据库造成如此大的负载(甚至只是读取),这使得所有的微服务都无法使用。
我们正在考虑创建一个由三个节点组成的Percona集群,为每个微服务选择节点。主要是“写”的服务将连接到一个实例,其余的将连接到其他两个实例。这样,如果某些微服务导致读取负载高,它不应该完全淹没我们的基础设施。
我的问题:
注意:我们可能会在GCE:https://console.cloud.google.com/marketplace/details/click-to-deploy-images/percona?project=goout-cloud&folder&organizationId=74390800864中使用Percona XtraDB单击部署。
发布于 2018-07-28 22:47:09
附带注意,查询优化是“加快速度”的第一种方式。不要总是用硬件来解决问题。检查缓慢的查询日志并尝试改进查询是值得的。有时,一个单一的指数可以使夜间/白天的变化。
免责声明:我是Percona的高级讲师,并提供了许多全天的PXC和ProxySQL强化教程课程。
发布于 2018-08-17 01:06:11
看来你的尖峰是问题所在。而且你需要尽可能快地处理洪水,因为用户希望得到那些热票。
添加队列只会增加复杂性,并在动作快时减慢处理速度。所以“不要排队,只管去做。”进一步注意,队列将被传递到其他节点,从而使得enqueue/dequeue可能比简单地处理请求慢一些!
连接--做某事--断开连接需要时间。很多时候并不是真正涉及到“某物”,而是围绕在它周围的开销。我发现,如果只有不到10个连接处于活动状态,事情就会顺利进行。但如果有10多家公司成功起步,那么InnoDB就会开始自食其力。
去过拥挤的商店吗?比方说,所有过道上都有200人和大车的空间。但是,如果你想拥有210名购物者,那么每个人都会放慢脚步,只是想找个位置。吞吐量下降,也许到了人们想要放弃他们的手推车休假的地步。你看过前面排队的商店吗?他们解决了这个问题,不允许200多人同时购物!
因此,您的问题的解决方案可能是以外的MySQL。如果您有一个面向MySQL的网页,请将其节流以限制它使用的“线程”的数量。例如,Apache有这样的功能,加上在连接到Apache级别排队的“待办事项”。MySQL的max_connections和backlog可能以同样的方式工作,但是max_connections (151)的默认值太高了。在便利店里聚集在汽水机周围的151名学生可能是一个更好的比喻。
更多的节点/更多的CPU可能是答案的一部分,也可能不是答案的一部分;这取决于“某某物”取出了哪些锁。
Monitor Threads_running;如果它增长到几十个,那么我想我的评论也适用。如果监视器程序无法连接到检查该GLOBAL STATUS,那么我知道它适用。
https://stackoverflow.com/questions/51486658
复制相似问题