运维系统性能优化后思考,除了避免懒惰的麻木,还需要了解系统的“脾性”...

本文主要是介绍运维系统性能优化后思考,除了避免懒惰的麻木,还需要了解系统的“脾性”...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

读完需要

8

分钟

速读仅需2分钟

做了一些优化之后,发现系统和人其实蛮像,当然人要高级的多。

很多业务系统在发生问题的时候感觉是突然发生的,但是按照分析问题的思路查下去却发现是这样那样的原因,毫无疑问大多是一些很小的问题逐步放大之后看到的。

近期我们的运维系统的小问题不少,在这个过程中大家有点感觉到了运维系统的老态龙钟,初期关注功能实现,后期关注性能,其实这种方式会让你不断的走一些重复的老路。

近期运维系统常见的问题有:

1)有时候和外部系统进行接口数据推送的时候,会因为API层的异常导致数据通信失败,报错信息类似Broken Pipe,IOError这种,但是没有明细的错误信息。

2)运维系统有时候会突然奔溃,等发现的时候基本是被动的处理方式

3)在某一天做一条简单的DML操作的时候,数据库竟然给我返回执行了5秒

4)近期的业务变更需求比较多,时不时会拆东墙补西墙的发布一些补丁

而这个问题在近期达到了一种常态,那就是每天都会出点问题,这个问题引起了我的关注,我们做出了一些改变。

1)对于系统的服务可用性,我们加入了系统层的monitor模块,这样在服务自动宕机之后,会自动拉起服务。

2)排查了近期的业务需求变更,暂未发现一些明显的性能隐患

3)从磁盘空间增长情况来看,也没有产生一些异常的日志。

从问题的反馈频度来看,大家会逐步对于系统失去信心,同时也会无形中加大各方的业务处理压力。

在经过排查,我定位到问题的瓶颈主要在API层,所以在API层入手来查看是否有一些超时处理的流程。

有一个流程引起了我的注意,我抓取了这个逻辑的SQL情况。

这是一个慢日志进行稽核回写的逻辑,会把收集到慢日志信息进行慢日志个数统计后回写到一个新的表中。

   数据库层面进行排查和分析,发现都指向了这个逻辑处理。

也就意味着这条SQL如果进行了完善的优化,那么整个性能问题的90%以上的瓶颈都能够解决。

在这种情况下我进行了进一步的优化,而优化思路其实就是采用增量变更而非全量变更,采用这种方式之后,优化的效果从原来的分钟级下降到了0.2秒左右。

整个过程涉及几个索引的重构和SQL逻辑的优化,难度其实不大。

我在思考这样两个问题

1)为什么这个问题到了现在才被重视?

2)为什么这个问题到了现在才能够被优化?

说到底,里面涉及的主要就是懒惰,就是对于问题的忽视,导致问题由小变大,从一个小的设计问题变成一个大的问题甚至故障,而另外一个层面就是我们需要了解一个系统的“脾性”,正如我在开头说到,系统和人有些类似,有时候我们能够容忍一些,但是如果容忍不了就会爆发,对于系统也是如此。

如下是这条SQL的执行时长的趋势图。

可以看到在近几个月里的执行时长是逐步增长。但是每隔一段时间就会有一些明显的下降,从我的记忆来看,那是我对一些历史数据做了清理,对一些索引进行了构建,但是解决的是一些表面问题,如果我忘记了清理历史数据或者索引的重构效果不佳,那么问题就依然存在,而等到了爆发的一个点,这个问题就是以点带面的影响方式,所以初步来看,这个系统的容忍时间是60秒,但是我们能够优化到0.3秒,听起来确实是很讽刺。

什么样的方式能够解决这个问题,一种行之有效的方式就是能够提出更高的要求和标准,比如现在执行10秒钟,业务逻辑是完全可以接受的,所以我们选择了默认接受,而等到了不得不改的时候,才会去重新审视这个逻辑。

而进一步思考,如何进行问题的规范和完善,我觉得:设定相关的标准和规范流程,同时在这个过程中进行问题跟踪和回溯。

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。

7

   

近期热文

你可能也会对以下话题感兴趣。点击链接就可以查看。

  • 华裔教授发现二次方程极简解法,我默默的做了下验算

  • MySQL的主键命名挺任性,就这么定了

  • 回答:我不小心把公司的数据库给删了,该不该离职?

  • 迁移到MySQL的业务架构演进实战

  • 数据库修改密码风险高,如何保证业务持续,这几种密码双活方案可以参考

  • MySQL业务双活的初步设计方案

  • 如何优化MySQL千万级大表,我写了6000字的解读

  • 一道经典的MySQL面试题,答案出现三次反转

  • 业务双活的数据切换思路设计(下)

  • 业务双活的数据切换思路设计(一)

  • MySQL中的主键和rowid,看似简单,其实有一些使用陷阱需要注意

  • 小白学MySQL要多久?我整理了10多个问题的答案

8

   

转载热文

你可能也会对以下话题感兴趣,文章来源于转载,点击链接就可以查看。

  • 去IOE or Not?

  • 拉里·佩奇(Larry Page)的伟大归来

  • 《吊打面试官》系列-Redis基础

  • 唯一ID生成算法剖析,看看这篇就够了

  • 关于大数据运维能力的一些思考

  • DBA菜鸟的进化简史:不忘初心,记工作中踩过的三个坑

  • 美女主持直播,被突发意外打断!湾区网友却高喊: 我懂!超甜

这篇关于运维系统性能优化后思考,除了避免懒惰的麻木,还需要了解系统的“脾性”...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/572543

相关文章

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

Java8需要知道的4个函数式接口简单教程

《Java8需要知道的4个函数式接口简单教程》:本文主要介绍Java8中引入的函数式接口,包括Consumer、Supplier、Predicate和Function,以及它们的用法和特点,文中... 目录什么是函数是接口?Consumer接口定义核心特点注意事项常见用法1.基本用法2.结合andThen链

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创