CLAUDE.md@by-scenario/microservices · git:20260320.fcf2609 · 2026-03-20 · sha256 1deaa5c6d1945de9
CLAUDE.md@by-scenario/microservices git:20260320.fcf2609A
Immutable. This exact content is served forever at /api/v1/blob/1deaa5c6d1945de9.
# 微服务架构项目 ## 架构概览 - 微服务架构,各服务独立部署、独立数据库 - 服务间通信:同步(REST/gRPC)+ 异步(消息队列) - 容器化部署:Docker + Kubernetes - 基础设施:服务注册发现、配置中心、API 网关 ## 项目结构(典型 Monorepo) ``` services/ # 各微服务(user-service, order-service 等) shared/ proto/ # gRPC Proto 定义 common-lib/ # 共享工具库 infra/ docker-compose.yml / k8s/ / helm/ # 部署配置 ``` ## 服务间通信 - 同步调用:REST(简单场景)或 gRPC(高性能/强类型场景) - 异步消息:RabbitMQ / Kafka,用于事件驱动和解耦 - 命名规范:事件名用过去时 `order.created`、`payment.completed` - 调用链路中做好超时和重试配置,设置合理的 timeout 和 retry 策略 - 使用断路器(Circuit Breaker)防止级联故障 ## 服务拆分原则 - 按业务域划分(DDD 限界上下文),而非技术层 - 每个服务拥有自己的数据库,禁止直接访问其他服务的数据库 - 跨服务数据一致性使用 Saga 模式或最终一致性 - 避免分布式事务(2PC),优先选择补偿机制 ## Docker + Kubernetes - 每个服务一个 Dockerfile,使用多阶段构建减小镜像 - K8s 资源:Deployment + Service + ConfigMap/Secret + Ingress - 健康检查:配置 `livenessProbe` 和 `readinessProbe` - 水平扩缩容:HPA 基于 CPU/内存或自定义指标 ## 可观测性 - 分布式追踪:OpenTelemetry 采集,Jaeger/Zipkin 展示 - 日志:结构化 JSON 日志,包含 traceId,统一收集到 ELK/Loki - 监控:Prometheus 采集指标 + Grafana 面板 - 每个请求必须携带和传播 traceId/spanId ## 本地开发 ```bash docker-compose up -d # 启动基础设施(数据库、MQ、Redis) docker-compose up user-service # 启动单个服务 docker-compose logs -f order-service # 查看服务日志 ``` ## API 网关 - 统一入口处理认证鉴权、限流、路由转发(Kong / APISIX / Envoy) ## 常见陷阱 - 服务拆太细导致运维成本剧增,初期宜粗不宜细 - 分布式环境下不要依赖本地文件系统存储状态 - 数据库 migration 需向后兼容(先加后删,不直接改列名) - 服务间调用失败时要有降级方案,不能让整条链路阻塞 - 注意幂等性设计:MQ 消费者和 API 接口都需要支持重复调用