万无一失却实际上是形同虚设的代码逻辑漏洞

这是一则发生在某大厂的真实案例,出于脱敏名字这且不说。

这个系统因为第一次上线,流量非常的大。

所以需要灰度上线,所谓灰度方案很短,比如按照地理位置,先选择某个访问量小的地区比如西部青海。

然后逐步放量,几天以后增加几个省再看看,然后如果没问题扩大到全国。

灰度是没有问题的,也是必要的。

APP--->B系统--->新系统

这个系统提供了一个接口给B调用

由于B系统是全国开放,所以B的流量很大,B上面没有做地区限制,他的流量会都打到新系统上。

所以一开始不是青海的用户就不走这个系统的逻辑。

由于这个系统有自己的后台,运营人员在后台会设置不同地区的业务逻辑。

但是开发你也不知道运营是什么时候设置其他地区,这个灰度实际上是由运营来控制的。

所以开发人员就先从数据库进行查询已经设置的地区,把设计的地区直接缓存在JVM内存李,不在这个地区的都直接跳过,这样就不会走后面的业务逻辑也就是查库等等。

看起来一切没有问题,但是实际上出现了一个缺陷,就是上线之初运营人员自己测试的时候先设置了“全国”,然后又删除了这个配置,但是数据库是软删除,地区是存在一个关联表里。

开发人员没有对查询出来设置的地区进一步的限制,该地区必须是有效的,而不是已经删除的也就是地区信息要去配置表进行关联。

所以系统一上线,这个看似万无一失却形同虚设的优化点一点作用也没有。

问题本身不复杂,无非是代码逻辑不严谨,只测试了业务逻辑,没有测试这个灰度逻辑。

开发+测试 都有需要改进之处,实际上现实中千千万万的bug都是诸如此类的。

大厂线上案例复盘--代码漏洞相关推荐

  1. 分布式缓存的25个优秀实践与线上案例 done

    杨彪,蚂蚁金服技术专家,<分布式服务架构:原理.设计与实战>和<可伸缩服务架构:框架与中间件>作者.近10年互联网和游戏行业工作经验. 本文节选自即将出版的<可伸缩服务架 ...

  2. 如何更快的查找线上系统问题--多次重大线上事故复盘

    以前我以为,线上系统的问题,只需要好好检查代码即可找出原因,可是工作后发现,现实并非如此,往往线上系统的问题来源于信息不对称.这种信息不对称体现在团队成员之间没有好好沟通,了解彼此对系统的改动,以及跨 ...

  3. mysql group by 查询慢_MySQL慢查询优化(线上案例调优)

    PS:本文已收录到1.1K+ Star的开源项目<面试指北>,如果想要了解更多大厂面试相关的内容,请关注Github项目:https://github.com/NotFound9/inte ...

  4. 线上问题复盘报告模版

    [问题描述] [问题过程] [问题来源]:业务-A/产品-B [问题记录链接]: 发生时间: 发现时间: 定位时间: 恢复时间: 监控是否发现:是/否 [问题原因] 根本原因: [解决方案] [影响范 ...

  5. 如何使用Fiddler调试线上JS代码(转自:http://www.cnblogs.com/RockLi/p/3511132.html)

    大家平时肯定都用过火狐的Firebug或者谷歌的调试工具来调试JS,但遗憾的是我们不能像编辑html,css那样来直接新增或者删除JS代码. 虽然可以通过调试工具的控制台来动态执行JS代码,但有时候却 ...

  6. git线上服务器_pm2实现git仓库代码一键配置部署到线上服务器

    第一步 先实现 ssh的免密登录远程服务器: 第二步 初始化项目, 并把项目部署到git仓库 下面用几个最简单的项目做演示, 项目目录下面就这个三个文件 把项目部署到git仓库,记住git仓库地址 比 ...

  7. 前端代码 Jenkins 线上打包报错:TypeError: StackFrame is not a constructor

    两个月没来公司上班,今日开工遇到一个及其有意思的问题:Jenkins 线上打包前端代码,在控制台日志中打包的时候报错: When setting `useBuiltIns: 'usage'`, pol ...

  8. 线上服务的FGC问题排查,看这篇就够了!

    线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力.同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验. 过去半年时间里,我们的广告 ...

  9. Java线上问题排障:Linux内核bug引发JVM死锁导致线程假死

    Java本质上还是离不开操作系统,一来Java源码是用C/C++实现的,二来java进程还是需要依附于操作系统和硬件资源,有时候一些问题是操作系统级别导致的,下面的整个事件是源自一则真实的线上案例. ...

最新文章

  1. appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)...
  2. 关系类型总结和对应的注解
  3. 快速安装及部署DRBD
  4. 题目3:文本文件单词的检索与计数(实现代码)
  5. sql数据迁移到oracle数据库,从Oracle到SQL Server数据库主键的迁移
  6. python运算学习之Numpy ------ 数组的切片索引与循环遍历、条件和布尔数组、形状变化...
  7. 曙光服务器优势,5大核心优势 探秘曙光Cloudview三大平台
  8. 满足条件的数累加(信息学奥赛一本通-T1066)
  9. java中实体类中实现Serializable接口的作用
  10. 表锁 行锁 页锁 是什么区别
  11. 简明python教程gitbook_简明Python教程|中英文mobi epub pdf|源代码
  12. 洛谷P4707 重返现世 kMAX-MIN反演+DP
  13. 移动端300ms延迟_移动端300ms延迟的解决方法
  14. c#程序设计实训报告心得体会_关于实训的心得体会4篇
  15. foxmail怎么设置服务器才能登陆网易企业邮箱
  16. 让电脑死机c语言,秘技:如何悄无声息的让一台电脑死机
  17. Oracle表空间碎片查询以及整理
  18. Linux--内核版本和发行版本
  19. python数据导入与清洗_Python学习之 数据清洗之增删改查
  20. 首个中文全词类知识库-百科知识树 开源啦!搭配开源标注工具,一招搞定知识关联!...

热门文章

  1. 综合计算机考试题库,2017年职称计算机考试综合试题模拟题库5
  2. java数据和窗口怎么结合_卖jsp编程技巧的那个垃圾的所有实例的答案全部
  3. java struts2 excel上传_Java Struts2 实现数据库数据导出Excel文件
  4. MySQL面试题 | 附答案解析(十三)
  5. 通过h5页面上传视频到Linux服务器
  6. VS2015 win64下配置Opencv3.4.7
  7. 基于双门限法的端点检测
  8. 奇葩错误:不同变量名称相同
  9. 在CentOS 6.3 64bit上为Apache Traffic Server 4.2.3挂载SSD并压测
  10. Maya 2022中的硬表面建模技术学习视频教程