天天看点

记一次重构实战的逻辑梳理记录业务需求逻辑整理改造前改造后程序运行速度对比

最近聚餐,小七被公司公认代码写的很优雅的朱大神表扬了,说看了这么多代码,就只有邀请短信那个功能的多线程用的好,这里把重构这块代码的思路写出来,毕竟思考一整天,编程半小时,重要的是思维。

业务需求

起飞前一定时间内,给满足条件的旅客发送可升舱信息。

逻辑整理

(1)查询可升舱航班(集合)

(2)查询每一个航班下可升舱旅客(集合)

(3)过滤旅客

(4)给满足条件的旅客,发送邀请升舱的短信

改造前

1、未做幂等和加锁,同一个接口,调多次,会造成数据积压和数据错误。

2、判断是否已经邀请,直接通过数据库查询,数据库压力过大。

3、发送短信需要旅客姓名,需要调用另一个接口获取旅客中文姓名,且接口调用时间过长需要1s左右。

4、整个接口都是同步的,包括发送短信。

5、数据入库时,是一条一条存储的。

改造后

1、增加分布式锁,防并发。

2、增加redis缓存。过滤数据,减少与数据库的操作,且查询时先通过缓存查找,提高系统吞吐量。

3、启用多线程调用第三方接口,并组装数据,提升效率。

4、使用mq解耦异步发送短信,因为发送结果不是重点,异步同步即可。

5、使用mysql批量插入,减少与数据库的交互。

程序运行速度对比

改造前,一个航班,100名乘客,邀请时长5-10分钟左右。

改造后,一个航班,100名乘客,初始化邀请需要2分钟(第一次邀请),第二次邀请2-4秒左右。