8月Node服务的3场事故
有句话叫每一起严重事故的背后,必然有 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场事故的更多相关文章
- node服务的监控预警系统架构
需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...
- Node服务一键离线部署
背景说明 项目测试通过,到了上线部署阶段.部署的机器安全限制比较严格,不允许访问外网.此外,没有对外网开放ssh服务,无法通过ssh远程操作. 针对上面提到的两条限制条件,通过下面方式解决: 无法访问 ...
- 能取悦生理期的女性吗?Le Parcel提供女性卫生用品按月订购服务,不是按包出售而是可以按片自由搭配 | 36氪
能取悦生理期的女性吗?Le Parcel提供女性卫生用品按月订购服务,不是按包出售而是可以按片自由搭配 | 36氪 能取悦生理期的女性吗?Le Parcel提供女性卫生用品按月订购服务,不是按包出售而 ...
- 前端跨域方案-跨域请求代理(node服务)
前端开发人员在本地搭建node服务,调用接口首先走本地服务,然后转发到api站点,node服务代码如下: var express = require('express'), request = req ...
- 添加swagger api文档到node服务
swagger,一款api测试工具,详细介绍参考官网:http://swagger.io/ ,这里主要记录下怎么将swagger api应用到我们的node服务中: 1.任意新建node api项目, ...
- node服务的安装以及vue的安装
相信很多朋友都在装node服务和安装vue的时候会遇到一些问题,下面为大家详细介绍node服务的安装以及vue的安装: 1.nodeJs官网下载版本(根据自己电脑的配置进行相应下载即可):默认安装路径 ...
- node服务端搭建学习笔记
咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程中的点滴~ 开篇先把我学习参考的文章来源给出,以表示对前人的尊敬: https://github.com/nswb ...
- Node服务端极速搭建 - nvmhome
本文意在让你掌握极速搭建Node服务端(任何Project) $ whoami name: kelvin email: kelvv@outlook.com homepage: www.kelvv.co ...
- Node服务端极速搭建 -- nvmhome
> 本文意在让你掌握极速搭建Node服务端(任何Project) ```$ whoaminame: kelvinemail: kelvv@outlook.comhomepage: www.kel ...
- 起一个node服务
使用node开发一个应用,非常简单,甚至都不用去配置一堆文件来启动一个webu服务器,直接去官网把这一段示例代码拷过来 https://nodejs.org/en/about/ 中文网没有这个abou ...
随机推荐
- [ARM 汇编]进阶篇—异常处理与中断—2.4.1 异常处理概念
异常处理简介 在ARM汇编开发中,异常处理和中断是常见的概念,它们是对系统运行过程中出现的特殊情况进行处理的一种机制.异常处理和中断包括硬件异常.软件异常和外部中断等.当处理器遇到这些特殊情况时,它会 ...
- CKS 考试题整理 (05)-Container 安全上下文
Context Container Security Context 应在特定 namespace 中修改 Deployment. Task 按照如下要求修改 sec-ns 命名空间里的 Deploy ...
- 3. AOP
1. 代理模式 1.1 概念 ① 介绍 二十三种设计模式中的一种,属于结构型模式.它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用.让不 ...
- VisionPro学习笔记(2)——图像转换工具ImageCovertTool
众所周知,VisionPro是一款功能强大的机器视觉软件,用于开发和部署机器视觉应用程序.其中ImageConvertTool是其中一个重要的工具,用于图像转换和处理.本文将介绍如何使用ImageCo ...
- python笔记:第二章基本数据类型
基本数据类型 Python中的数据类型可以分为五大类:字符串.数字.容器.布尔.None 1.字符串 可以使用单引号或双引号创建字符串,可以用加号将两个字符串合并 name = '小明' age = ...
- VS2017配置OpenCV
VS2017配置OpenCV 0 OpenCV介绍 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉算 ...
- 刷了一个月AI歌唱的视频 做一个大胆预测
现在的AI热点转到ChatAI和AI唱歌去了 很好理解(现在每天在看Neuro的切片 感慨这才是看V的初心 可惜Neuro这个形象在创立的时候只是一个ChatAI 和游戏用的GameBOT并不是同一个 ...
- 最为常用的Laravel操作(3)-模板
Blade 模板引擎 模板继承 定义布局: <!-- 存放在 resources/views/layouts/app.blade.php --> <html> <head ...
- 秋叶整合包如何安装Python包
前几天写了一篇<手把手教你在本机安装Stable Diffusion秋叶整合包>的文章,有同学运行时遇到缺少Python Module的问题,帮助他处理了一下,今天把这个经验分享给大家,希 ...
- ASP.NET WebForm中asp:Repeater和UI:Grid数据为空时如何显示表头?
一.asp:Repeater Repeater 控件用于显示被绑定在该控件上的项目的重复列表.Repeater 控件可被绑定到数据库表.XML 文件或者其他项目列表. 1.1-前台页面代码 <a ...