基于 Kratos 框架开发的微服务电商评论系统。该服务负责管理用户评论的完整生命周期,包括评论发布、运营审核、商家回复以及商家申诉处理。系统采用读写分离架构,结合 Redis 缓存和 Elasticsearch 搜索,以支持高性能的查询需求。
review 服务是电商平台的核心组件之一,旨在连接用户、商家和运营人员:
- 用户 (C端):对购买的商品和服务进行评价(评分、图文/视频),并支持追加评论。
- 商家 (B端):查看店铺评价,回复用户评论,对恶意差评发起申诉。
- 运营 (O端):后台审核用户发布的评论,处理商家的申诉请求,维护平台内容质量。
- Golang:
1.23+ - Framework: Kratos v2 - Bilibili 开源的微服务框架
- API Protocol: gRPC (内部通信) & HTTP (网关暴露)
- Serialization: Protocol Buffers
- MySQL: 核心业务数据存储 (Review, Reply, Appeal)。
- Elasticsearch: 搜索引擎,用于高性能的复杂查询(商家/用户维度的评论列表)。
- Redis: 缓存层,加速热点数据读取。
- ORM: GORM + GORM Gen (类型安全的 SQL 构建)。
- Dependency Injection: Google Wire (编译期依赖注入)。
- Service Discovery: Consul (服务注册与发现)。
- Concurrency Control:
golang.org/x/sync/singleflight(防止缓存击穿)。 - ID Generator: Snowflake (雪花算法生成分布式 ID)。
- Validation:
protoc-gen-validate(参数校验)。
- 发布评论: 支持评分(商品/服务/快递)、文本内容、上传图片/视频。
- 追加评论: 对同一订单支持追加评论内容。
- 查询评论: 分页获取用户个人的历史评论。
- 评论列表: 高性能查询店铺下的所有评论(基于 ES)。
- 回复评论: 商家可以对用户评论进行回复(每条评论限回复一次)。
- 申诉机制: 针对不实或恶意评论发起申诉,填写申诉理由及举证材料。
- 评论审核: 审核用户新发布的评论(发布 -> 待审核 -> 已发布/驳回)。
- 申诉审核: 审核商家的申诉请求。若申诉通过,相关评论将自动隐藏或标记。
- 读写分离: 写入操作直接落库 MySQL;读取操作优先查 Redis,未命中查 ES。
- 防缓存击穿: 使用 Singleflight 合并并发请求,保护后端存储。
- 状态机管理: 严格的评论与申诉状态流转逻辑。
遵循 Kratos 标准布局 (Layout):
review/
├── api/ # Protocol Buffers 定义 (gRPC/HTTP 接口)
│ ├── business/ # B端接口
│ ├── operation/ # 运营端接口
│ └── review/ # 核心评论接口
├── cmd/ # 程序入口 (main.go, wire依赖注入)
├── configs/ # 配置文件 (config.yaml, registry.yaml)
├── internal/
│ ├── biz/ # 业务逻辑层 (UseCase, Domain Object)
│ ├── data/ # 数据访问层 (Repository, MySQL/ES/Redis 实现)
│ ├── service/ # 接口实现层 (DTO 转换, 调用 biz)
│ ├── server/ # HTTP/gRPC Server 配置
│ └── conf/ # 配置结构体定义 (.proto)
├── pkg/ # 公共包 (snowflake 等)
└── third_party/ # 第三方 proto 文件
评论生命周期:
graph LR
User[用户发表] --> Pending[10-待审核]
Pending -->|运营审核通过| Published[20-已发布]
Pending -->|运营驳回| Rejected[30-驳回]
Published -->|商家申诉成功| Hidden[40-申诉通过/隐藏]
申诉生命周期:
graph LR
Merchant[商家申诉] --> AppealPending[10-待审核]
AppealPending -->|运营通过| AppealPass[20-申诉通过]
AppealPending -->|运营驳回| AppealReject[30-申诉驳回]
AppealPass -.->|触发| UpdateReview[更新评论状态为40]
- Go 1.23+
- Docker & Docker Compose
- Consul (服务发现)
- MySQL, Redis, Elasticsearch
-
启动依赖环境 使用根目录或项目目录下的
docker-compose.yaml启动基础设施:docker-compose up -d
-
初始化数据库 执行 review.sql 脚本初始化 MySQL 表结构。
-
生成代码 (如有修改 proto 或 wire)
make api # 生成 proto 代码 make wire # 生成依赖注入代码
-
运行服务
# 下载依赖 go mod tidy # 运行 kratos run
修改 config.yaml 以匹配你的本地环境:
data:
database:
driver: mysql
source: root:password@tcp(127.0.0.1:3306)/reviewdb...
redis:
addr: 127.0.0.1:6379
elasticsearch:
addresses: ["http://127.0.0.1:9200"]| Method | URI | Description |
|---|---|---|
POST |
/v1/review |
创建评论 (用户) |
GET |
/v1/review/{reviewID} |
获取评论详情 |
POST |
/v1/review/reply |
回复评论 (商家) |
POST |
/v1/review/appeal |
申诉评论 (商家) |
POST |
/v1/review/audit |
审核评论 (运营) |
POST |
/v1/appeal/audit |
审核申诉 (运营) |
GET |
/v1/review/store/{storeID} |
获取店铺评论列表 (ES搜索) |
GET |
/v1/review/user/{userID} |
获取用户评论列表 (ES搜索) |