更新 wiki
This commit is contained in:
@@ -7,18 +7,34 @@
|
||||
- [internal/config/database.go](file://internal/config/database.go)
|
||||
- [internal/config/meilisearch.go](file://internal/config/meilisearch.go)
|
||||
- [internal/config/redis.go](file://internal/config/redis.go)
|
||||
- [internal/config/s3.go](file://internal/config/s3.go)
|
||||
- [internal/cache/redis.go](file://internal/cache/redis.go)
|
||||
- [internal/cache/curve_cache.go](file://internal/cache/curve_cache.go)
|
||||
- [internal/cache/share_code_cache.go](file://internal/cache/share_code_cache.go)
|
||||
- [internal/search/meilisearch.go](file://internal/search/meilisearch.go)
|
||||
- [internal/database/mysql.go](file://internal/database/mysql.go)
|
||||
- [internal/router/router.go](file://internal/router/router.go)
|
||||
- [internal/middleware/cache_control.go](file://internal/middleware/cache_control.go)
|
||||
- [internal/middleware/logger.go](file://internal/middleware/logger.go)
|
||||
- [internal/middleware/request_id.go](file://internal/middleware/request_id.go)
|
||||
- [internal/handler/model_list.go](file://internal/handler/model_list.go)
|
||||
- [internal/handler/model_csv.go](file://internal/handler/model_csv.go)
|
||||
- [internal/handler/curve.go](file://internal/handler/curve.go)
|
||||
- [internal/repository/model.go](file://internal/repository/model.go)
|
||||
- [internal/storage/s3.go](file://internal/storage/s3.go)
|
||||
- [pkg/logger/logger.go](file://pkg/logger/logger.go)
|
||||
- [README.md](file://README.md)
|
||||
</cite>
|
||||
|
||||
## 更新摘要
|
||||
**所做更改**
|
||||
- 新增 S3 存储支持章节,介绍 AWS S3 集成与 CSV 数据读取
|
||||
- 增强缓存控制中间件章节,详细说明 HTTP 缓存策略配置
|
||||
- 改进日志系统章节,更新日志配置与中间件功能
|
||||
- 更新基础设施架构图,反映新增的 S3 组件
|
||||
- 新增 S3 存储与缓存控制中间件的使用示例
|
||||
- 更新配置清单,包含 S3 相关配置项
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
@@ -32,14 +48,14 @@
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件聚焦于 Luxsin 应用 API 的基础设施组件,系统性阐述缓存系统(Redis)、搜索引擎(Meilisearch)与日志系统(Zap)的配置、初始化流程、连接管理、配置项与运行时行为,并结合实际代码路径说明组件间的协作关系与数据流向。同时提供性能优化建议、监控告警与扩展性设计思路、安全注意事项以及可操作的排障指引。
|
||||
本文件聚焦于 Luxsin 应用 API 的基础设施组件,系统性阐述缓存系统(Redis)、搜索引擎(Meilisearch)、日志系统(Zap)与新增的 S3 存储系统的配置、初始化流程、连接管理、配置项与运行时行为,并结合实际代码路径说明组件间的协作关系与数据流向。同时提供性能优化建议、监控告警与扩展性设计思路、安全注意事项以及可操作的排障指引。
|
||||
|
||||
## 项目结构
|
||||
应用采用分层与按功能模块划分的组织方式:
|
||||
- 入口层:cmd/server/main.go 负责加载配置、初始化日志、数据库、搜索引擎与缓存客户端,并启动 HTTP 服务。
|
||||
- 配置层:internal/config/* 提供配置加载与校验逻辑,支持从环境变量或默认值读取数据库、Redis、Meilisearch 参数。
|
||||
- 基础设施接入:internal/database/mysql.go、internal/cache/redis.go、internal/search/meilisearch.go 封装底层驱动与 SDK 初始化。
|
||||
- Web 层:internal/router/router.go 注册路由与中间件;internal/middleware/* 提供请求 ID、日志与 CORS 中间件。
|
||||
- 入口层:cmd/server/main.go 负责加载配置、初始化日志、数据库、搜索引擎、缓存客户端与 S3 存储,并启动 HTTP 服务。
|
||||
- 配置层:internal/config/* 提供配置加载与校验逻辑,支持从环境变量或默认值读取数据库、Redis、Meilisearch、S3 参数。
|
||||
- 基础设施接入:internal/database/mysql.go、internal/cache/redis.go、internal/search/meilisearch.go、internal/storage/s3.go 封装底层驱动与 SDK 初始化。
|
||||
- Web 层:internal/router/router.go 注册路由与中间件;internal/middleware/* 提供请求 ID、日志、CORS 与缓存控制中间件。
|
||||
- 业务处理:internal/handler/* 与 internal/repository/* 实现具体业务逻辑。
|
||||
- 日志封装:pkg/logger/logger.go 提供生产/开发两种日志配置。
|
||||
|
||||
@@ -50,26 +66,27 @@ main --> logpkg["pkg/logger/logger.go<br/>日志初始化"]
|
||||
main --> dbinit["internal/database/mysql.go<br/>数据库初始化"]
|
||||
main --> msinit["internal/search/meilisearch.go<br/>搜索引擎初始化"]
|
||||
main --> rdinit["internal/cache/redis.go<br/>缓存初始化"]
|
||||
main --> s3init["internal/storage/s3.go<br/>S3存储初始化"]
|
||||
main --> router["internal/router/router.go<br/>路由与中间件"]
|
||||
router --> cachecontrol["internal/middleware/cache_control.go<br/>缓存控制中间件"]
|
||||
router --> handlers["internal/handler/*<br/>处理器"]
|
||||
handlers --> repos["internal/repository/*<br/>仓储层"]
|
||||
```
|
||||
|
||||
图示来源
|
||||
- [cmd/server/main.go:22-96](file://cmd/server/main.go#L22-L96)
|
||||
- [internal/config/config.go:18-52](file://internal/config/config.go#L18-L52)
|
||||
- [internal/database/mysql.go:14-46](file://internal/database/mysql.go#L14-L46)
|
||||
- [internal/search/meilisearch.go:17-20](file://internal/search/meilisearch.go#L17-L20)
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
**图表来源**
|
||||
- [cmd/server/main.go:38-140](file://cmd/server/main.go#L38-L140)
|
||||
- [internal/config/config.go:24-71](file://internal/config/config.go#L24-L71)
|
||||
- [internal/storage/s3.go:20-39](file://internal/storage/s3.go#L20-L39)
|
||||
- [internal/router/router.go:22-82](file://internal/router/router.go#L22-L82)
|
||||
- [internal/middleware/cache_control.go:11-17](file://internal/middleware/cache_control.go#L11-L17)
|
||||
|
||||
章节来源
|
||||
- [cmd/server/main.go:22-96](file://cmd/server/main.go#L22-L96)
|
||||
- [internal/config/config.go:18-52](file://internal/config/config.go#L18-L52)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
**章节来源**
|
||||
- [cmd/server/main.go:38-140](file://cmd/server/main.go#L38-L140)
|
||||
- [internal/config/config.go:24-71](file://internal/config/config.go#L24-L71)
|
||||
- [internal/router/router.go:22-82](file://internal/router/router.go#L22-L82)
|
||||
|
||||
## 核心组件
|
||||
本节概述三大基础设施组件的职责、初始化与配置要点。
|
||||
本节概述四大基础设施组件的职责、初始化与配置要点。
|
||||
|
||||
- Redis 缓存
|
||||
- 职责:提供键值存储能力,用于热点数据缓存、会话或临时状态存储。
|
||||
@@ -88,16 +105,24 @@ handlers --> repos["internal/repository/*<br/>仓储层"]
|
||||
- 初始化:入口处按环境创建日志实例;中间件在每次请求结束时输出请求级日志。
|
||||
- 关键配置:环境变量控制生产/开发模式,时间编码等细节可定制。
|
||||
|
||||
章节来源
|
||||
- S3 存储
|
||||
- 职责:提供对象存储能力,用于频响 CSV 数据的存储与读取。
|
||||
- 初始化:根据环境变量加载 AWS 凭证与区域配置,创建 S3 客户端。
|
||||
- 关键配置:桶名、区域、访问密钥 ID、秘密访问密钥。
|
||||
- 使用场景:曲线数据读取、CSV 文件存储与访问。
|
||||
|
||||
**章节来源**
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
- [internal/config/redis.go:16-56](file://internal/config/redis.go#L16-L56)
|
||||
- [internal/search/meilisearch.go:17-45](file://internal/search/meilisearch.go#L17-L45)
|
||||
- [internal/config/meilisearch.go:14-50](file://internal/config/meilisearch.go#L14-L50)
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||||
- [internal/storage/s3.go:20-39](file://internal/storage/s3.go#L20-L39)
|
||||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||||
|
||||
## 架构总览
|
||||
下图展示应用启动阶段如何初始化三大基础设施,并在运行期如何被业务层调用。
|
||||
下图展示应用启动阶段如何初始化四大基础设施,并在运行期如何被业务层调用。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
@@ -107,24 +132,27 @@ participant Log as "日志(pkg/logger)"
|
||||
participant DB as "数据库(mysql.go)"
|
||||
participant MS as "搜索引擎(meilisearch.go)"
|
||||
participant RD as "缓存(redis.go)"
|
||||
participant S3 as "S3存储(s3.go)"
|
||||
participant Router as "路由(router.go)"
|
||||
Entrypoint->>Cfg : 加载配置
|
||||
Entrypoint->>Log : 创建日志实例
|
||||
Entrypoint->>DB : 初始化数据库连接
|
||||
Entrypoint->>MS : 初始化搜索引擎客户端
|
||||
Entrypoint->>RD : 初始化缓存客户端
|
||||
Entrypoint->>S3 : 初始化S3存储客户端
|
||||
Entrypoint->>Router : 注册路由与中间件
|
||||
Router-->>Entrypoint : 返回 HTTP 引擎
|
||||
```
|
||||
|
||||
图示来源
|
||||
- [cmd/server/main.go:22-64](file://cmd/server/main.go#L22-L64)
|
||||
- [internal/config/config.go:18-52](file://internal/config/config.go#L18-L52)
|
||||
**图表来源**
|
||||
- [cmd/server/main.go:41-110](file://cmd/server/main.go#L41-L110)
|
||||
- [internal/config/config.go:24-71](file://internal/config/config.go#L24-L71)
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
- [internal/database/mysql.go:14-46](file://internal/database/mysql.go#L14-L46)
|
||||
- [internal/search/meilisearch.go:17-20](file://internal/search/meilisearch.go#L17-L20)
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
- [internal/storage/s3.go:20-39](file://internal/storage/s3.go#L20-L39)
|
||||
- [internal/router/router.go:22-82](file://internal/router/router.go#L22-L82)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
@@ -155,15 +183,15 @@ ReturnCache --> End(["完成"])
|
||||
ReturnResult --> End
|
||||
```
|
||||
|
||||
图示来源
|
||||
**图表来源**
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
- [internal/config/redis.go:16-56](file://internal/config/redis.go#L16-L56)
|
||||
- [cmd/server/main.go:56-57](file://cmd/server/main.go#L56-L57)
|
||||
- [cmd/server/main.go:74-80](file://cmd/server/main.go#L74-L80)
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
- [internal/config/redis.go:16-56](file://internal/config/redis.go#L16-L56)
|
||||
- [cmd/server/main.go:56-57](file://cmd/server/main.go#L56-L57)
|
||||
- [cmd/server/main.go:74-80](file://cmd/server/main.go#L74-L80)
|
||||
|
||||
### Meilisearch 搜索组件
|
||||
- 初始化流程
|
||||
@@ -192,14 +220,14 @@ Search-->>Handler : 列表
|
||||
Handler-->>Client : JSON 或 Base64 响应
|
||||
```
|
||||
|
||||
图示来源
|
||||
- [internal/handler/model_list.go:26-56](file://internal/handler/model_list.go#L26-L56)
|
||||
**图表来源**
|
||||
- [internal/handler/model_list.go:26-67](file://internal/handler/model_list.go#L26-L67)
|
||||
- [internal/search/meilisearch.go:22-45](file://internal/search/meilisearch.go#L22-L45)
|
||||
- [internal/config/meilisearch.go:14-50](file://internal/config/meilisearch.go#L14-L50)
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [internal/search/meilisearch.go:17-45](file://internal/search/meilisearch.go#L17-L45)
|
||||
- [internal/handler/model_list.go:26-56](file://internal/handler/model_list.go#L26-L56)
|
||||
- [internal/handler/model_list.go:26-67](file://internal/handler/model_list.go#L26-L67)
|
||||
- [internal/config/meilisearch.go:14-50](file://internal/config/meilisearch.go#L14-L50)
|
||||
|
||||
### 日志系统(Zap)
|
||||
@@ -226,16 +254,95 @@ LogWarn --> End
|
||||
LogInfo --> End
|
||||
```
|
||||
|
||||
图示来源
|
||||
**图表来源**
|
||||
- [internal/middleware/request_id.go:20-30](file://internal/middleware/request_id.go#L20-L30)
|
||||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||||
- [internal/middleware/logger.go:10-52](file://internal/middleware/logger.go#L10-L52)
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [pkg/logger/logger.go:8-19](file://pkg/logger/logger.go#L8-L19)
|
||||
- [internal/middleware/logger.go:10-45](file://internal/middleware/logger.go#L10-L45)
|
||||
- [internal/middleware/logger.go:10-52](file://internal/middleware/logger.go#L10-L52)
|
||||
- [internal/middleware/request_id.go:20-30](file://internal/middleware/request_id.go#L20-L30)
|
||||
|
||||
### S3 存储组件
|
||||
- 初始化流程
|
||||
- 根据环境变量加载 AWS 凭证与区域配置,创建 S3 客户端实例。
|
||||
- 支持从环境变量或默认值读取桶名和区域配置。
|
||||
- 配置管理
|
||||
- 开发环境支持静态凭证配置,生产环境使用 IAM 角色或环境变量。
|
||||
- 自动加载 AWS 默认配置,支持自定义区域与凭据提供程序。
|
||||
- 数据访问
|
||||
- 提供 GetObject 方法读取对象内容,自动处理响应体关闭与错误处理。
|
||||
- 支持 CSV 数据解析与频响数据读取。
|
||||
- 使用场景
|
||||
- 频响 CSV 数据存储与读取。
|
||||
- 目标曲线 CSV 数据访问。
|
||||
- 支持 Eafonyoung 源的 CSV 数据处理。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["应用启动"]) --> LoadS3Cfg["加载 S3 配置"]
|
||||
LoadS3Cfg --> CheckCreds{"检查 AWS 凭证"}
|
||||
CheckCreds --> |有凭据| StaticCreds["使用静态凭据"]
|
||||
CheckCreds --> |无凭据| EnvCreds["使用环境变量"]
|
||||
StaticCreds --> BuildCfg["构建 AWS 配置"]
|
||||
EnvCreds --> BuildCfg
|
||||
BuildCfg --> NewClient["创建 S3 客户端"]
|
||||
NewClient --> Inject["注入到处理器/服务"]
|
||||
Inject --> UseCase{"是否需要读取 CSV?"}
|
||||
UseCase --> |是| GetObject["GetObject(key)"]
|
||||
UseCase --> |否| Idle["等待请求"]
|
||||
GetObject --> ParseCSV["解析 CSV 数据"]
|
||||
ParseCSV --> ReturnData["返回频响数据"]
|
||||
ReturnData --> End(["完成"])
|
||||
Idle --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [internal/storage/s3.go:20-56](file://internal/storage/s3.go#L20-L56)
|
||||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||||
- [cmd/server/main.go:100-107](file://cmd/server/main.go#L100-L107)
|
||||
|
||||
**章节来源**
|
||||
- [internal/storage/s3.go:20-56](file://internal/storage/s3.go#L20-L56)
|
||||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||||
- [cmd/server/main.go:100-107](file://cmd/server/main.go#L100-L107)
|
||||
|
||||
### 缓存控制中间件
|
||||
- 功能特性
|
||||
- 提供 HTTP 缓存控制头部设置,支持 public、private、no-cache 等指令。
|
||||
- 配置不同路由的缓存策略,优化静态资源与动态内容的缓存效果。
|
||||
- 设置 Vary 头部处理内容编码差异。
|
||||
- 缓存策略配置
|
||||
- CacheControlList:公共缓存,5分钟最大年龄,30分钟共享缓存,60秒回退验证。
|
||||
- CacheControlCurve:曲线数据缓存,5分钟最大年龄,1小时共享缓存,120秒回退验证。
|
||||
- CacheControlModelList:模型列表缓存,30秒最大年龄,300秒共享缓存,30秒回退验证。
|
||||
- 使用方式
|
||||
- 在路由注册时应用中间件,为不同接口设置合适的缓存策略。
|
||||
- 支持 Base64 响应的缓存控制,确保缓存一致性。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Request["HTTP 请求"] --> ApplyMiddleware["应用缓存控制中间件"]
|
||||
ApplyMiddleware --> SetHeaders["设置 Cache-Control 头部"]
|
||||
SetHeaders --> SetVary["设置 Vary: Accept-Encoding"]
|
||||
SetVary --> NextHandler["调用下一个处理器"]
|
||||
NextHandler --> Response["生成响应"]
|
||||
Response --> Cacheable{"响应可缓存?"}
|
||||
Cacheable --> |是| ClientCache["客户端/代理缓存"]
|
||||
Cacheable --> |否| DirectResp["直接响应"]
|
||||
ClientCache --> End["完成"]
|
||||
DirectResp --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [internal/middleware/cache_control.go:11-17](file://internal/middleware/cache_control.go#L11-L17)
|
||||
- [internal/router/router.go:65-77](file://internal/router/router.go#L65-L77)
|
||||
|
||||
**章节来源**
|
||||
- [internal/middleware/cache_control.go:5-17](file://internal/middleware/cache_control.go#L5-L17)
|
||||
- [internal/router/router.go:65-77](file://internal/router/router.go#L65-L77)
|
||||
|
||||
### 数据库(MySQL)与缓存/搜索的协作
|
||||
- 数据库连接
|
||||
- 初始化时设置最大打开连接数、最大空闲连接数与连接最大生命周期,并进行超时探测。
|
||||
@@ -259,25 +366,44 @@ Handler->>RD : 写入/读取缓存可选
|
||||
Handler->>MS : 全文搜索可选
|
||||
```
|
||||
|
||||
图示来源
|
||||
**图表来源**
|
||||
- [internal/database/mysql.go:14-46](file://internal/database/mysql.go#L14-L46)
|
||||
- [internal/repository/model.go:20-61](file://internal/repository/model.go#L20-L61)
|
||||
- [internal/handler/model_list.go:26-56](file://internal/handler/model_list.go#L26-L56)
|
||||
- [internal/handler/model_list.go:26-67](file://internal/handler/model_list.go#L26-L67)
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [internal/database/mysql.go:14-46](file://internal/database/mysql.go#L14-L46)
|
||||
- [internal/repository/model.go:20-61](file://internal/repository/model.go#L20-L61)
|
||||
|
||||
### S3 存储与缓存控制中间件的使用示例
|
||||
- CSV 数据读取
|
||||
- 使用 ModelCSVHandler 读取频响 CSV 数据。
|
||||
- 支持 Base64 响应编码,适用于移动应用传输。
|
||||
- 自动处理 CSV 解析和数据验证。
|
||||
- 曲线数据处理
|
||||
- 在 CurveHandler 中集成 S3 CSV 读取功能。
|
||||
- 支持 Eafonyoung 源的 CSV 数据处理。
|
||||
- 实现 CSV 数据的缓存与复用。
|
||||
- 缓存策略应用
|
||||
- 在路由层为 CSV 接口应用合适的缓存控制策略。
|
||||
- 确保 Base64 响应的缓存一致性。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/model_csv.go:30-102](file://internal/handler/model_csv.go#L30-L102)
|
||||
- [internal/handler/curve.go:491-509](file://internal/handler/curve.go#L491-L509)
|
||||
- [internal/storage/s3.go:41-56](file://internal/storage/s3.go#L41-L56)
|
||||
|
||||
## 依赖分析
|
||||
- 组件耦合
|
||||
- 入口层集中初始化三大基础设施并向路由层注入。
|
||||
- 处理器通过依赖注入的方式使用数据库、搜索引擎与缓存客户端。
|
||||
- 入口层集中初始化四大基础设施并向路由层注入。
|
||||
- 处理器通过依赖注入的方式使用数据库、搜索引擎、缓存客户端与 S3 存储。
|
||||
- 外部依赖
|
||||
- Gin:Web 框架与路由。
|
||||
- go-sql-driver/mysql:MySQL 驱动。
|
||||
- redis/go-redis/v9:Redis 客户端。
|
||||
- meilisearch/meilisearch-go:Meilisearch 客户端。
|
||||
- zap:结构化日志。
|
||||
- aws-sdk-go-v2:AWS SDK,用于 S3 存储。
|
||||
- 潜在循环依赖
|
||||
- 当前结构清晰,无明显循环导入。
|
||||
|
||||
@@ -288,17 +414,19 @@ Entrypoint --> Zap["Zap 日志"]
|
||||
Entrypoint --> MySQL["MySQL 驱动"]
|
||||
Entrypoint --> Redis["Redis 客户端"]
|
||||
Entrypoint --> Meili["Meilisearch 客户端"]
|
||||
Entrypoint --> S3["S3 存储"]
|
||||
Gin --> Handlers["处理器"]
|
||||
Handlers --> Repos["仓储"]
|
||||
Handlers --> S3Storage["S3 存储"]
|
||||
```
|
||||
|
||||
图示来源
|
||||
- [cmd/server/main.go:22-64](file://cmd/server/main.go#L22-L64)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
**图表来源**
|
||||
- [cmd/server/main.go:38-110](file://cmd/server/main.go#L38-L110)
|
||||
- [internal/router/router.go:22-82](file://internal/router/router.go#L22-L82)
|
||||
|
||||
章节来源
|
||||
- [cmd/server/main.go:22-64](file://cmd/server/main.go#L22-L64)
|
||||
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
||||
**章节来源**
|
||||
- [cmd/server/main.go:38-110](file://cmd/server/main.go#L38-L110)
|
||||
- [internal/router/router.go:22-82](file://internal/router/router.go#L22-L82)
|
||||
|
||||
## 性能考量
|
||||
- Redis
|
||||
@@ -312,9 +440,14 @@ Handlers --> Repos["仓储"]
|
||||
- 日志
|
||||
- 生产环境建议异步落盘或使用缓冲队列,避免阻塞请求。
|
||||
- 控制日志字段数量,避免过度编码。
|
||||
- 数据库
|
||||
- 已设置连接池参数与生命周期,建议结合压测调整最大连接数与空闲连接数。
|
||||
- 对复杂查询添加索引,避免全表扫描。
|
||||
- S3 存储
|
||||
- 配置适当的连接超时与重试策略,避免长时间阻塞。
|
||||
- 对频繁访问的 CSV 文件考虑在应用层增加缓存。
|
||||
- 使用分块上传处理大文件,提高传输效率。
|
||||
- 缓存控制
|
||||
- 根据内容特性和访问模式选择合适的缓存策略。
|
||||
- 定期监控缓存命中率,调整缓存时间和策略。
|
||||
- 注意 Base64 响应的缓存一致性问题。
|
||||
|
||||
## 故障排除指南
|
||||
- Redis
|
||||
@@ -328,17 +461,24 @@ Handlers --> Repos["仓储"]
|
||||
- 日志
|
||||
- 症状:日志缺失或格式异常。
|
||||
- 排查:确认环境变量与日志配置;检查中间件是否正确挂载。
|
||||
- 数据库
|
||||
- 症状:连接超时或连接池耗尽。
|
||||
- 排查:核对连接参数与密码;检查最大连接数与空闲连接数设置;查看慢查询日志。
|
||||
- S3 存储
|
||||
- 症状:CSV 文件读取失败或权限错误。
|
||||
- 排查:确认 AWS 凭证配置正确;检查桶权限与对象存在性;验证区域设置。
|
||||
- 建议:增加重试机制和详细的错误日志。
|
||||
- 缓存控制
|
||||
- 症状:缓存策略不生效或缓存污染。
|
||||
- 排查:检查中间件应用顺序;验证 Cache-Control 头部设置;确认 Vary 头部配置。
|
||||
- 建议:使用浏览器开发者工具检查响应头,确保缓存策略正确应用。
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [internal/config/redis.go:51-56](file://internal/config/redis.go#L51-L56)
|
||||
- [internal/config/meilisearch.go:39-50](file://internal/config/meilisearch.go#L39-L50)
|
||||
- [internal/database/mysql.go:33-35](file://internal/database/mysql.go#L33-L35)
|
||||
- [internal/storage/s3.go:41-56](file://internal/storage/s3.go#L41-L56)
|
||||
- [internal/middleware/cache_control.go:5-17](file://internal/middleware/cache_control.go#L5-L17)
|
||||
|
||||
## 结论
|
||||
本项目在基础设施层面实现了清晰的分层与职责分离:入口集中初始化、配置统一加载、日志结构化输出、数据库与搜索引擎按需接入。当前代码已具备可扩展的基础,建议在 Redis 与搜索层面补充连接池与缓存策略,在日志层面增强异步与采样能力,并完善监控与告警体系以支撑生产环境的稳定性与可观测性。
|
||||
本项目在基础设施层面实现了清晰的分层与职责分离:入口集中初始化、配置统一加载、日志结构化输出、数据库与搜索引擎按需接入、S3 存储支持。当前代码已具备可扩展的基础,建议在 Redis 与搜索层面补充连接池与缓存策略,在日志层面增强异步与采样能力,并完善监控与告警体系以支撑生产环境的稳定性与可观测性。新增的 S3 存储为频响数据提供了可靠的云端存储解决方案,配合缓存控制中间件可以有效提升用户体验。
|
||||
|
||||
## 附录
|
||||
|
||||
@@ -353,31 +493,62 @@ Handlers --> Repos["仓储"]
|
||||
- 支持通过 REDIS_HOST/PORT/DATABASE/PASSWORD 覆盖默认值。
|
||||
- Meilisearch 配置
|
||||
- 支持通过 MEILISEARCH_HOST/API_KEY/INDEX 覆盖默认值。
|
||||
- S3 配置
|
||||
- 支持通过 S3_BUCKET/AWS_REGION/AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 覆盖默认值。
|
||||
- 开发环境可使用静态凭证,生产环境建议使用 IAM 角色或环境变量。
|
||||
|
||||
章节来源
|
||||
**章节来源**
|
||||
- [README.md:39-73](file://README.md#L39-L73)
|
||||
- [internal/config/database.go:17-55](file://internal/config/database.go#L17-L55)
|
||||
- [internal/config/redis.go:16-48](file://internal/config/redis.go#L16-L48)
|
||||
- [internal/config/meilisearch.go:14-36](file://internal/config/meilisearch.go#L14-L36)
|
||||
- [internal/config/s3.go:12-36](file://internal/config/s3.go#L12-L36)
|
||||
|
||||
### 最佳实践
|
||||
- 安全
|
||||
- 生产环境敏感配置(数据库密码、搜索引擎密钥)务必通过环境变量注入。
|
||||
- 生产环境敏感配置(数据库密码、搜索引擎密钥、S3 凭证)务必通过环境变量注入。
|
||||
- Redis 与 Meilisearch 建议启用鉴权与网络隔离。
|
||||
- S3 存储建议使用 IAM 角色和最小权限原则。
|
||||
- 可靠性
|
||||
- 为 Redis、数据库与搜索引擎增加健康检查与熔断策略。
|
||||
- 为 Redis、数据库、搜索引擎与 S3 增加健康检查与熔断策略。
|
||||
- 对外部依赖调用增加超时与重试。
|
||||
- S3 操作增加重试机制和错误处理。
|
||||
- 可观测性
|
||||
- 结合请求 ID 串联日志、指标与链路追踪。
|
||||
- 对关键路径埋点,关注延迟分布与错误率。
|
||||
- 监控 S3 存储的访问模式和成本。
|
||||
- 缓存策略
|
||||
- 根据内容特性和访问模式选择合适的缓存策略。
|
||||
- 定期监控缓存命中率,调整缓存时间和策略。
|
||||
- 注意不同接口的缓存控制策略差异。
|
||||
|
||||
### 扩展性设计
|
||||
- 缓存层
|
||||
- 引入多级缓存(本地 LRU + 远端 Redis)与失效策略。
|
||||
- 对热点数据预热与定期刷新。
|
||||
- 增加缓存统计与监控。
|
||||
- 搜索层
|
||||
- 建立索引更新流水线,保证数据一致性。
|
||||
- 引入搜索结果缓存与冷热数据分离。
|
||||
- 日志与监控
|
||||
- 增加指标采集(QPS、P95/P99、错误率)与告警阈值。
|
||||
- 使用分布式追踪定位慢调用。
|
||||
- 使用分布式追踪定位慢调用。
|
||||
- 存储层
|
||||
- 考虑引入 CDN 加速静态资源访问。
|
||||
- 对 S3 存储增加版本控制和生命周期管理。
|
||||
- 实现存储成本优化策略。
|
||||
|
||||
### S3 存储使用示例
|
||||
- CSV 数据读取
|
||||
- 使用 ModelCSVHandler 读取频响 CSV 数据。
|
||||
- 支持 Base64 响应编码,适用于移动应用传输。
|
||||
- 自动处理 CSV 解析和数据验证。
|
||||
- 曲线数据处理
|
||||
- 在 CurveHandler 中集成 S3 CSV 读取功能。
|
||||
- 支持 Eafonyoung 源的 CSV 数据处理。
|
||||
- 实现 CSV 数据的缓存与复用。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/model_csv.go:30-102](file://internal/handler/model_csv.go#L30-L102)
|
||||
- [internal/handler/curve.go:491-509](file://internal/handler/curve.go#L491-L509)
|
||||
- [internal/storage/s3.go:41-56](file://internal/storage/s3.go#L41-L56)
|
||||
Reference in New Issue
Block a user