系统设计策略
1. 可靠性相关策略
策略 | 描述 |
---|---|
重试 + 退避(Backoff) | 对失败操作进行重试,结合退避减少系统压力(如指数退避、带抖动)。 |
幂等性设计 | 确保多次相同请求不会引发副作用,如支付接口设计。 |
熔断器(Circuit Breaker) | 当某个服务连续失败后,临时阻断请求,防止雪崩效应。 |
降级(Degrade/Fallback) | 服务部分不可用时提供默认值或备选路径,保持核心功能可用。 |
超时控制 | 对外部依赖设置合理超时时间,避免调用阻塞整个服务。 |
请求隔离 | 通过线程池、信号量、goroutine 分离不同服务,避免故障传染。 |
2. 可扩展性策略
策略 | 描述 |
---|---|
水平扩展(Scale-out) | 通过添加更多实例(节点)提升吞吐能力。 |
分布式缓存 | 使用 Redis、Memcached 缓存热点数据,减少数据库压力。 |
读写分离 | 主写从读模式提升数据库性能,常见于 MySQL 等。 |
分库分表 | 按业务或数据维度拆分数据库表,提升查询/写入效率。 |
消息队列(异步解耦) | Kafka/RabbitMQ/NSQ 等用于削峰填谷、异步处理任务。 |
3. 安全与一致性策略
策略 | 描述 |
---|---|
限流(Rate Limiting) | 限制单位时间内请求次数,防止接口被滥用。 |
Token/Bearer认证 | 用户身份认证常用,如 JWT、OAuth2。 |
数据冗余 | 多副本存储,提升高可用和容灾能力。 |
一致性模型选择 | 在分布式系统中,根据 CAP 原则选择如强一致、最终一致等模型。 |
4. 可维护性与演进策略
策略 | 描述 |
---|---|
微服务化 | 将单体应用拆成多个独立服务,便于团队协作与部署。 |
服务注册与发现 | Consul、Etcd、Eureka 等实现服务动态注册与发现。 |
配置中心 | 集中管理配置,支持热更新,如 Nacos、Apollo。 |
灰度发布 / 蓝绿部署 | 分阶段上线新功能,减少发布风险。 |
可观测性 | 日志、指标、链路追踪三位一体(如 ELK、Prometheus + Grafana、Jaeger)。 |
5. 架构模式策略
策略 | 描述 |
---|---|
CQRS(命令查询职责分离) | 读写模型分离,读模型可做缓存/反范式设计,提升效率。 |
事件驱动架构(EDA) | 系统间通过事件流异步解耦,适合高并发业务。 |
DDD(领域驱动设计) | 将复杂业务建模成有界上下文和聚合根。 |
API Gateway + BFF | 统一入口、权限校验、路由;BFF 针对终端定制接口组合。 |
6. 综合策略在支付系统中的应用
场景 | 策略 |
---|---|
下单接口 | 幂等性、缓存商品信息、限流 |
支付请求 | 异步处理 + MQ、超时重试、幂等 |
订单查询 | 读写分离、缓存、容灾降级 |
支付通知 | MQ 异步处理、幂等性、重试机制 |