热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅谈一起线上事故

本文主要分享【D&G辱华事件是炒作吗】,技术文章【浅谈一起线上事故】为【love_spinach】投稿,如果你遇到Java,工作总结相关问题,本文相关知识或能到你。D&G辱华事件是炒作吗   

本文主要分享【D&G辱华事件是炒作吗】,技术文章【浅谈一起线上事故】为【love_spinach】投稿,如果你遇到Java,工作总结相关问题,本文相关知识或能到你。

D&G辱华事件是炒作吗

        菠菜最近在整理一些技术文档的时候,偶然发现项目组之前的一次真实线上事故,往事历历在目,值得深思。现刚加入星球,发出来和各位球友分享。

        背景:去年我所在的项目研发组接到一个项目,其中有一个需求业务类似于物联设备监测大屏,物联监控设备数据量比较大。和产品沟通了一下,设备数量以及调用链路很长,该页面数据对实时性要求不是很高,当时就想着可以做一层数据缓存来应对较大数据级的查询以及统计。

        过程:因为项目比较着急,作为项目研发组长的菠菜,快速做了一个技术方案以及任务拆解,安排组员投入研发。下面是还原的一个大致方案图,球友也可以思考一下,这样会有什么问题。

 

        应用开发以及测试正常进行,上线那天晚上,应用服务一上线,服务器cpu全部拉满,不出一个小时,服务实例节点全都挂掉了,发生了生产事故。公司的质量安全团队立马拉群,将故障上报到我的leader那边,应用紧急下线,连夜抓紧重新调整方案。熬夜带着小伙伴们肝代码,重新修复上线,服务恢复正常。

        分析:当晚服务紧急下线后,通过grafana查看应用实例节点的信息,发现服务器的cpu一直是满的,开始查看应用业务日志分析原因。查看xxljob任务调度,发现每个跑批任务的执行时间都很长,并且超过缓存结果数据的失效时间,导致缓存数据失效,所有的请求都走接口调用。因为在测试的时候没考虑到这么大数据量,实时iot接口调用链路长,且一次请求数据量较大,导致服务器资源一直被占满,定时任务抢占不到资源,又不断有新的请求进来,不断恶行循环,服务器最终拉崩,造成生产事故。

        改进:分析找到原因后,立马对之前的方案做了改进。如下图:

 

1.增加缓存失效降级方案,由原来的iot实时调用改为直接查询mysql数据库

2.xxljob定时任务程序代码和业务程序代码拆开,解耦,互不影响,也变相增加服务器的规格

3.缓存失效时间设为永不失效

        结果:所以的结果就是,大家加班连夜修复代码,测试并上线,解决这个问题。还好这个问题我们响应比较快,并且没有交付给客户,事故没有造成太大的影响面。当然,菠菜肯定是挨批了,好在和领导关系比较好,但是作为一个有经验的开发,犯这样的错是不应该的。要是toC的业务,发生这样的事故,裁掉你算轻的了。

        浅谈:其实后面认真复盘了一下,造成此次的问题,还是因为技术方案设计的有问题。你在设计的时候考虑问题是否全面,系统是否有容错机制?业务服务是否解耦?这些都要我们好好去思考。看见有些球友抱怨一直在写一些基础的CURD,自己没有成长什么的。其实不然,你写的每个接口你有没有重新去review自己写的代码,去做接口调优。如果你能深挖其中的细节,你又会学习到很多东西。可以学习一些新的技术,无可厚非,因为技术迭代太快了。但是也不能盲目去追求新的技术,例如你使用了某些中间件,你有没有想过它的优缺点以及它带来的一些问题,这些都是我们要去考虑的。

        有道云原文链接地址:浅谈一起线上事故,大家如果觉得有所收获,帮忙点个赞~

菠菜分享自己地亲身经历,和大家一起交流,一起加油,感谢~

本文《浅谈一起线上事故》版权归love_spinach所有,引用浅谈一起线上事故需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • 缓存 分布式锁 Redis
    分布式锁现在Redis基本上没家公司都在使用,只是各自使用的场景不以,但Redis最出名的还是做为缓存服务器,提搞服务器的的吞吐量,下面我们来围绕这个作为缓存做一个总结今天的目标其 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
author-avatar
mobiledu2502874483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有