问题是这样的:开始有一个功能因为处理流程比较复杂,中间需要对接其他平台,自然在整个访问的稳定性以及访问延迟难以保障,甚至还会出现http连接错误,已经导致服务变慢,其他服务也受到影响不能正常稳定提供服务。此外在高并发下,这个功能业务是需要在同一事务执行。
我认为这个服务可以解耦合,情况比较紧急,所以我起草了一个方案提交通过之后就开始动手了。首先我把这个功能的承载业务的入口和返回结果的出口函数给分离开,使用kafka作为队列保存业务信息,用户提交信息既可。kafka队列实时监听,获取到消息之后就开始处理业务函数保证一个事务一个锁执行。后台处理也可以允许更长时间的轮询。但是这里我把消费者与生产者放到一个服务中,原本不会有问题,在测试环境一切正常。为保证稳定性,我自己还做了一下压力测试,显示正常稳定。
于是,上线开始服务,问题出现了。消费者开始工作了一会儿,没有消费了,kafka待消费数量开始上涨,这个情况开始出现一刹那,就感觉不对。于是,查看代码,添加检索日志,更新在测试环境,测试环境依旧没有问题。上传代码,上线,最后加一句关键的sleep(0.03)(kafka python 启动蜜汁操作)。查看后台kafka数据,果然开始又开始消费了,比之前好一些,从之前断开的偏移量开始,数据没有丢失,也没有重复消费。但是,一个时间点消费到零之后,消费者不消费了,处于一个假死状态。