万无一失却实际上是形同虚设的代码逻辑漏洞
这是一则发生在某大厂的真实案例,出于脱敏名字这且不说。
这个系统因为第一次上线,流量非常的大。
所以需要灰度上线,所谓灰度方案很短,比如按照地理位置,先选择某个访问量小的地区比如西部青海。
然后逐步放量,几天以后增加几个省再看看,然后如果没问题扩大到全国。
灰度是没有问题的,也是必要的。
APP--->B系统--->新系统
这个系统提供了一个接口给B调用
由于B系统是全国开放,所以B的流量很大,B上面没有做地区限制,他的流量会都打到新系统上。
所以一开始不是青海的用户就不走这个系统的逻辑。
由于这个系统有自己的后台,运营人员在后台会设置不同地区的业务逻辑。
但是开发你也不知道运营是什么时候设置其他地区,这个灰度实际上是由运营来控制的。
所以开发人员就先从数据库进行查询已经设置的地区,把设计的地区直接缓存在JVM内存李,不在这个地区的都直接跳过,这样就不会走后面的业务逻辑也就是查库等等。
看起来一切没有问题,但是实际上出现了一个缺陷,就是上线之初运营人员自己测试的时候先设置了“全国”,然后又删除了这个配置,但是数据库是软删除,地区是存在一个关联表里。<