383 lines
17 KiB
Markdown
383 lines
17 KiB
Markdown
|
|
# 基础设施
|
|||
|
|
|
|||
|
|
<cite>
|
|||
|
|
**本文引用的文件**
|
|||
|
|
- [cmd/server/main.go](file://cmd/server/main.go)
|
|||
|
|
- [internal/config/config.go](file://internal/config/config.go)
|
|||
|
|
- [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/cache/redis.go](file://internal/cache/redis.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/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/repository/model.go](file://internal/repository/model.go)
|
|||
|
|
- [pkg/logger/logger.go](file://pkg/logger/logger.go)
|
|||
|
|
- [README.md](file://README.md)
|
|||
|
|
</cite>
|
|||
|
|
|
|||
|
|
## 目录
|
|||
|
|
1. [简介](#简介)
|
|||
|
|
2. [项目结构](#项目结构)
|
|||
|
|
3. [核心组件](#核心组件)
|
|||
|
|
4. [架构总览](#架构总览)
|
|||
|
|
5. [详细组件分析](#详细组件分析)
|
|||
|
|
6. [依赖分析](#依赖分析)
|
|||
|
|
7. [性能考量](#性能考量)
|
|||
|
|
8. [故障排除指南](#故障排除指南)
|
|||
|
|
9. [结论](#结论)
|
|||
|
|
10. [附录](#附录)
|
|||
|
|
|
|||
|
|
## 简介
|
|||
|
|
本文件聚焦于 Luxsin 应用 API 的基础设施组件,系统性阐述缓存系统(Redis)、搜索引擎(Meilisearch)与日志系统(Zap)的配置、初始化流程、连接管理、配置项与运行时行为,并结合实际代码路径说明组件间的协作关系与数据流向。同时提供性能优化建议、监控告警与扩展性设计思路、安全注意事项以及可操作的排障指引。
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
应用采用分层与按功能模块划分的组织方式:
|
|||
|
|
- 入口层: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 中间件。
|
|||
|
|
- 业务处理:internal/handler/* 与 internal/repository/* 实现具体业务逻辑。
|
|||
|
|
- 日志封装:pkg/logger/logger.go 提供生产/开发两种日志配置。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph TB
|
|||
|
|
main["cmd/server/main.go<br/>应用入口"] --> cfg["internal/config/config.go<br/>配置加载"]
|
|||
|
|
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 --> router["internal/router/router.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: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)
|
|||
|
|
|
|||
|
|
## 核心组件
|
|||
|
|
本节概述三大基础设施组件的职责、初始化与配置要点。
|
|||
|
|
|
|||
|
|
- Redis 缓存
|
|||
|
|
- 职责:提供键值存储能力,用于热点数据缓存、会话或临时状态存储。
|
|||
|
|
- 初始化:在入口处依据配置创建客户端实例,随后在处理器中注入使用。
|
|||
|
|
- 关键配置:主机、端口、密码、数据库索引。
|
|||
|
|
- 连接管理:入口处创建客户端并在进程退出时关闭;未见显式的连接池参数设置。
|
|||
|
|
|
|||
|
|
- Meilisearch 搜索引擎
|
|||
|
|
- 职责:提供全文检索能力,当前用于模型列表的搜索与结果返回。
|
|||
|
|
- 初始化:在入口处创建客户端并绑定到指定索引;处理器调用其搜索方法。
|
|||
|
|
- 关键配置:主机地址、API 密钥、索引名。
|
|||
|
|
- 数据流:HTTP 请求 -> 处理器 -> 搜索客户端 -> 搜索引擎 -> 结果解码 -> 响应。
|
|||
|
|
|
|||
|
|
- 日志系统(Zap)
|
|||
|
|
- 职责:统一输出结构化日志,区分开发与生产环境的编码风格。
|
|||
|
|
- 初始化:入口处按环境创建日志实例;中间件在每次请求结束时输出请求级日志。
|
|||
|
|
- 关键配置:环境变量控制生产/开发模式,时间编码等细节可定制。
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [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)
|
|||
|
|
|
|||
|
|
## 架构总览
|
|||
|
|
下图展示应用启动阶段如何初始化三大基础设施,并在运行期如何被业务层调用。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Entrypoint as "入口(main.go)"
|
|||
|
|
participant Cfg as "配置(config.go)"
|
|||
|
|
participant Log as "日志(pkg/logger)"
|
|||
|
|
participant DB as "数据库(mysql.go)"
|
|||
|
|
participant MS as "搜索引擎(meilisearch.go)"
|
|||
|
|
participant RD as "缓存(redis.go)"
|
|||
|
|
participant Router as "路由(router.go)"
|
|||
|
|
Entrypoint->>Cfg : 加载配置
|
|||
|
|
Entrypoint->>Log : 创建日志实例
|
|||
|
|
Entrypoint->>DB : 初始化数据库连接
|
|||
|
|
Entrypoint->>MS : 初始化搜索引擎客户端
|
|||
|
|
Entrypoint->>RD : 初始化缓存客户端
|
|||
|
|
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)
|
|||
|
|
- [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)
|
|||
|
|
|
|||
|
|
## 详细组件分析
|
|||
|
|
|
|||
|
|
### Redis 缓存组件
|
|||
|
|
- 初始化流程
|
|||
|
|
- 入口处依据配置创建 Redis 客户端实例,随后在处理器中注入使用。
|
|||
|
|
- 未见显式的连接池参数配置,如最大空闲/活动连接数、超时等。
|
|||
|
|
- 连接管理
|
|||
|
|
- 进程启动时建立连接;进程退出时关闭客户端。
|
|||
|
|
- 未见自动重连与健康检查逻辑。
|
|||
|
|
- 配置项
|
|||
|
|
- 主机、端口、密码、数据库索引。
|
|||
|
|
- 支持从环境变量覆盖默认值。
|
|||
|
|
- 使用场景
|
|||
|
|
- 当前路由中存在设备信息上报处理器,但未在现有代码中看到直接使用 Redis 的示例。建议在需要缓存的场景(如热门查询结果、限流令牌、会话状态)引入缓存策略。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
Start(["应用启动"]) --> LoadCfg["加载 Redis 配置"]
|
|||
|
|
LoadCfg --> NewClient["创建 Redis 客户端"]
|
|||
|
|
NewClient --> Inject["注入到处理器/服务"]
|
|||
|
|
Inject --> UseCase{"是否命中缓存?"}
|
|||
|
|
UseCase --> |是| ReturnCache["返回缓存数据"]
|
|||
|
|
UseCase --> |否| ExecOp["执行业务操作"]
|
|||
|
|
ExecOp --> StoreCache["写入缓存"]
|
|||
|
|
StoreCache --> ReturnResult["返回结果"]
|
|||
|
|
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)
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [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)
|
|||
|
|
|
|||
|
|
### Meilisearch 搜索组件
|
|||
|
|
- 初始化流程
|
|||
|
|
- 入口处依据配置创建客户端并绑定到指定索引。
|
|||
|
|
- 处理器调用搜索客户端的搜索方法,限制返回字段与数量。
|
|||
|
|
- 搜索优化
|
|||
|
|
- 仅检索必要字段,减少网络与序列化开销。
|
|||
|
|
- 通过查询参数控制返回条数,避免一次性返回过多数据。
|
|||
|
|
- 错误处理
|
|||
|
|
- 对搜索失败与结果解码失败进行包装与错误返回。
|
|||
|
|
- 数据流向
|
|||
|
|
- HTTP 请求 -> 处理器 -> 搜索客户端 -> 搜索引擎 -> 解码 -> 响应。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Client as "客户端"
|
|||
|
|
participant Handler as "ModelListHandler"
|
|||
|
|
participant Search as "search.Client"
|
|||
|
|
participant Engine as "Meilisearch"
|
|||
|
|
Client->>Handler : GET /audio/modelList?key=&count=
|
|||
|
|
Handler->>Search : ModelList(ctx, key, count)
|
|||
|
|
Search->>Engine : Index.SearchWithContext(...)
|
|||
|
|
Engine-->>Search : Hits
|
|||
|
|
Search->>Search : DecodeInto(map)
|
|||
|
|
Search-->>Handler : 列表
|
|||
|
|
Handler-->>Client : JSON 或 Base64 响应
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [internal/handler/model_list.go:26-56](file://internal/handler/model_list.go#L26-L56)
|
|||
|
|
- [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/config/meilisearch.go:14-50](file://internal/config/meilisearch.go#L14-L50)
|
|||
|
|
|
|||
|
|
### 日志系统(Zap)
|
|||
|
|
- 初始化
|
|||
|
|
- 根据环境变量选择生产或开发配置,时间编码与级别编码可定制。
|
|||
|
|
- 中间件日志
|
|||
|
|
- 记录状态码、方法、路径、耗时、客户端 IP、请求 ID、错误集合等。
|
|||
|
|
- 按状态码分级输出(错误、警告、信息)。
|
|||
|
|
- 请求 ID
|
|||
|
|
- 自动生成或透传请求 ID,便于跨服务链路追踪。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
ReqStart["请求进入"] --> GenRID["生成或透传请求ID"]
|
|||
|
|
GenRID --> Next["继续中间件链"]
|
|||
|
|
Next --> AfterReq["请求处理完成"]
|
|||
|
|
AfterReq --> Fields["组装日志字段"]
|
|||
|
|
Fields --> Level{"状态码分级"}
|
|||
|
|
Level --> |>=5xx| LogErr["记录错误日志"]
|
|||
|
|
Level --> |>=4xx| LogWarn["记录警告日志"]
|
|||
|
|
Level --> |<4xx| LogInfo["记录信息日志"]
|
|||
|
|
LogErr --> End["完成"]
|
|||
|
|
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)
|
|||
|
|
- [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/request_id.go:20-30](file://internal/middleware/request_id.go#L20-L30)
|
|||
|
|
|
|||
|
|
### 数据库(MySQL)与缓存/搜索的协作
|
|||
|
|
- 数据库连接
|
|||
|
|
- 初始化时设置最大打开连接数、最大空闲连接数与连接最大生命周期,并进行超时探测。
|
|||
|
|
- 仓储层
|
|||
|
|
- 仓储层负责 SQL 查询与结果扫描,为上层处理器提供稳定的数据访问接口。
|
|||
|
|
- 协作关系
|
|||
|
|
- 处理器在需要时从数据库读取数据,随后可将热点数据写入缓存;搜索用于全文检索场景。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
sequenceDiagram
|
|||
|
|
participant Handler as "处理器"
|
|||
|
|
participant Repo as "仓储(ModelRepository)"
|
|||
|
|
participant DB as "MySQL(sql.DB)"
|
|||
|
|
participant RD as "Redis"
|
|||
|
|
participant MS as "Meilisearch"
|
|||
|
|
Handler->>Repo : 查询数据
|
|||
|
|
Repo->>DB : 执行 SQL
|
|||
|
|
DB-->>Repo : 结果集
|
|||
|
|
Repo-->>Handler : 结构化数据
|
|||
|
|
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/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)
|
|||
|
|
|
|||
|
|
## 依赖分析
|
|||
|
|
- 组件耦合
|
|||
|
|
- 入口层集中初始化三大基础设施并向路由层注入。
|
|||
|
|
- 处理器通过依赖注入的方式使用数据库、搜索引擎与缓存客户端。
|
|||
|
|
- 外部依赖
|
|||
|
|
- Gin:Web 框架与路由。
|
|||
|
|
- go-sql-driver/mysql:MySQL 驱动。
|
|||
|
|
- redis/go-redis/v9:Redis 客户端。
|
|||
|
|
- meilisearch/meilisearch-go:Meilisearch 客户端。
|
|||
|
|
- zap:结构化日志。
|
|||
|
|
- 潜在循环依赖
|
|||
|
|
- 当前结构清晰,无明显循环导入。
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
graph LR
|
|||
|
|
Entrypoint["入口(main.go)"] --> Gin["Gin 路由"]
|
|||
|
|
Entrypoint --> Zap["Zap 日志"]
|
|||
|
|
Entrypoint --> MySQL["MySQL 驱动"]
|
|||
|
|
Entrypoint --> Redis["Redis 客户端"]
|
|||
|
|
Entrypoint --> Meili["Meilisearch 客户端"]
|
|||
|
|
Gin --> Handlers["处理器"]
|
|||
|
|
Handlers --> Repos["仓储"]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
图示来源
|
|||
|
|
- [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:22-64](file://cmd/server/main.go#L22-L64)
|
|||
|
|
- [internal/router/router.go:14-41](file://internal/router/router.go#L14-L41)
|
|||
|
|
|
|||
|
|
## 性能考量
|
|||
|
|
- Redis
|
|||
|
|
- 建议增加连接池参数配置(最大空闲/活动连接、超时),以提升高并发下的稳定性与吞吐。
|
|||
|
|
- 对热点键设置合理的过期策略,避免内存膨胀。
|
|||
|
|
- 使用 pipeline 或批量操作降低 RTT。
|
|||
|
|
- Meilisearch
|
|||
|
|
- 控制返回字段与数量,减少序列化与传输开销。
|
|||
|
|
- 对高频查询建立索引与排序规则,优化查询性能。
|
|||
|
|
- 合理设置分页与缓存策略,避免重复检索。
|
|||
|
|
- 日志
|
|||
|
|
- 生产环境建议异步落盘或使用缓冲队列,避免阻塞请求。
|
|||
|
|
- 控制日志字段数量,避免过度编码。
|
|||
|
|
- 数据库
|
|||
|
|
- 已设置连接池参数与生命周期,建议结合压测调整最大连接数与空闲连接数。
|
|||
|
|
- 对复杂查询添加索引,避免全表扫描。
|
|||
|
|
|
|||
|
|
## 故障排除指南
|
|||
|
|
- Redis
|
|||
|
|
- 症状:连接失败或超时。
|
|||
|
|
- 排查:确认主机、端口、密码与数据库索引配置正确;检查网络连通性与防火墙策略。
|
|||
|
|
- 建议:增加连接超时与重试机制。
|
|||
|
|
- Meilisearch
|
|||
|
|
- 症状:搜索报错或返回空结果。
|
|||
|
|
- 排查:确认主机、API 密钥与索引名配置;检查索引是否存在且已同步。
|
|||
|
|
- 建议:在处理器中增加重试与降级策略。
|
|||
|
|
- 日志
|
|||
|
|
- 症状:日志缺失或格式异常。
|
|||
|
|
- 排查:确认环境变量与日志配置;检查中间件是否正确挂载。
|
|||
|
|
- 数据库
|
|||
|
|
- 症状:连接超时或连接池耗尽。
|
|||
|
|
- 排查:核对连接参数与密码;检查最大连接数与空闲连接数设置;查看慢查询日志。
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [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)
|
|||
|
|
|
|||
|
|
## 结论
|
|||
|
|
本项目在基础设施层面实现了清晰的分层与职责分离:入口集中初始化、配置统一加载、日志结构化输出、数据库与搜索引擎按需接入。当前代码已具备可扩展的基础,建议在 Redis 与搜索层面补充连接池与缓存策略,在日志层面增强异步与采样能力,并完善监控与告警体系以支撑生产环境的稳定性与可观测性。
|
|||
|
|
|
|||
|
|
## 附录
|
|||
|
|
|
|||
|
|
### 配置清单与示例
|
|||
|
|
- 应用配置
|
|||
|
|
- 环境变量:APP_ENV、APP_HOST、APP_PORT。
|
|||
|
|
- 示例:参见项目自述文件中的环境变量表格与示例。
|
|||
|
|
- 数据库配置
|
|||
|
|
- 支持通过 DATABASE_HOST/PORT/NAME/USER/PASSWORD 覆盖默认值。
|
|||
|
|
- 生产环境必须提供 DATABASE_PASSWORD。
|
|||
|
|
- Redis 配置
|
|||
|
|
- 支持通过 REDIS_HOST/PORT/DATABASE/PASSWORD 覆盖默认值。
|
|||
|
|
- Meilisearch 配置
|
|||
|
|
- 支持通过 MEILISEARCH_HOST/API_KEY/INDEX 覆盖默认值。
|
|||
|
|
|
|||
|
|
章节来源
|
|||
|
|
- [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)
|
|||
|
|
|
|||
|
|
### 最佳实践
|
|||
|
|
- 安全
|
|||
|
|
- 生产环境敏感配置(数据库密码、搜索引擎密钥)务必通过环境变量注入。
|
|||
|
|
- Redis 与 Meilisearch 建议启用鉴权与网络隔离。
|
|||
|
|
- 可靠性
|
|||
|
|
- 为 Redis、数据库与搜索引擎增加健康检查与熔断策略。
|
|||
|
|
- 对外部依赖调用增加超时与重试。
|
|||
|
|
- 可观测性
|
|||
|
|
- 结合请求 ID 串联日志、指标与链路追踪。
|
|||
|
|
- 对关键路径埋点,关注延迟分布与错误率。
|
|||
|
|
|
|||
|
|
### 扩展性设计
|
|||
|
|
- 缓存层
|
|||
|
|
- 引入多级缓存(本地 LRU + 远端 Redis)与失效策略。
|
|||
|
|
- 对热点数据预热与定期刷新。
|
|||
|
|
- 搜索层
|
|||
|
|
- 建立索引更新流水线,保证数据一致性。
|
|||
|
|
- 引入搜索结果缓存与冷热数据分离。
|
|||
|
|
- 日志与监控
|
|||
|
|
- 增加指标采集(QPS、P95/P99、错误率)与告警阈值。
|
|||
|
|
- 使用分布式追踪定位慢调用。
|