前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >西安健康码又崩了!随便聊聊

西安健康码又崩了!随便聊聊

作者头像
程序员鱼皮
发布2022-02-21 15:16:50
1.6K0
发布2022-02-21 15:16:50
举报
文章被收录于专栏:鱼皮客栈鱼皮客栈

大家好,我是鱼皮,这两天有不少朋友来问我:鱼皮,西安健康码又崩了,你怎么看?

还有些朋友跟我开玩笑:是不是你新项目上线,把他们服务器搞崩了?

我就纳了闷了,为啥大家知道这种消息总是比我快?我平时上网也不少啊,但为啥我就看不到这些信息呢?怎么大数据天天给我推荐的都是些娱乐八卦、唱歌跳舞的内容!

本来我最近工作就老遇到大 Bug,就不要再让我感受 Bug 带来的痛苦了好嘛!

还有我要是有能力和胆量搞崩健康码,我还搁这瞎写什么文章呢?

不过在了解了西安健康码崩溃的情况后,可以简单和大家聊聊,分享一点拙见。

事件描述

事情大致是这样的,去年 12 月 20 日和今年的 1 月 4 日,短短两周内,西安一码通程序崩了两次,导致市民无法扫码亮码,只能在寒风中排队等候。

图片源于网络

官方的解释是:短期用户访问量激增,大概是正常访问量的 10 倍以上,导致网络阻塞、系统崩溃。

于是,名场面来了:

“时任西安市大数据局局长刘军参加发布会并回应称,西安市一码通使用频率加大,对网络与平台造成较大压力,在全员核酸检测的特殊时期,为减轻系统压力,建议广大市民 非必要不展码、亮码 ,在出现系统卡顿时,请耐心等待, 尽量避免反复刷新 。”

虽然听上去挺合理的,但总感觉哪里不太对劲。。。

人类为一个小系统让步?上千万人为几个搞系统的小团队让步?真就 “非必要时不亮码,必要时码不亮” 了。

据说后来,该局长被停职检查。。。

总之,在疫情形势不容乐观的情况下,这个事故的严重程度可以说是 P0 级了。

技术分析

那么事情是否真的如官方所说,是由于网络阻塞导致的系统崩溃呢?

先说说什么是网络阻塞。打个比方,把用户的访问流量想象成往小水管中注水,如果流量突然激增,出水口太小来不及排水,水就流不动了。

怎么解决网络阻塞呢?一种最常见的方案是对网络进行 扩容

提到扩容,最简单粗暴的方式是,换个粗水管,就能应对更大的突发流量。但如果平时流量用小水管就能应对,这样改造就会很浪费资源。

除了这种方式外,其实有非常多优秀的扩容方案。比如之前看过美团的一个分享,在某业务访问的高峰期(比如中午 12 点的外卖系统),系统会自动协调其他非高峰期业务的部分资源给该业务,从而保证总资源有限的情况下,顺利扛过流量高峰。

所以,如果健康码第一次的崩溃是因为网络阻塞,按道理来说除了这么大的事故肯定会吸取教训,对网络进行 扩容 等措施的,如果做了扩容,第二次的崩溃就不应该再甩锅给网络了。但现实恰恰相反,第二次崩溃依然宣称是网络阻塞,那我肯定是不信了。

而且有了第一次的经验,第二次又遇到了同样的网络阻塞问题,真的要修复好几个小时么?

此外,事故发生之后,程序明显发生了 回滚 ,界面恢复成了几个月前的样子!

说到回滚,我就来劲了,这种事我干的太多了,大多数情况下,都是写了 Bug 影响到线上项目了,才会做这个操作。

所以我猜测一码通的崩溃,肯定和系统之烂脱不开关系。既然官方称数据库还能正常运行,那么大概率是业务层代码自身出了问题。

比如本来页面很简洁,只需要从服务器查询健康码信息(根据用户 N 天内的行为进行综合计算而成),而一码通新版本又多了核酸检测情况等一些额外的信息查询,所以就增加了单次数据库查询的耗时,占用数据库连接更久、释放得更晚。请求很多的情况下,数据库连接很快就被占满了,导致新的请求都要一直排队等待可用的数据库连接,直到等待超时。

数据库连接池

举个例子,本来食堂提供两菜一汤,大家排队去食堂打饭,每个人要花 20 秒。后来食堂突然提供了烤腰子,大家又要多打一道菜,比原来多花 10 秒,队伍移动慢了,就导致后面的队越排越长,直到把食堂堵死。

当然,也有可能是数据库里又多了大量数据,导致查询时间变长。打个比方就是食堂提供了更多菜品,大家挑选的时间更久了。

要解决这个问题,就要定位请求究竟在哪个环节等待,是数据库连接池的最大连接数不足、还是数据库本身的最大连接数不足等。常见的手段就是调整连接数参数、或者对应用进行扩容。

当然这只是我的猜测~

尾声

最后,我从网上了解到,大部分区域的一码通,其实都是由腾讯和阿里免费提供的。但西安不一样,它的一码通,是由当地政府部门招标搭建的,而且还是在三天内研发出来的!

去年的报告

因此,我觉得这次事故需要背锅的人和团队真的太多了,下到写 Bug 的开发者、设计系统的架构师、保障系统的运维同学,上到各公司和政府部门的领导决策者等等。西安不像其他省份一样用全国统一、相对更稳定的健康码也就算了(本地数据管理方便些),但究竟是谁给了你们勇气不对 仅花三天就上线上千万人使用 的系统进行压力测试和容灾演练的?

虽然我不是这件事的受害者,不过光是让我想像一下这么多人大冬天里排队等系统修复的场景,我就真的是很气愤了!

当然,如果这件事情真的是天灾,就当我在扯犊子吧。

大概是这样,就随便聊聊,希望以后自己设计系统时能长点心,尽量不要因为自己的失误影响到其他人。

共勉!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-08 16:37:14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员鱼皮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事件描述
  • 技术分析
  • 尾声
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档