【发布时间】:2018-12-31 08:52:44
【问题描述】:
我们有一个应用程序,它由所有连接到同一个 Percona 数据库实例的微服务组成。目前它只是一个没有复制的 16 核/32 GB 内存的实例。我们的问题之一是,有时我们的一个微服务会导致数据库负载如此之高(甚至只是读取),这使得所有微服务都无法使用。
我们正在考虑创建一个由三个节点组成的 Percona 集群,并为每个微服务选择节点。大多数“写入”的服务将连接到一个实例,其余的将连接到其他两个实例。这样,如果某些微服务导致读取负载过高,它不应该完全压垮我们的基础架构。
我的问题:
- 这是个好主意吗?我们不应该让 ProxySQL 处理流量拆分吗? ProxySQL 可能意味着没有隔离。
- 我们应该有更多的 CPU 更少的实例,还是更少的 CPU 更多的实例?拥有更多实例意味着在高负载情况下运行微服务的隔离度更高。
- 拥有不同 CPU 的节点是个好主意吗?比如让“写实例”比“读实例”有更多的CPU。
- 如果我们将微服务定向到“他们的 Percona 实例”,当他们的实例完全死机时,我们还能拥有某种 HA 吗?
注意:我们可能会在 GCE 中使用 Percona XtraDB click-to-deploy:https://console.cloud.google.com/marketplace/details/click-to-deploy-images/percona?project=goout-cloud&folder&organizationId=74390800864
【问题讨论】:
-
您有什么样的查询?不能优化吗?
-
我们有数以千计的查询,有时还有一个没有优化。有时我们的访问量会达到高峰——从 500 个在线我们可以获得数以万计的访问量。然后这个单一的查询“杀死”整个数据库。当然,我们会识别该查询并对其进行优化,但我正在寻找防止这些事故发生的方法。
-
您在 dba.stackexchange.com 上有一个帐户,为什么不在那里发布问题?这个网站是为程序员准备的。
-
另外,您确定在某些时候您有更多的访问者,还是只是线程数增加,因为您的不祥查询持有一些锁?你有没有调查过这段时间的慢查询日志?当查询正在杀死服务器时,您是否查看了
show engine innodb status\G的输出?在我看来,您的首要任务应该是找到查询并对其进行优化,而不是考虑集群(目前)。 -
我们销售活动门票,当一些销售开始时,我们可以同时吸引数千名访客,而我们通常有大约 500 人在线。所以是的,我们有这些高峰。
标签: mysql percona galera mysql-cluster percona-xtradb-cluster