【立项背景和目标】:
这是一个支持多租户的线上培训平台,可以为客户提供拉一批人在线学习、在线考试、在线收集问卷的功能。管理过程、人员学习过程和结果均留痕,并支持根据任务完成情况发放积分、证书等激励。权限功能丰富,支持配置多种管理员。部署方式灵活,可单体部署,也可以微服务架构部署。
【软件功能】:
1.计划管理:建立培训计划,可关联多个项目;
2.项目管理:项目自身有标题、描述、管理员、结束方式及结束时间等字段。项目下有多个子功能,如:项目成员管理、任务管理、关联证书等。可查询成员完成情况、任务完成情况,并支持导出到excel。可展示成员完成率、任务完成率等统计项。
3.项目成员管理:支持多种方式添加成员,如:直接添加人员、通过excel导入、通过部门添加、通过用户组添加等;成员记录支持导出到excel。
4.任务管理:任务包含课程、作业、考试、问卷、活动等。每种任务均可拆分为单独的微服务,可独立扩展,任务可配置积分、学分和证书等激励,供人员完成任务时获得。
5.证书管理:可根据证书模板自定义背景图案、证书编号生成方式、证书文本内容等。
【业务流程】:
管理端:创建培训计划(可选),创建培训项目,添加项目成员或开放报名,创建任务,关联证书(可选),发布项目。
用户端:查看项目(包含可报名的项目和已参加的项目),做任务,查看完成情况,查看已获得的各种激励。
【整体架构和设计思路】:
技术栈:Spring Boot、Mybatis、MyBatisPlus、PostgreSQL、Redis、Kafka、Nacos、OpenFeign、LoadBalancer、Gateway、JCasbin、sa-token
1、项目代码分为以下几个模块:网关模块、权限模块、管理端bff、用户端bff、项目模块、课程模块、问卷模块、证书模块、活动模块、作业模块、用户模块。
2、各模块间调用通过方法调用/http/rpc等方式,具体取决于部署方式。
3、任务的完成与否由每个任务模块自身提供结果,用户做任何任务均发布一个mq消息,项目模块订阅每种任务的完成情况消息并更新用户任务的完成进度,证书模块订阅每种任务的完成消息并发放证书。
【负责模块和结果】:
管理端bff、用户端bff、项目模块、问卷模块、证书模块、作业模块、用户模块
【难点及解决方案】:
难点:kafka消息丢失导致各模块间数据不一致。
解决方案:
1、业务操作与消息持久化在同一个本地事务中;
2、消息发布器独立重试,直到成功发送到Kafka,确保消息最终进入消息中间件;
3、Kafka自身通过副本机制持久化消息,即使Broker宕机也不会丢失已提交的消息;
4、消费者通过幂等表保证同一条消息不会重复处理,即使因重试或重复投递也不会造成业务错误;
5、手动提交偏移量确保消息处理成功后才标记消费进度,避免因消费者崩溃导致消息未处理却被认为已消费;
6、额外通过定时任务每天比对一次各模块数据是否一致,如有不一致则进行相应处理,确保数据最终一致。