Java 生产环境高可用(HA)设计全方案
目录一、应用服务层高可用核心1. 无状态化设计必须2. 集群部署 水平扩容3. 容错与熔断限流微服务必备4. 异步化解耦5. 超时、重试、幂等二、网关 / 接入层高可用1. 负载均衡2. 统一流量管控三、缓存层高可用Redis1. 主从 哨兵Sentinel2. 集群模式Redis Cluster3. 缓存高可用关键策略四、数据库层高可用1. 主从架构 读写分离2. 高可用方案3. 数据安全五、消息队列高可用六、基础设施与部署高可用1. 多可用区AZ部署2. 容器化 编排K8s3. 异地多活高级七、高可用必备保障机制1. 健康检查2. 监控告警核心3. 全链路追踪4. 容灾演练八、Java 代码层面高可用最佳实践总结最核心的 8 条高可用核心目标不宕机、少延迟、能容错、自动恢复保证服务 7×24 小时稳定运行。 下面按架构分层给你整理 Java 生产最常用、最落地的高可用设计全部是企业级标准方案。一、应用服务层高可用核心1. 无状态化设计必须应用不存储会话、本地缓存、文件等状态数据会话统一存在 Redis、分布式 Session好处随便扩缩容、随便重启不影响业务// 错误状态存在本地 private MapString, Object localCache new HashMap(); // 正确使用 Redis/分布式缓存 Autowired StringRedisTemplate redisTemplate;2. 集群部署 水平扩容单节点 → 多节点至少 2 实例Nginx / LVS / SLB 做负载均衡支持滚动发布、不停机更新3. 容错与熔断限流微服务必备使用Sentinel / Hystrix / Resilience4j防止级联故障熔断下游故障时自动切断调用限流防止流量洪峰压垮服务降级非核心业务自动开关降级隔离线程池 / 信号量隔离避免一个接口拖垮整个服务4. 异步化解耦使用MQRabbitMQ/Kafka/RocketMQ削峰填谷异步处理提高吞吐量解耦上下游避免同步调用失败5. 超时、重试、幂等所有远程调用HTTP/Dubbo/Feign必须设置超时时间合理重试注意幂等性接口必须做幂等设计防重复提交 / 重复消费唯一请求号数据库唯一索引分布式锁二、网关 / 接入层高可用1. 负载均衡四层LVS / F5七层Nginx / OpenResty / Kong / Spring Cloud Gateway支持健康检查、自动剔除故障节点2. 统一流量管控限流鉴权路由灰度发布故障隔离三、缓存层高可用Redis1. 主从 哨兵Sentinel自动故障转移主节点挂了从节点自动升主2. 集群模式Redis Cluster分片存储支持大容量多主多从任何一台挂了不影响集群3. 缓存高可用关键策略缓存预热过期淘汰策略缓存穿透 / 击穿 / 雪崩防护降级缓存挂了可直接查 DB牺牲性能保可用四、数据库层高可用1. 主从架构 读写分离主库写从库读一主多从提高读吞吐2. 高可用方案MySQLMGR / InnoDB Cluster / Keepalived 主从分库分表ShardingSphere 应对海量数据3. 数据安全定时全量备份 binlog 增量备份跨机房备份支持快速回档五、消息队列高可用集群部署多节点同步刷盘 副本机制消息确认机制ACK死信队列 重试机制消息堆积监控与处理六、基础设施与部署高可用1. 多可用区AZ部署同地域不同机房防止单机房断电 / 火灾云厂商阿里云可用区、腾讯云可用区2. 容器化 编排K8s自动重启崩溃 Pod自动扩缩容HPA滚动更新无停机发布健康检查liveness/readiness probe3. 异地多活高级跨地域部署流量就近接入单地域断网不影响全局七、高可用必备保障机制1. 健康检查端口检查HTTP 接口检查/actuator/health服务探测自动摘除2. 监控告警核心机器CPU、内存、磁盘、网络应用QPS、RT、错误率、线程池、GC中间件Redis、MQ、DB 连接数、慢查询告警电话、短信、企业微信、钉钉3. 全链路追踪SkyWalking、Pinpoint、Jaeger快速定位慢接口、异常节点4. 容灾演练压测故障注入kill 进程、断网、延时降级熔断演练八、Java 代码层面高可用最佳实践线程池必须自定义禁止使用 Executors远程调用必须加超时大事务拆小避免长事务锁表使用连接池合理配置最大连接数异常捕获精细化不要吞异常内存使用合理避免 OOM优雅停机Spring 支持总结最核心的 8 条无状态设计支持集群扩容集群部署杜绝单点熔断限流降级防止雪崩异步 MQ 削峰Redis 哨兵 / 集群做高可用缓存数据库主从 读写分离K8s 自动自愈完善监控 告警