MySQL性能扩展的架构优化方案(一)

这是学习笔记的第 1810篇文章

这几天有一个业务库的负载比往常高了很多,最直观的印象就是原来的负载最高是100%,现在不是翻了几倍或者指数级增长,而是突然翻了100倍,导致业务后端的数据写入剧增,产生了严重的性能阻塞。

这类问题引起了我的兴趣和好奇心,经过和业务方沟通了解,这个业务类型偏向于数据的密集型写入,不存在事务,但是有明确的统计需求。目前的统计频率是每7分钟做一次统计,会存在几类统计场景,基本都是全表扫描级别的查询语句。当前数据库的架构很简单,是一个主从,外加MHA的高可用。

问题的改进方向是减少主库的压力,因为目前主库的压力一方面在于并发写入压力,另一方面在于全表扫描的压力,对于CPU和IO压力都很大。统计的SQL导致了资源成为瓶颈,结果原本简单的insert也成为了慢日志SQL,相比而言,写入需求是硬需求,而统计需求是辅助需求,所以在这种场景下和业务方沟通,快速的响应方式就是把主库的统计需求转义到从库端。

转移了读请求的负载,写入压力得到了极大缓解,后来也经过业务方的应用层面的优化,整体的负载情况就相对乐观了。

主库的监控负载如下,可以看到有一个明显降低的趋势,CPU负载从原来的90%以上降到了不到10%。IO的压力也从原来的进100%降到了25%左右。

从库的监控负载如下,可以看到压力有了明显的提升。CPU层面的体现不够明显,主要的压力在于IO层面,即全表数据的扫描代价极高。

这个算是优化的第一步改进,后续还会有更大的压力场景,所以在这个基础上,我们需要对已有的架构做一些改进和优化,第一目前的架构暂时能够支撑密集型数据写入,但是不能够支持指数级别的压力请求,而且存储容量很难以扩展。

考虑到资源的成本和使用场景,所以我们暂时把架构调整为如下的方式,即添加两个数据节点,然后打算启用中间件的方式来做分布式的架构设计。对于从库暂时为了节省成本,就对原来的服务器做了资源扩容,即单机多实例的模式,这样一来写入的压力就可以完全支撑住了。

但是这种方式有一个潜在的隐患,那就是从库的中间件层面来充当数据统计的角色,一旦出现性能问题,对于中间件的压力极大,很可能导致原本的统计任务会阻塞。同时从库端的资源瓶颈除了磁盘空间外就是IO压力,目前通过空间扩容解决不了这个硬伤。

在和业务同学进一步沟通后,发现他们对于这一类表的创建是动态配置的方式,在目前的中间件方案中很难以落实。而且对于业务来说,统计需求变得更加不透明了。所以一种行之有效的改进方式就是从应用层面来做数据路由,比如有10个业务,业务1,业务2在第一个节点,业务3,业务5在第二个节点等等,按照这种路由的配置方式来映射数据源,相对可控,更容易扩展,所以架构方式改为了这种:

而整个的改进中,最关键的一环是对于应用SQL性能的改进,如果SQL性能的改进能够初见成效,后续的架构改进就会更加轻松。

后面继续码一篇,持续关注。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

如何创建一条可靠的实时数据流

数据的生命周期一般包含“生成、传输、消费”三个阶段。在有些场景下,我们需要将数据的变化快速地反馈到在线服务中,因此出现了实时数据流的概念。如何衡量数据流是否“可...

2538
来自专栏微信公众号:Java团长

JavaEE学习路线图

这是学习Java的基础,掌握程度的深浅甚至直接影响后面的整个学习进程。Java的核心主要包括几个部分:

1901
来自专栏EAWorld

微服务框架落地实践之路

在微服务的浪潮下,如何根据企业自身的业务特点,合理的运用开源技术落地微服务架构成为关键。本文作者认为,在实施微服务架构的过程中,结合企业自身业务特点落地的微服务...

3858
来自专栏企鹅号快讯

高可用性的前生今世

题记:今天是2018年1月1日,这是一个特殊的日子,民间称为“三头”,意思是周头、月头、年头;我把它称为“3A”,指Kerberos协议的3A。无独有偶的是今年...

2247
来自专栏顾宇的研习笔记

Serverless 微服务持续交付案例

“Serverless 风格微服务的持续交付(上):架构案例”中,我们介绍了一个无服务器风格的微服务的架构案例。这个案例中混合了各种风格的微服务

1472

组织微服务

微服务可能是我的开发伙伴朋友中最受欢迎的热门话题之一,我确实喜欢灵活,敏捷以及拥有更多选择的概念。但作为一名在软件集成领域工作多年的人,我开始看到一些类似于以前...

1092
来自专栏DevOps时代的专栏

移动端持续集成的落地

我今天给大家分享的主题主要是移动端持续集成的移动端落地。先给大家介绍一下我的一些背景,大概做了十年左右的软件的质量研发,还有DevOps 的一些工作。然后经历了...

1491
来自专栏Rainbond开源「容器云平台」

【微服务干货系列】Yelp公司总结的微服务架构的实践经验

1282
来自专栏程序你好

为什么应该使用微服务(Microservices) ?

如今,微服务非常流行。几乎每个人都喜欢。不仅仅是Netflix、亚马逊或谷歌,似乎几乎每个人都采用了这种架构风格。虽然微服务已经存在了很长一段时间,也有很多关于...

4263
来自专栏JAVA烂猪皮

微服务写的最全的一篇文章

今年有人提出了2018年微服务将疯狂至死,可见微服务的争论从未停止过。在这我将自己对微服务的理解整理了一下,希望对大家有所帮助。

4242

扫码关注云+社区

领取腾讯云代金券