# ADR-004: 使用 etcd 进行服务发现 / etcd for Service Discovery ## 状态 / Status **Accepted** **日期 / Date**: 2024-01-01 ## 背景 / Context 平台依赖多个外部 gRPC 微服务(Git、Email),需要动态发现机制来连接这些服务。 The platform depends on multiple external gRPC microservices (Git, Email) and needs dynamic discovery to connect to them. ## 决策 / Decision 使用 **etcd** 进行服务发现和注册。 Use **etcd** for service discovery and registration. ## 考虑的方案 / Considered Options 1. **etcd** — Kubernetes 生态标准,强一致性 2. **Consul** — 功能丰富但较重 3. **ZooKeeper** — 经典但运维复杂 4. **静态配置** — 简单但不灵活 ## 后果 / Consequences ### 正面 / Positive - 与 Kubernetes 生态一致 / Aligned with Kubernetes ecosystem - 强一致性保证 / Strong consistency guarantees - 租约机制支持健康检查 / Lease mechanism supports health checks - Watch 机制支持实时更新 / Watch mechanism supports real-time updates ### 负面 / Negative - 额外的基础设施依赖 / Additional infrastructure dependency - 运维复杂度增加 / Increased operational complexity ## 实现细节 / Implementation Details - **注册**: `register.rs` — 自注册 + 租约保活 - **发现**: `discovery.rs` — Watch 动态连接 - **客户端**: tonic/prost gRPC 客户端