MQ 崩溃,服务雪崩,刚毕业的菜鸟居然充当了救火队长

一次PO 级线上事故

刚毕业时,我在一家互联网公司参与了一个云计算系统的建设。有一天,由于 RabbitMQ 集群的故障,系统几乎完全不可用。我们不得不重启整个 MQ 集群,才让服务恢复正常。在故障处理完毕的第一时间,我私下和领导进行了沟通,讨论如何优化系统以避免再次发生问题。

当时系统是单体服务,自生成自消费MQ 消息,因为依赖 MQ 进行了各个子流程之间的所谓"隔离"(实际完全没有必要),所以当 MQ 不可用时候,服务也跟着雪崩。同时因为历史原因,RabbitMQ集群是我们组自行运维的,公司有自研的MQ,有专门中间件团队负责技术支持和运维,他们不管我们自建的 RabbitMQ 集群。基于这些原因,当RabbitMQ 集群崩溃后,我们无法有效运维,只会重启。系统非常不可靠,就像盲人骑瞎马一样危险

我们领导计划下掉系统对 MQ 的依赖。然而系统大量依赖 MQ ,想下掉谈何容易。但是我只改动了三四行代码,就将服务从对 MQ调用改为对自身方法的调用,对业务层代码完全没有修改,改动成本非常低。无论在功能和性能上都优于原方案。

领导听到我的想法,看完我的代码以后,他感到非常惊讶,问我:"你是怎么这么快就找到成本如此低的办法呢,以后要多做一些系统优化,成本低收益高的"

台上一分钟,台下十年功---------这就是学习的意义

得益于平时的努力,我在周末常常研究公司的项目。我把系统底层的数据库、MQ等工具类和组件都仔细研究透了。刚毕业时,虽然我对系统的架构设计经验不足,不清楚什么是好的,什么是坏的,经验很欠缺,但是当系统出现问题时,我可以迅速想出解决方案。问题一出现,我立即能够想到最低成本、最快时间的解决方法!

等到开复盘会议时,该系统漏洞早已经被我堵上了。我充当了这次事故的救火队员,又快又好的解决了问题,也得到了领导的赞赏。

现学现卖不可取

我刚毕业的时候,曾经相信现学现卖的原则,即只在工作需要时才去学习,以提高效率。我认为平时只需要专心做好本职工作,不需要花过多时间学习。毕竟学习挺苦的。

后来大学同学警告我,如果你王婆卖瓜,现学现卖,如果只是追求眼前利益,只想现学现卖,可能会错失很多具有挑战性和高产出比的机会,这些"好活"轮不到你,这时我才意识到,现学现卖实际上是一种非常消极的工作态度和生活态度。

后来我深刻意识到:台上一分钟,台下十年功。平时的勤奋付出,在关键时刻才能真正发挥作用。

正是平时下苦功夫,在关键时候才能派上用场,否则只得一边点头,一边说:我可以去学。

"虽然我不会,但是我可以学"。 老板和领导都喜欢员工拥有积极的工作态度。

但是如果有另一个下属说:我做过库存系统的调研,在业余时间写了一篇文章总结该系统设计的要点,总共分为哪几步(顺便把这篇文章发给领导)。当前我们的业务场景需要库存系统的哪些能力,在当前系统的性能要求下,库存系统技术方案如何选型。

那个 "我不会,但是可以学" 的同事除非是老板的绝对心腹、绝对要提拔的人,否则老板一定会让你主导该系统开发。

这就是平时下功夫的重要性所在。当然,平时下功夫也要有明确的目标和方向。我们应该多学习常见的系统架构设计和中间件的原理和使用方法。随着工作年限的增长,这些知识迟早会派上用场。

机会只会留给有准备的人!平时要努力,关键时候才能去争!

大家好,我是五阳,负责过云计算、营销系统、虚拟订单售卖系统的建设,长期在互联网大厂混。

我喜欢分享真实的工作经历和工作经验,关注我主页,获取更多的架构设计和工作经验分享!

相关推荐
m0_7482486525 分钟前
SpringBoot整合easy-es
spring boot·后端·elasticsearch
一个热爱生活的普通人43 分钟前
golang的切片(Slice)底层实现解析
后端·go
红目香薰1 小时前
Trae——慧码速造——完整项目开发体验
后端
Vcats2 小时前
深入浅出:基于SpringBoot和JWT的后端鉴权系统设计与实现
java·spring boot·后端
~kiss~2 小时前
Rust~二刷异步逻辑
开发语言·后端·rust
SomeB1oody2 小时前
【Rust中级教程】2.7. API设计原则之灵活性(flexible) Pt.3:借用 vs. 拥有、`Cow`类型、可失败和阻塞的析构函数及解决办法
开发语言·后端·性能优化·rust
larance2 小时前
Flask 发送邮件
后端·python·flask
Aska_Lv2 小时前
从零到一写组件库-日志组件库
后端
ybq195133454313 小时前
javaEE-SpringBoot日志
java·spring boot·后端
PyAIGCMaster3 小时前
第二周补充:Go语言中&取地址符与fmt函数详解
开发语言·后端·golang