需求:客户需要调用我们的接口新增人员,要求10分钟增加10W人,每批次100人,每次调用结束后调用下一次。
第一次
部署同步接口,逻辑测试功能正常,未大批量测试
问题:速度太慢,不满足客户需要
第二次
改为异步接口,收到请求即返回,收到之后异步处理
问题:系统在几万人推送的时候崩溃,实际业务处理同样很慢
第三次
以为大批量异步处理,业务处理不过来,改为接收客户请求后发送kafka消息,同步写一个接收kafka的业务处理,缓解处理消息的压力
问题:同样崩溃
第四次
分析了内存占用等日志,判断是算法调用有内存溢出的情况,暂时注销算法调用接口,至此单体项目的新增人员解决,时间耗时为10分钟处理12000多人
第五次
问题:因为业务数据较大,系统改用部署集群环境,推送人员发现到5W人左右停滞不前
过程:先后多次自测发现,单次请求处理时间较大,以及有重复消费的问题。
解决:
1. 分析日志,优化相应处理慢的代码逻辑,增加相应的索引,减少每一批处理问题的时间。
2. 优化kafka接发方式,延长auto-commit-interval每一波执行时间,根据partitionpart和offset预防重复消费的处理,经过几次测试后,10W人数据达到20分钟内的速度,解决问题并部署