当前位置: 首页 > news >正文

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

这是学习笔记的第 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菜鸟的进化简史:不忘初心,记工作中踩过的三个坑

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

相关文章:

  • 用python重新定义【2019十大网络流行语】
  • 那些对我来说没有价值和有价值的事情
  • 关于MySQL GTID的一次深刻学习
  • 这才是真正的Git——Git内部原理揭秘!
  • MySQL 8.0与MariaDB 10.4,谁更易于填坑补锅?
  • 那些难忘的维护之夜
  • 《宣州谢眺楼饯别校书叔云》赏析
  • 无意中测试了下MySQL里面的join操作,发现还是存在理解偏差
  • 说几点关于数据库的见解
  • Oracle和MySQL的数据导入,差别为什么这么大
  • 使用Python分析北京积分落户数据,分析完我陷入了深思
  • 私有云MySQL多租户权限的初版设计
  • 关于中间件服务的配置管理,分为5个阶段
  • 一个诡异的MySQL慢日志问题
  • 关于MySQL中insert ignore,insert on duplicate和replace into,你可能没想过区别
  • ComponentOne 2017 V2版本正式发布
  • JAVA SE 6 GC调优笔记
  • JavaScript异步流程控制的前世今生
  • ucore操作系统实验笔记 - 重新理解中断
  • vagrant 添加本地 box 安装 laravel homestead
  • 阿里云前端周刊 - 第 26 期
  • 高程读书笔记 第六章 面向对象程序设计
  • 简单数学运算程序(不定期更新)
  • 盘点那些不知名却常用的 Git 操作
  • 前端面试题总结
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 问题之ssh中Host key verification failed的解决
  • - 转 Ext2.0 form使用实例
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • python最赚钱的4个方向,你最心动的是哪个?
  • # 数论-逆元
  • #include
  • #laravel 通过手动安装依赖PHPExcel#
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (补)B+树一些思想
  • (第一天)包装对象、作用域、创建对象
  • (二)换源+apt-get基础配置+搜狗拼音
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)JPA - JQPL 实现增删改查
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)大型网站架构演变和知识体系
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET MVC之AOP
  • .Net Redis的秒杀Dome和异步执行
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout