分布式系统的核心挑战
分布式系统面临的根本挑战可以用 CAP 定理来概括——一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者不可兼得。
在实际工程中,我们几乎总是需要保证分区容错性,因此核心的权衡在于:
- CP 系统:优先一致性,如 ZooKeeper、etcd
- AP 系统:优先可用性,如 Cassandra、DynamoDB
服务间通信
常见的服务间通信方式:
| 方式 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| gRPC | 内部服务调用 | 高性能、强类型 | 调试不如 REST 方便 |
| REST | 外部 API | 通用、易理解 | 性能较低 |
| 消息队列 | 异步解耦 | 削峰、解耦 | 复杂度增加 |
关键设计原则
- 幂等性:所有写操作都应该是幂等的
- 超时与重试:设置合理的超时,使用指数退避重试
- 熔断降级:防止级联故障
- 可观测性:日志、指标、链路追踪三者缺一不可
总结
分布式系统没有银弹。好的系统设计来自对业务场景的深入理解和对技术取舍的清晰认识。