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

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

这是学习笔记的第 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

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.