目录
- 背景和价值
- SpringCloud微服务架构各层高可靠高并发技术方案
- 1. CDN层
- 高并发方案
- 高可靠方案
- 2. 业务网关
- 高并发方案
- 高可靠方案
- 3. 北向网关
- 高并发方案
- 高可靠方案
- 4. 南向网关
- 高并发方案
- 高可靠方案
- 5. BFF层(Backend For Frontend)
- 高并发方案
- 高可靠方案
- 6. 微服务层
- 高并发方案
- 高可靠方案
- 7. 存储层
- Redis
- 高并发方案
- 高可靠方案
- MySQL
- 高并发方案
- 高可靠方案
- ElasticSearch
- 高并发方案
- 高可靠方案
- Redis
- 1. CDN层
- 参考资料
背景和价值
SpringCloud微服务架构各层高可靠高并发技术方案
1. CDN层
高并发方案
- 多级缓存策略:静态资源(JS/CSS/图片)多级缓存,设置合理的缓存过期时间(TTL),一般静态资源设置较长TTL(7-30天),版本化资源永久缓存
- 资源压缩与优化:Gzip/Brotli压缩,图片WebP格式转换,JS/CSS合并压缩
- 动态加速:动态内容边缘计算,减少回源请求
- DNS负载均衡:基于地理位置的智能解析,将用户请求导向最近节点
高可靠方案
- 多CDN厂商冗余:主备CDN架构,当主CDN故障时自动切换到备用CDN
- 健康检查机制:实时监控CDN节点状态,自动剔除异常节点
- 回源策略优化:设置合理的回源超时时间(一般3-5秒)和重试机制
- 缓存预热:重大活动前预热热门资源,避免流量峰值时回源压力
2. 业务网关
高并发方案
- 异步非阻塞架构:采用Spring Cloud Gateway(基于Netty)替代Zuul,支持异步非阻塞处理
- 连接池优化:配置合理的连接池参数,maxConnections=200,acquireTimeout=3000ms
- 请求合并:对相同服务的多个请求进行合并处理,减少后端服务调用
- 本地缓存:热点接口响应结果本地缓存,TTL根据业务设置(1-60秒)
- 负载均衡:集成Ribbon或Spring Cloud LoadBalancer,采用轮询或权重策略
高可靠方案
- 限流策略:
- 基于令牌桶算法的全局限流,设置QPS阈值(如10000 QPS)
- 基于IP的限流,单IP限制(如100 QPS)
- 基于接口的限流,不同接口设置不同阈值
- 基于用户的限流,针对认证用户设置个性化阈值
- 熔断降级:集成Resilience4j,对后端服务设置熔断策略
- 超时控制:设置全局超时(如3秒)和接口级超时
- 重试机制:对幂等接口设置重试策略,maxRetries=2,backoff=100ms
- 集群部署:多实例部署,通过负载均衡实现故障转移
- 灰度发布:支持基于Header/IP的流量路由,实现灰度发布
3. 北向网关
高并发方案
- API网关性能优化:启用HTTP/2,支持连接复用
- 异步处理:采用WebFlux响应式编程模型处理高并发请求
- 数据压缩:对API响应进行压缩,减少传输数据量
- 批量接口设计:提供批量操作接口,减少请求次数
高可靠方案
- 精细化限流:
- 按应用粒度限流,为每个接入应用分配QPS配额
- 按接口复杂度限流,复杂接口设置较低阈值
- 限流阈值动态调整,支持根据业务峰谷自动伸缩
- 认证授权优化:
- JWT令牌缓存,减少认证服务压力
- 令牌有效期合理设置(如access_token=2小时,refresh_token=7天)
- 黑名单机制,快速失效异常令牌
- 请求校验:严格的参数校验,过滤非法请求
- 监控告警:实时监控API调用成功率、响应时间,设置告警阈值(如成功率<99%告警)
- 多活部署:跨机房部署,实现异地容灾
4. 南向网关
高并发方案
- 协议转换优化:高效的协议转换(如HTTP与TCP/UDP/MQTT之间)
- 批量处理:设备数据批量上报和批量下发,减少交互次数
- 异步通信:采用消息队列解耦设备与后端服务
- 连接复用:长连接池管理,避免频繁建立连接
高可靠方案
- 设备连接管理:
- 心跳检测机制,超时未响应则断开连接(如30秒心跳)
- 连接数限制,防止单个设备占用过多连接
- 重连机制:设备断线后指数退避重连(1s, 2s, 4s, 8s,最大30s)
- 数据缓存:设备离线时缓存数据,上线后批量同步
- 流量控制:
- 设备级限流,防止单设备发送过多数据
- 按设备类型限流,不同类型设备设置不同阈值
- 数据校验:设备数据合法性校验,过滤异常数据
- 集群部署:无状态设计,支持水平扩展
5. BFF层(Backend For Frontend)
高并发方案
- 数据聚合优化:高效聚合多个微服务数据,减少前端请求次数
- 热点数据缓存:用户信息、基础配置等热点数据缓存到本地或Redis
- 异步处理:非核心流程异步化,提升响应速度
- 计算下沉:复杂计算逻辑在BFF层处理,减少对后端服务的依赖
高可靠方案
- 服务降级:
- 非核心字段降级,优先保证核心功能可用
- 依赖服务异常时返回缓存数据或默认数据
- 熔断策略:
- 对依赖服务设置熔断阈值:失败率>50%或10秒内失败>20次则熔断
- 熔断后快速失败,避免级联故障
- 熔断恢复策略:指数退避尝试(1s, 2s, 4s...)
- 超时控制:为每个依赖服务调用设置超时(如1-2秒)
- 请求合并:相同用户的并发请求合并处理
- 限流保护:针对不同前端应用设置限流阈值
6. 微服务层
高并发方案
- 服务拆分:按领域边界拆分服务,避免单服务压力过大
- 异步通信:核心流程同步,非核心流程通过Kafka/RabbitMQ异步处理
- 资源隔离:使用线程池隔离不同业务线请求,避免相互影响
- 读写分离:查询操作与写操作分离,读操作可容忍一定延迟
- 批量接口:提供批量操作接口,减少请求次数
- 缓存策略:
- 多级缓存:本地缓存(Caffeine) + 分布式缓存(Redis)
- 热点数据缓存:设置合理TTL,避免缓存雪崩
- 缓存预热:系统启动时加载基础数据
高可靠方案
- 集群部署:每个服务多实例部署,通过注册中心实现负载均衡
- 熔断降级:
- 使用Resilience4j或Sentinel实现熔断
- 熔断策略:失败率>50%,最小调用次数20,熔断时间10秒
- 降级策略:返回默认值、缓存数据或提示服务繁忙
- 限流措施:
- 接口级限流:根据接口能力设置QPS阈值
- 线程池隔离:核心线程数=CPU核心数2,最大线程数=CPU核心数4
- 信号量隔离:高并发读接口使用信号量隔离
- 服务注册与发现:使用Nacos/Eureka,定期健康检查,自动剔除异常节点
- 配置中心:使用Nacos/Apollo,支持配置动态刷新,无需重启服务
- 分布式事务:
- 核心业务:Seata AT模式保证强一致性
- 非核心业务:TCC模式或最终一致性方案
- 重试机制:对幂等操作设置重试,重试次数2-3次,退避策略
- 监控告警:集成Prometheus+Grafana,监控服务健康状态、响应时间、错误率
- 链路追踪:集成Sleuth+Zipkin,追踪请求全链路,快速定位问题
7. 存储层
Redis
高并发方案
- 集群模式:采用Redis Cluster,3主3从架构,数据分片存储
- 读写分离:主节点写入,从节点读取,分担读压力
- 数据结构优化:选择合适的数据结构,避免大key和热key
- 批量操作:使用Pipeline减少网络往返
- 缓存预热:提前加载热点数据
- 过期策略:合理设置过期时间,避免集中过期
高可靠方案
- 持久化策略:AOF+RDB混合持久化,保证数据不丢失
- 主从复制:异步复制,从节点实时同步主节点数据
- 哨兵机制:监控主节点状态,自动故障转移(30秒内完成)
- 数据备份:定期备份RDB文件,异地存储
- 内存管理:设置maxmemory-policy=allkeys-lru,内存占用控制在maxmemory的80%以内
- 限流保护:使用Redis的CLIENT PAUSE命令应对突发流量
MySQL
高并发方案
- 读写分离:1主多从架构,写操作走主库,读操作分散到从库
- 分库分表:
- 水平分表:按用户ID或时间范围分片
- 垂直分表:将大表按业务拆分
- 中间件:使用ShardingSphere管理分库分表
- 索引优化:合理设计索引,避免全表扫描
- SQL优化:避免复杂SQL,大事务拆分为小事务
- 连接池优化:
- 最大连接数=200,最小空闲连接=20
- 等待超时=3秒,连接超时=1秒
高可靠方案
- 主从复制:半同步复制,保证数据一致性
- 高可用架构:
- MGR(MySQL Group Replication)多主架构
- 或主从+MHA自动故障转移
- 数据备份:
- 全量备份:每天一次
- 增量备份:每小时一次
- 备份文件异地存储
- 监控告警:监控连接数、慢查询、锁等待,设置合理阈值
- 容灾策略:跨机房部署,实现异地容灾
- 事务控制:设置合理的事务隔离级别,避免长事务
ElasticSearch
高并发方案
- 集群部署:3个以上节点,避免单点
- 分片策略:
- 主分片数=节点数*2,副本数=1
- 按业务类型拆分索引
- 索引优化:
- 合理设计Mapping,避免过度分词
- 禁用_all字段,减少存储和计算开销
- 查询优化:
- 使用filter上下文替代query上下文
- 避免深度分页,使用scroll或search after
- 批量操作:使用Bulk API批量写入数据
高可靠方案
- 副本机制:每个主分片至少1个副本,保证数据冗余
- 分片分配:设置合理的分片分配策略,避免分片集中在少数节点
- 索引生命周期管理:自动删除过期索引,优化存储
- 监控告警:监控集群健康状态、分片状态、磁盘使用率
- 快照备份:定期创建索引快照,支持数据恢复
- 断路器设置:设置合理的内存断路器阈值,避免OOM
- indices.breaker.total.limit: 70%
- indices.breaker.fielddata.limit: 40%
通过以上各层的技术方案,可以构建一个高可靠、高并发的SpringCloud微服务架构,满足大规模业务场景的需求。实际应用中,需要根据业务特点和流量规模进行合理调整和优化。