8月Node服务的3场事故

node,服务,事故 · 浏览次数 : 111

小编点评

**数据库锁死** 1. 数据库记录极速增长超过数据库限定容量。 2. 导致库被锁,无法更新和写入。 3. 清理过程成功,恢复正常运行。 **Redis 服务故障** 1. Redis 服务连接异常,导致服务意外重启。 2. 影响了 221 个用户的线上业务,对用户体验造成了极其糟糕的影响。 **海外短信盗刷** 1. 前两个事故没有造成经济损失,但海外短信盗刷造成了比较大的经济损失。 2. 攻击持续了 3 天,碰到双休日,大家都不在工位的时候。 3. 发现在被刷后,手机号码和 IP 一直在变化,绕过了风控策略。

正文

  有句话叫每一起严重事故的背后,必然有 29 次轻微事故和 300 起未遂先兆以及 1000 起事故隐患。

  而我最近更是碰到了 3 起比较严重的线上事故,都是大意惹的祸。

一、数据库锁死

  第一起事故发生在凌晨 4 点到 6 点,我们有个数据库被锁死了,无法更新和写入。

  当天早上 5 点客服打电话给我,把我吵醒后紧急摇人,打电话给运维,打了 5 次才打通,他也马上开机排查。

  原因很简单,就是有一张表,记录极速增长,超出了数据库的限定容量(1TB),从而导致库被锁,马上扩容。

  去年对这张表做过一次清理,但当时没有引起重视,造成了今天这场事故。

  幸亏这个数据库大部分的使用场景是管理后台,所以线上业务没有造成太大的损失,不过小范围内有点影响。

后续动作

  将线上重要的业务与这个数据库做剥离,也就是不再依赖这个数据库。

  对那张极速增长的表做剥离,即迁移到另一个数据库中,对于量比较大的各类日志数据,单独创建一个数据库,统一管理。

  对此表做定期清理,例如只保留 3 个月的记录,其余全部删除。

二、Redis 服务故障

  第二起事故发生在凌晨 2 点,不过就持续了 30 秒,看来夜深人静的时候比较容易滋生意外。

  虽然只存在了 30 秒,但仍然影响了 221 个用户。排查下来是 Redis 服务连接异常,导致服务意外重启。

  在重启过程中,那些请求都无法被处理,从而让业务无法响应。

  在确认不是代码逻辑造成的异常之后,开始摇运维,让他去找服务供应商,

  一开始服务商认为是某个 Redis 命令阻塞了请求,不过在仔细核对代码后,发现并不是这样。

  于是再次去挑战服务商的维护人员,故障发生的时间也再一次缩小了范围。

  最终确认在那个时间有主备切换操作(不定期),导致了报错。

后续动作

  一开始就仅仅是将切换时间改成凌晨的三点,但是随后几周又出现了 Redis 的连接问题。

  虽然时间只有 20 多秒,不过还是影响了小部分的线上业务,对用户体验造成了极其糟糕的影响。

  再次摇运维,让他去沟通解决,一开始他觉得这么短的时间应该问题不大,可以将升级时间配置到我们在办公的时间。

  好像有点道理,但是细究下来,还是有点问题的,对于用户来说,他们只看结果,若自己碰到了异常,那么就会认定你的系统不稳定。

  他们只会在意 0 和 1,不会在意你这异常发生的概率是多少,影响的范围是多少。

  所以后面继续和运维拉扯了一下,他了解到可以从单区升级成双区,这样就能在升级的同时而不影响线上业务。

  不过,在升级期间,还是会有 30 秒左右的断开时间,但各项缓存配置不用单独做修改。

三、海外短信盗刷

  短信服务已经被应用到日常业务的很多模块中,主要用于身份的验证,本事故与短信直接相关。

  前两个事故并没有造成经济损失,但海外短信盗刷造成了比较大的经济损失。

  攻击持续了 3 天,很巧的是,正好碰到双休日,大家都不在工位的时候。

  第一天盗刷后,运维受到了费用受限的通知,告知了服务端,服务端再告知了我们组。

  然后当天就让运维把短信总量降一半,为盗刷的国家增加每日的短信上限,我们组修改短信接口,接入风控保护。

  隔了两天是周六,发现又在被刷,原来是手机号码和 IP 一直在变化,绕过了风控策略,并且运维并没有对所有的国家配置短信上限。

  服务端在风控保护的代码中直接关闭了海外短信,原先设想是临时关闭两天,因为我们组的业务只会影响极小部分的用户。

  结果服务端忘记发布代码,导致第三次被刷。

后续动作

  首先将每日的海外短信上限调整到更小的数量,再缩小一半。

  其次是设置海外国家白名单,如果为所有国家配置上限数量,不仅工作量大,而且还会有遗漏的隐患。

  再有,查看日志发现,攻击者的手机号码都是随机生成的,因此,我们可以做一次身份校验。

  因为我们使用到短信的业务都会有身份信息,所以可以对手机号进行校验,只有是数据库中的手机才能发送短信。

  这部分的短信业务已经存在许久,但是一直没有引起我们的安全意识,非常脆弱,服务端之前也被攻击过,后面做了防御。

  还有一种短信防御,就是加验证码,在发送接口中核对验证码,只有是合法的,才会提供发送服务。

与8月Node服务的3场事故相似的内容:

8月Node服务的3场事故

有句话叫每一起严重事故的背后,必然有 29 次轻微事故和 300 起未遂先兆以及 1000 起事故隐患。 而我最近更是碰到了 3 起比较严重的线上事故,都是大意惹的祸。 一、数据库锁死 第一起事故发生在凌晨 4 点到 6 点,我们有个数据库被锁死了,无法更新和写入。 当天早上 5 点客服打电话给我,

HarmonyOS系统级推送服务,打造消息通知新体验

8月4日,第五届华为开发者大会 2023(HDC.Together)再次启航。在本次大会上,华为为广大用户带来了HarmonyOS 4全新升级的体验,同时,针对HarmonyOS应用的开发,此次也全面升级了HarmonyOS SDK开放能力。[账号服务](https://developer.huaw

华为开发者大会2023:云空间筑牢鸿蒙生态“云基因”

8月4日,华为开发者大会2023在东莞·松山湖举办,众多开发者及合作伙伴共赴盛会,见证鸿蒙生态的最新进展。在本届大会的HarmonyOS应用开发(端云能力)分论坛上,华为Drive Kit生态架构技术总监官宣云空间服务升级,赋能开发者高效开发,为鸿蒙生态应用注入“云基因”。 ![](https://

晋级名单公布!“域见杯”复赛今日火热开启

8月16日“域见杯”复赛正式开启赛题难度再度升级,更具挑战性!

.NET 8 发布的最后一个预览版Preview 7, 下个月发布RC

微软在2023年8月9日 发布了.NET 8 Preview 7[1],这是它在11月14日 RTM 之前进入发布候选阶段之前的最后预览版。 该预览版也于也与 VS 2022 v17.7 版本一起发布。对于预览版7,System.Text.Json 和 codegen 在此版本中具有最大的变化。所有

你的智能汽车正在窥视你!

2021年8月,蔚来部分用户数据被窃取,并遭到勒索225万美元等额比特币; 2022年5月,通用汽车表示部分在线客户账户出现异常登录; 2023年5月,丰田云服务导致215万日本用户车辆数据承担泄露风险; 2024年4月,高合汽车因车内摄像头拍摄的不雅影像泄露而备受关注; …… 近些年,随着“智能汽

云原生批量计算引擎 Volcano社区v1.8.0版本正式发布

北京时间2023年8月17日,Volcano 社区 v1.8.0 版本正式发布。

.NET周刊【8月第1期 2023-08-06】

## 国内文章 ### NativeBuferring,一种零分配的数据类型(上篇) https://www.cnblogs.com/artech/p/17586781.html 之前一个项目涉及到针对海量(千万级)实时变化数据的计算,由于对性能要求非常高,我们不得不将参与计算的数据存放到内存中,并

.NET周刊【8月第2期 2023-08-14】

本周由于Myuki大佬感染新冠,国际板块暂停更新一周,将在下周补齐,所以本周只有国内板块。 ## 国内文章 ### 解决 Blazor 中因标签换行导致的行内元素空隙问题 https://www.cnblogs.com/ElderJames/p/resolves-width-issues-in-bl

.NET周刊【8月第3期 2023-08-20】

## 国内主题 ### 抓的是周树人,与我鲁迅有什么关系? https://www.cnblogs.com/JulianHuang/p/17642511.html - **问题**:作者看到了一个关于Dictionary.Clear和new Dictionary的问题,想要探究为什么在foreach