大学🎓系统性能差、可扩展性低、易用性差已是共识。网站应该回归到为用户服务的本质,在此背景下,教务公告检索系统应运而生。本系统解决师生对于教务公告检索的需求,实现高效检索🔍、AI问答🤖、用户点评💭等一站式功能。下面给出功能模块图如下
项目后端所用技术架构概览👀
前端:
Vue3框架、Element-Plus组件库
后端:
开发框架:Spring Cloud2023、Spring Cloud Alibaba2023、SpringBoot3.2.4
数据库:Redis、ElasticSearch8.11、MySQL
中间件:RabbitMQ消息队列、OpenFeign远程调用、分布式任务调度框架 xxl-job
其他:SpringAI框架调用OpenAI生成式AI接口、Python爬虫技术🕷️
-
SpringCloud Gateway网关实现
用户鉴权
、跨域解决
、接口文档聚合
-
Elastic Search+Redis实现高效检索,10w级数据量检索,从传统数据库查询大于30s优化到—>命中缓存情况下小于100ms,不命中缓存小于1s。
-
xxl-job定时任务结合python爬虫实现
教务网站数据库数据
、MySQL
、Redis
、Elastic Search
四者的增量和全量同步 -
RabbitMQ进行AI生成建议的消息调用,实现异步解耦。使用SpringAI框架封装的开箱即用的OpenAI接口,实现进一步聊聊功能。
项目欢迎任何形式的贡献
工具:jmeter、apipost
使用redis缓存在用户同时搜索一个关键词时,测试报告如下:
硬件配置:4h8g服务器,es堆内存配置1G
本地测试结果表明,在3000并发时,前99.99%的用户响应时间可以控制在1.2s以内。但在线上环境时,只在500并发时,时间在可以容忍的范围内(200并发时时间小于1s),分析原因是因为服务器硬件配置不足、服务器网络上行不足、网络传输延迟等原因。
解决方案可以加机器、加配置。目前项目瓶颈在服务器而非数据库这边
- 本地测试,时间稳定在1s以下,在3000并发时,错误率明显上升。
不使用缓存,3000并发下,本地QPS和响应时间下降4倍左右,由此可见,虽然es也有缓存,但是redis缓存也是有一定必要的
- 在无可用线程时,连接会直接拒绝,解决方案:
- 增加最大线程数(默认是100)
- 加机器
- 改变数据库连接池的大小(默认几十),优化逻辑,每个请求执行快一点(这里已经到顶了)
- 4h8g服务器,给的es堆内存只有1G。
100并发下,QPS达到了80,平均响应时间在100ms左右
500并发下,QPS在40左右徘徊,等待最后几个请求时出现明显卡顿,平均响应时间增加到了4s
1000并发下,与500个用户类似,起初请求QPS在40左右,处理后续请求有明显卡顿,平均响应时间增加到了11s
2000并发下,QPS15,平均响应时间20s,第一次出现error
增加到4000以后,错误率明显上升达到30%,错误信息为连接超时
由于后端涉及到中间件较多,请观看B站视频启动项目与预览项目:iSchool项目介绍
项目预览如下:
搜索页
AI问答页
社区模块页
评论页
个人中心页
欢迎页