answerBi-backend/README.md

153 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AnswerBi
## 项目技术栈
### 后端
- SpringBoot
- MySQL
- Redis
- MyBatis + MyBatis Plus 数据访问框架
- 消息队列RabbitMQ
- 限流(实现了分别基于Guava和Redisson的单机和分布式两种限流)
- AI能力 (Open AI接口 / **[鱼聪明AI SDK](https://github.com/liyupi/yucongming-java-sdk)** )
- Easy Excel
- Swagger + Knife4j 接口文档
- Hutool 工具库
### 前端
- React
- Umi + Ant Design Pro
- 可视化开发库 (Echarts)
- Umi openapi 代码生成
## 业务功能
用户数据分析者只需要导入最原始的数据集excel文件输入想要进行分析的目标比如帮我分
析一下网站的增长趋势)就能利用AI自动生成一个符合要求的图表以及结论。
![智能分析](doc/function.png)
保留了同步和异步两种方式
- **同步**: 用户需要等待AI生成结果
- **异步**: 上传后即时返回提示,告知用户“您的数据正在分析,请稍后在我的图表页面查看”,提升用户体验
### 流程架构设计
- 同步
![同步架构](doc/baseSiteStructure.png)
- 异步
![异步架构](doc/asyncSiteStructure.png)
## 本地运行
### [后端](https://gitee.com/anscoder/answerBi-backend)
#### MySQL 数据库
1修改 `application.yml` 的数据库配置为你自己的:
```yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_db
username: root
password: 123456
```
2执行 `sql/create_table.sql` 中的数据库语句,自动创建库表
#### Redis
1修改 `application.yml` 的 Redis 配置为你自己的:
```yml
spring:
redis:
database: 1
host: localhost
port: 6379
timeout: 5000
password: 123456
```
2移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数:
修改前:
```java
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
```
修改后:
```java
@SpringBootApplication
```
#### RabbitMq
修改 `application.yml` 的 RabbitMq 配置为你自己的
```yml
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
```
#### 鱼聪明AI
修改 `application.yml` 的 鱼聪明AI 配置为你自己的
```yml
yuapi:
client:
access-key: xxx
secret-key: xxx
```
配置完成启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档
> **ENC加密配置文件中的内容**
>
> 1) 使用EncryptorTest.java对你需要加密的内容加密获取密文在配置文件进行替换
> ```yaml
> spring:
> datasource:
> password: ENC(加密后的密文)
> ```
> 2) 启动时指定环境变量 ${ENCRYPTOR_PASSWORD}
> - idea
> ![启动配置](doc/runConfig.png)
> - 命令行启动
> ```shell
> java -jar answerBi-backend.jar --ENCRYPTOR_PASSWORD=xxx
> ```
### [前端](https://gitee.com/anscoder/answer-bi-frontend)
1执行 npm install 或 yarn 安装依赖
```shell
npm install
```
或者
```shell
yarn
```
2运行项目
```shell
yarn run dev
```
## 后续计划
- [x] 使用死信队列处理异常情况,将图表生成任务置为失败
- [x] 引入Guava RateLimiter(单机) 和 Redisson RateLimiter(分布式) 两种限流机制 (在请求方法上添加注解即可限流,方便快捷)
- [x] 支持用户对失败的图表进行手动重试
- [x] 引入redis缓存提高加载速度
- [x] 引入jasypt encryption 对配置文件加密、解密
- [x] 给任务执行增加 guava Retrying重试机制保证系统可靠性
(guava Retrying 要使用 AttemptTimeLimiters.fixedTimeLimit()设置固定时间的超时限制 时需要 保证 guava版本在22或22以下)
- [ ] 定时任务把失败状态的图表放到队列中(补偿机制)
- [ ] 给任务的执行增加超时时间,超时自动标记为失败(超时控制)
- [ ] 图表数据分表存储,提高查询灵活性和性能
- [ ] 任务执行结果通过websocket实时通知给用户
- [ ] 我的图表管理页增加一个刷新、定时刷新的按钮,保证获取到图表的最新状态(前端轮询)