大数据平台测试-一次生产P2故障记录

项目介绍:某鉴权项目。公司为了数据安全,去年评审通过了一个基于中间件kafka的鉴权项目,大概的意思,消费topic的应用需要对接鉴权项目,订阅应用,启动端口9093消费(默认是9092端口),当时大家(开发)都觉得风险太大了,不适合接入公司核心kafka集群。万一出错影响太大。但是领导,技术委员会通过了,大家也没啥办法,谁叫大家都是执行者。。。

先看出现生产事故的java代码:

    @Override
    public class process(WatchEvent event){
        Event.KeeperState state = event.getState();
        if(Event.KeeperState.SyncConnected = state)
            log.info("当前 Zookeeper 已连接")
    } else if(Event.KeeperState.DisConnected == state || Event.KeeperState.Expired == state)
            log.info(" XX项目服务端 和Zookeeper 断开连接,开始重连")
            try{
                client = new Zookeepe(servers, MAX_VALUE, null)// 这一行代码导致的故障
                // 其他逻辑
            } catch(...){
                // 手动抛异常
            } catch(...){
                // 手动抛异常
    } else{
                //...
    }

事故原因:XX鉴权模块存在bug,在ZK客户端和服务端失联时,处理逻辑中又创建了新的ZK连接,且未关闭旧的失效连接,短时间连接数量大量上升,引起Zookeeper集群压力过高,导致Zookeeper集群故障和kafka集群发生故障

分析:1、 开发时,开发不熟悉Zookeeper机制,process方法中已创建了连接,自己重新new 相当于不断地创建连接。而且还有一个大bug,连接没有关闭。。。

2、代码逻辑属于异常分支,开发和测试时都未测试,因为大家都觉得这一段代码都走不到,刚好运维把机器重启了,就走到这段逻辑了。。。

3、没有进行code review,技术负责人没有进行代码把关

4、代码属于一个紧急开关模块,该模块我们也以为是永远用不到的。。(数据库崩溃、服务崩溃。。。)

影响:影响公司核心业务,几万单,需要转人工处理,P2故障

后果:项目关停。。团队一年多的努力就这样白费了

总结:作为技术负责人,重要业务代码需进行详细的code review。作为测试,可以通过代码覆盖率工具看这段代码是否覆盖,未覆盖到的代码发到群里评审。另外,基于中间件的项目,风险是真的高。。。接入核心业务要慎重,谁能保证系统没有bug呢?但是有bug会对业务造成重大影响的项目还是要技术委员会做好把关

你可能感兴趣的:(大数据平台测试,Spring,Boot,kafka,Zookeeper,中间件,生产故障)