feat 结构调整

This commit is contained in:
2025-12-20 15:39:25 +08:00
parent 55c5d4cc18
commit ff1bd1d0b6
96 changed files with 4904 additions and 350 deletions

176
Server/指导方针.md Normal file
View File

@@ -0,0 +1,176 @@
太棒了!你已经抓住了微服务的核心痛点(数据库隔离、分层架构、服务边界),接下来我们系统性地梳理 **构建真正可靠、可维护、可演进的微服务架构必须遵守的关键原则**
---
## ✅ 微服务十大核心原则(实战导向)
> 这些不是理论教条,而是无数团队踩坑后总结出的“生存法则”。
---
### 1. **单一职责 & 高内聚Single Responsibility**
- 每个微服务应围绕 **一个明确的业务能力**(如“用户管理”、“支付”、“通知”)。
- ❌ 不要按技术分层拆服务(如“所有 DB 服务”、“所有 API 服务”)。
- ✅ 建议用 **DDD领域驱动设计** 划分限界上下文Bounded Context
> 📌 口诀:**“一个服务,一个事”**
---
### 2. **自治性Autonomy**
- 服务应能 **独立开发、测试、部署、扩展、故障恢复**
- 依赖越少越好;跨服务调用必须有 **降级、熔断、超时** 机制。
- 使用 **契约测试Contract Testing** 保证接口兼容(如 Pact
> 🔧 工具推荐:
> - gRPC + Protobuf强契约
> - OpenAPIREST
> - WireMock / Pact契约测试
---
### 3. **数据私有Database per Service** ← 你已掌握!
- 每个服务独占数据存储,**禁止跨服务直连数据库**。
- 跨服务数据交互靠:
- **同步**APIgRPC/HTTP
- **异步**事件Kafka / RabbitMQ / Pulsar
> 💡 技巧:用 **事件溯源Event Sourcing + CQRS** 构建复杂查询视图。
---
### 4. **无状态Stateless**
- 服务实例本身不保存会话或状态(状态存 Redis / DB / Cookie
- 好处:**水平扩展容易**K8s 可随意扩缩容。
> ⚠️ 例外:批处理、流计算等有状态场景可用 StatefulSet但要谨慎。
---
### 5. **可观测性Observability三件套**
微服务没有可观测性 = 盲人开车!
| 组件 | 作用 | 工具推荐 |
|------|------|--------|
| **Logging** | 记录结构化日志 | Zap / Logrus + Loki / ELK |
| **Metrics** | 监控性能指标 | Prometheus + Grafana |
| Assistant | 追踪请求链路 | Jaeger / Zipkin / OpenTelemetry |
> ✅ 必做:
> - 所有日志带 `trace_id`
> - 所有 gRPC 调用自动埋点
> - 关键路径加自定义指标(如“登录成功率”)
---
### 6. **弹性设计Resilience**
网络不可靠!必须假设:
- 其他服务会宕机
- 网络会延迟或丢包
✅ 必备机制:
- **超时Timeout**:每个调用设上限(如 1s
- **重试Retry**:带退避策略(指数退避)
- **熔断Circuit Breaker**:失败太多就短路(如 Hystrix / Sentinel
- **限流Rate Limiting**:保护自己不被压垮
- **降级Fallback**:返回默认值或缓存数据
> 🛠 Go 推荐库:
> - `go-resiliency`
> - `sony/gobreaker`
> - 自研中间件(结合 context + retry
---
### 7. **API 优先API-First Design**
- 先定义 `.proto`gRPC或 OpenAPIREST再写代码。
- 客户端 SDK 自动生成(如 `protoc-gen-go`)。
- 版本管理:**向后兼容优先**,避免频繁改接口。
> 📁 目录建议:
> ```
> api/
> ├── user/v1/user.proto
> └── order/v1/order.proto
> ```
---
### 8. **基础设施即代码IaC & GitOps**
- 数据库、K8s、网关配置全部代码化Terraform / Helm / Kustomize
- 所有变更通过 Git PR 触发自动化部署。
- 环境一致性dev / staging / prod 配置几乎相同。
> ✅ 好处:**“一键重建整个环境”**
---
### 9. **安全内建Security by Default**
- **mTLS**服务间通信加密Istio / Linkerd
- **RBAC**:基于角色的访问控制
- **敏感信息**:用 Vault / K8s Secret 管理,不硬编码
- **输入校验**:所有 API 参数严格验证(如 `validator.v10`
> 🔒 原则:**“零信任网络”** —— 不信任任何内部流量。
---
### 10. **演进式设计Evolutionary Architecture**
- 不追求“一次性完美架构”
-**Strangler Fig Pattern绞杀者模式** 逐步替换旧系统
- 定期做 **架构重构****技术债清理**
> 🌱 微服务是“种出来的”,不是“画出来的”。
---
## 🧱 推荐架构分层Go 微服务)
```
user-service/
├── api/ # .proto 文件(对外契约)
├── cmd/ # main 入口
├── internal/
│ ├── handler/ # gRPC/HTTP handlers薄层
│ ├── service/ # 业务逻辑(核心)
│ ├── repository/ # 数据访问(接口 + mysql 实现)
│ └── model/ # 领域模型(与 DB 解耦)
├── pkg/ # 可共享工具(谨慎!)
├── deploy/ # K8s / Docker 配置
└── go.mod
```
> 🔑 关键:`internal/` 禁止被外部 import强制通过 API 交互。
---
## 🚫 微服务常见反模式(务必避开!)
| 反模式 | 后果 |
|-------|------|
| 分布式单体 | 失去微服务所有优势 |
| 共享数据库 | 强耦合,无法独立演进 |
| 同步调用链过长A→B→C→D | 故障放大,雪崩风险 |
| 无监控无告警 | 出问题找不到原因 |
| 手动部署 | 发布慢,易出错 |
---
## ✅ 最后建议:从小做起,逐步完善
1. **先保证“能跑”**:一个服务 + 独立 DB + gRPC API
2. **加上可观测性**:日志 + Metrics + Tracing
3. **加上弹性机制**:超时 + 重试
4. **加上 CI/CD**:自动化测试 & 部署
5. **再考虑事件驱动、CQRS、Service Mesh...**
> 🌟 **好的微服务架构不是设计出来的,而是在约束和实践中演化出来的。**
---
如果你愿意,我可以:
- 帮你画一张 **典型微服务架构图**
- 提供一个 **Go 微服务模板项目结构**
- 推荐 **K8s + Istio + Prometheus 的最小可行部署方案**
祝你打造出**真正可靠、优雅、可演进**的微服务系统!🚀