1.立项背景:在线机票代理商,不在使用第三方管理系统,要组建公司内部技术团队,构建自己公司的管理系统,实现各种公司自定义业务
2.软件功能:自动从平台完成导单,自动完成出票,退票,改签,提供业务数据统计报表查询和导出;
3.业务流程:从平台拉单(拉出票,退票,改签相关订单),然后完成业务订单的处理,把相关结果调用平台接口,反馈给平台;
1.整体架构和思路:springboot+shiro+mybatis+sharding-jdbc+postgresql+redis+layui+JWT+MINIO
layui后台管理后台页面框架覆盖管理页面功能,shiro提供权限管理功能,JWT增加后台接口鉴权保障系统安全,登录增加图形验证码+邮件验证码多维度校验;mybatis+sharding-jdbc为存储千万级业务数据提供支撑,postgresql做业务数据冗余,提升大量数据的查询速度;redis做缓存,以及做自动出票的消息队列;MINIO提供附件存储和下载功能;
2.负责模块:从0到1,涉及整体模块:系统管理(各种基础资料,权限,角色,菜单管理),业务管理(出票订单,退票订单,改签订单),报表统计管理(订单报表,退票报表,改签报表);能实现 业务订单自动导单,自动出票,支撑保留2年内的业务历史数据,提供数据查询和导出;
3.遇到的难点:由于订单模块涉及到的数据量会越来越大,一年的历史数据量会达到千万级别,要解决订单业务数据的写入存储问题,以及订单明细报表的查询速度问题;
引入sharding-jdbc,对订单业务相关表进行分表,解决千万数据量存储问题;
引入postgresql,对订单明细报表做冗余,提升10几个查询条件下的大数据量查询速度,从以前的十几秒速度提升到现在的500毫秒左右;
自动出票需要快速消化订单任务量,用redis做消息队列,按业务步骤拆分为多个消费者定时任务,同步进行,提升消化处理速度;目前能支撑1分钟消化60个订单的处理;(每个订单单线程处理,涉及而第三方接口,需要40几秒到70几秒左右)