大家好,今天给大家说一个真实的 线上灾难片...
先跟大家描述一下整个故事(也可以说是事故)的背景
我做了一个完全免费的在线做简历的网站,叫做【简历汪】,当时还专门发了视频
一个多月的时间,有了两万多用户,完成了四万多份的简历。为了,优化大家的体验,我专门熬了几个大夜,做了一整套的更新,模板数量、性能体验、全都大幅度更新了。还专门发文进行了庆祝 🎉
结果,刚发文的第二天,服务器直接就被干崩了三次!一天崩了三次啊!!!! 内存直冲到 93% …我人都麻了。给大家看下监控图
上面的三个尖,就是崩的这三次
然后,我们又经历了 复盘、保活、升级 等一系列的流程,目前好歹是稳定下来了。给大家看下最新的内存占用率,基本上稳定在 30% 左右
所以说,今天就跟大家分享一下这个过程中的一些反思和我个人的一些思考,尤其是关于如何应对线上突发的技术问题,以及一个产品如何快速成长的感受。
分享下我的不高兴,让大家高兴一下,毕竟这些事发生在我身上,怎么也得让大家笑一笑对吧? 😅
1. 最开始的惊喜
大家先想象一下:你做了一个产品,它的定位是:免费简历生成器,希望能够帮助那些求职的朋友们。
结果上线不到两个月,两万多用户,四万多份简历,这件事本身就是一种惊喜。更让我惊喜的是,产品居然还可以继续成长,甚至用户自己也在分享,大家开始在论坛、社交媒体上推荐你的产品。
我在那一刻,特别有成就感,觉得自己做的这件事是有意义的,不仅仅是在解决一个问题,还能够帮助到很多人。于是,我决定进行一次版本更新,增加更多模板,优化体验,提升服务器性能。
熬了几个大夜,想着终于可以大功告成了。还专门发文进行了庆祝和宣传。
2. 事故发生...
结果,就是第二天....服务器三连炸....
第二天正好是我老表弟结婚,大喜的日子。
当时刚举行完婚礼,正喝着喜酒呢。大概是下午两点多,服务器给我通知说内存预警....
当时手里还没有电脑,赶紧用手机连上阿里云,先重启保活,让服务器能运行起来再说。
喝完喜酒,送走客人。回去大概 4 点左右的时候,又是内存暴涨,这是当天第二次系统崩溃。当时还在车上,还是没有电脑,还是只能先重启服务器保活。
到家之后,查看日志、分析、修复、升级 等等做了一系列操作之后,本想着晚上了,定时到凌晨在更新吧。
结果,第三次崩溃来了。就在晚上 11 点的时候,内存再次飙升到了 90% 以上。没办法只能赶紧更新部署,部署之后到现在服务运行基本就稳定了
这就是整个事故的一个完整时间线
3. 反思
这次的“事故”让我意识到,当一个产品从小规模应用变成大规模应用时,潜藏的风险才会暴露出来。
虽然简历汪的前端和后端架构在早期时已经很健壮,但我没有预见到,随着用户量的增长,某些功能,比如简历生成。可能会成为瓶颈,尤其是在内存消耗方面。
我的反思是:
在开发初期,很多开发者倾向于把项目推向上线,而忽略了性能测试和压力测试。面对越来越多的并发用户,系统如何扩展?单个功能是否会成为瓶颈?
从而会导致,很多功能并没有做好并发处理,特别是高内存消耗的任务,像PDF生成这种任务,需要合理的排队和流量控制,防止请求过载。
同时,在任何线上产品中,监控和日志系统至关重要。通过及时查看系统的内存、CPU占用情况,能够帮助我们发现问题,及时做出响应。
虽然这次经历有些痛苦,但它也让我更加坚定了继续优化简历汪的决心。未来我们将继续在以下几个方面做出努力:
第一是:进一步优化PDF生成的流程,采用异步队列和限流机制,避免过多并发请求。
第二是:在流量突增时,能通过自动扩容来增加资源,确保不会因为流量激增而导致崩溃。
第三是:除了内存、CPU监控外,我们还将对数据库查询、API响应等进行细化监控,确保每个环节都在可承受的范围内。
4. 写在最后
对每一个产品来说,都是在不断尝试、犯错、修正、再尝试的过程中成长的。虽然“简历汪”经历了一些波折,但这段经历也是它从“小项目”走向“大项目”的必经之路。
愿所有的同学都可以拿到满意的 offer,咱们下次再见,拜拜