首页 > 其他分享 >第一次线上 OOM 事故,竟和 where 1 = 1 有关

第一次线上 OOM 事故,竟和 where 1 = 1 有关

时间:2024-06-02 20:44:13浏览次数:21  
标签:OOM 编程 用户 接口 查询 线上 笔者 where

这篇文章,聊聊一个大家经常使用的编程模式 :Mybatis +「where 1 = 1 」。

笔者人生第一次重大的线上事故 ,就是和使用了类似的编程模式 相关,所以印象极其深刻。

这几天在调试一段业务代码时,又遇到类似的问题,所以笔者觉得非常要必要和大家絮叨絮叨。

1 OOM 事故

笔者曾服务一家电商公司的用户中心,用户中心提供用户注册,查询,修改等基础功能 。用户中心有一个接口 getUserByConditions ,该接口支持通过 「用户名」、「昵称」、「手机号」、「用户编号」查询用户基本信息。

我们使用的是 ibatis (mybatis 的前身), SQLMap 见上图 。当构建动态 SQL 查询时,条件通常会追加到 WHERE 子句后,而以 WHERE 1 = 1 开头,可以轻松地使用 AND 追加其他条件。

但用户中心在上线后,竟然每隔三四个小时就发生了内存溢出问题 ,经过通过和 DBA 沟通,发现高频次出现全表查询用户表,执行 SQL 变成 :

查看日志后,发现前端传递的参数出现了空字符串,笔者在代码中并没有做参数校验,所以才出现全表查询 ,当时用户表的数据是 1000万 ,调用几次,用户中心服务就 OOM 了。

笔者在用户中心服务添加接口参数校验 ,即:「用户名」、「昵称」、「手机号」、「用户编号」,修改之后就再也没有产生这种问题了。

2 思维进化

1、前后端同时做接口参数校验

为了提升开发效率,我们人为的将系统分为前端、后端,分别由两拨不同的人员开发 ,经常出现系统问题时,两拨人都非常不服气,相互指责。

有的时候,笔者会觉得很搞笑,因为这个本质是个规约问题。

要想系统健壮,前后端应该同时做接口参数校验 ,当大家都遵循这个规约时,出现系统问题的风险大大减少。

2、复用和专用要做平衡

笔者写的这个接口 getUserByConditions ,支持四种不同参数的查询,但是因为代码不够严谨,导致系统出现 OOM 。

其实,在业务非常明确的场景,我们可以将复用接口,拆分成四个更细粒度的接口 :

  • 按照用户 ID 查询用户信息
  • 按照用户昵称查询用户信息
  • 按照手机号查询用户信息
  • 按照用户名查询用户信息

比如按照用户 ID 查询用户信息 , SQLMAP 就简化为:

通过这样的拆分,我们的接口设计更加细粒度,也更容易维护 , 同时也可以规避 where 1 =1 产生的问题。

有的同学会有疑问:假如拆分得太细,会不会增加我编写 接口和 SQLMap 的工作量 ?

笔者的思路是:通过代码生成器动态生成,是绝对可以做到的 ,只不过需要做一丢丢的定制。

3、编写代码时,需要考虑资源占用量,做好预防性编程

笔者刚入行的时候,只是机械性的完成任务,并没有思考代码后面的资源占用,以及有没有可能产生恶劣的影响。

随着见识更多的系统,学习开源项目,笔者慢慢培养了一种习惯:

  • 这段代码会占用多少系统资源
  • 如何规避风险 ,做好预防性编程。

其实,这和玩游戏差不多 ,在玩游戏的时,我们经常说一个词,那就是意识。

上图,后裔跟墨子在压对面马可蔡文姬,看到小地图中路铠跟小乔的视野,方向是往下路来的,这时候我们就得到了一个信息。

知道对面的人要来抓,或者是协防,这种情况我们只有两个人,其他的队友都不在,只能选择避战,强打只会损失两名“大将”。

通过小地图的信息,并且想出应对方法,就是叫做“猜测意识”。

编程也是一样的,我们思考代码可能产生的系统资源占用,以及可能存在的风险,并做好防御性编程,就是编程的意识

4 写到最后

当我们在使用 :Mybatis +「where 1 = 1 」编程模式时,需要如下三点:

  1. 前后端同时做好接口参数校验 ;
  2. 复用和专用要做平衡,条件允许情况下将复用 SQLMap 拆分成更细粒度的 SQLMap ;
  3. 编写代码时,需要考虑资源占用量,做好预防性编程 ;

文章片段推荐:

生命就是这样一个过程,一个不断超越自身局限的过程,这就是命运,任何人都是一样,在这过程中我们遭遇痛苦、超越局限、从而感受幸福。

所以一切人都是平等的,我们毫不特殊。

--- 史铁生


如果我的文章对你有所帮助,还请帮忙点赞、在看、转发一下,你的支持会激励我输出更高质量的文章,非常感谢!

标签:OOM,编程,用户,接口,查询,线上,笔者,where
From: https://www.cnblogs.com/makemylife/p/18227578

相关文章

  • 英语学习笔记27——Mrs. Smith‘s living room
    Mrs.Smith’slivingroom史密斯太太的客厅词汇Vocabularylivingroom客厅都成:living=liveing生活room屋子搭配:inthelivingroom在客厅文化:西方人一般都在起居室活动,所以客厅很大,一般可以一起聊天,看球,下棋什么的。near在……附近【不直接挨着】例......
  • 多企业AI智能名片S2B2C商城小程序:线上线下融合新动力,实现做透与打爆的营销新篇章
    一、引言在当今的数字化时代,线上线下融合的商业模式已成为企业发展的重要趋势。为了更好地满足消费者需求,企业需不断探索新的营销策略。其中,“做透与打爆”的策略——即“线下做透一个店,线上打爆一个县”——为众多企业提供了宝贵的启示。多企业AI智能名片S2B2C商城小程序作为......
  • 2024ICPC武汉邀请赛E. Boomerang 题解
    E-Boomerang(动态维护树的直径+二分)分析代码实现#include<bits/stdc++.h>#ifdefLOCAL#include"algo/debug.h"#else#definedebug(...)42#endif#defineintlonglongusingEdge=int;structHLD{ intn,times=0; std::vector<int>siz,top,......
  • 参数设置错误导致的 OOM
    参数设置错误导致的OOM前言事故分析事故原因事故复盘前言2024年5月10日14时19分,C公司开发人员向A公司开发人员反映某开放接口从2024年5月10日14时许开始无法访问和使用。该系统为某基础数据接口服务,基于HTTP协议进行通信。按照惯例,首先排查......
  • WPF Image ZoomIn ZoomOut pan
    <Windowx:Class="WpfApp120.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • 232转Profinet网关接扫码枪与PLC通讯在物流分拣线上的应用
    一、背景随着生活节奏的加快,网络购物需求非常大,从而造成快递站需要快速提取快递信息已达到快速出站的效果,这就用到了扫码枪,扫码枪作为采集设备,能够迅速准确地读取货物信息。并将数据传输至PLC控制器,实现自动化分拣的功能。二、现场情况采用霍尼韦尔的扫码枪,需要接到PLC上,进行......
  • 构建未来|进击的元宇宙模式,打破线上线下界限
     元宇宙是指由虚拟世界、数字孪生和现实世界三个核心元素构成的综合体,具有高度沉浸和交互性,可以提供更为广泛和多样化的虚拟体验,并在现实中影响和塑造人们的生活。如今,随着科技不断发展,VR/AR、区块链、AI等众多技术的逐个成熟,元宇宙开始与现实世界紧密融合,元宇宙开发是指在元......
  • 陪玩系统音频社交系统语音直播系统短视频系统陪玩陪玩系统程序陪玩系统搭建陪玩源码开
    在当今的科技世界中,游戏已经成为了人们日常生活的一部分。随着移动设备的普及和网络的发展,各种类型的游戏应运而生,满足了不同人群的需求。然而,有一种新兴的游戏模式正在逐渐受到玩家们的欢迎,那就是“陪玩”系统。那么,什么是陪玩系统开发呢?本文将对此进行详细的探讨。一、陪玩......
  • DB Link导致SCN Headroom以及2012年1月的CPU或PSU补丁问题研究
    转自:https://www.cnblogs.com/dc-chen/p/7245290.htmlhttps://www.laoxiong.net/scn-ora-19706-_external_scn_rejection_threshold_hours-parameter.htmlhttps://www.modb.pro/db/4664https://www.iteye.com/blog/tianmaotalk-2437997一、基础概念1、SCN(SystemChangeNumb......
  • 4月冰箱行业线上市场销售数据分析
    家电行业内卷现象严重,企业之间在价格、营销和服务上进行激烈竞争,这种竞争态势可能导致整体家电市场需求承压,这需要品牌方做好一定的心理准备。尽管如此,消费者对于冰箱的需求还是以更新换代为主导,行业后市仍有较大潜力。此外,618促销期间,大家电市场整体承压,但冰箱产品焕新仍然受......