当前位置: 首页 > news >正文

微服务高可用高并发方案

目录
  • 背景和价值
  • SpringCloud微服务架构各层高可靠高并发技术方案
    • 1. CDN层
      • 高并发方案
      • 高可靠方案
    • 2. 业务网关
      • 高并发方案
      • 高可靠方案
    • 3. 北向网关
      • 高并发方案
      • 高可靠方案
    • 4. 南向网关
      • 高并发方案
      • 高可靠方案
    • 5. BFF层(Backend For Frontend)
      • 高并发方案
      • 高可靠方案
    • 6. 微服务层
      • 高并发方案
      • 高可靠方案
    • 7. 存储层
      • Redis
        • 高并发方案
        • 高可靠方案
      • MySQL
        • 高并发方案
        • 高可靠方案
      • ElasticSearch
        • 高并发方案
        • 高可靠方案
  • 参考资料

背景和价值

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微服务架构,满足大规模业务场景的需求。实际应用中,需要根据业务特点和流量规模进行合理调整和优化。

参考资料

http://www.wxhsa.cn/company.asp?id=897

相关文章:

  • Adobe PDF Reader实现旋转PDF功能
  • start.bat
  • 外泌体适配体筛选的 SELEX 技术:5 大核心方法拆解,精准捕捉 “细胞信使”
  • 知识点 AlexNet(2/8)
  • QtCreator问题输出框 MSVC编译出现中文乱码报错
  • Gitee DevOps本土化实践:为中国开发者打造全流程效能引擎
  • pip安装临时使用清华源
  • nginx 企业
  • java毕业设计-基于jspm网上书店管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等) - 详解
  • redis scan命令替换keys 命令
  • 聊一聊 .NET 某企业ECM内容管理系统 内存暴涨分析
  • SQL之字符串问题大坑
  • 可编辑区域
  • ES 跨订单的详情全局分页 解决
  • macbook pro2012怎么安装windows系统
  • docker-compose安装PostgreSQL和pgvector向量数据库
  • 【连续五届稳定检索、院士杰青云集】第六届先进材料与智能制造国际学术会议(ICAMIM 2025)
  • macbook airװwindowsϵͳ
  • 微信小程序语音转文字
  • 解决 windows远程桌面报错“CredSSP加密数据库修正”
  • 官网Chat对话 vs. API调用:本质区别与优化策略 - 浪矢
  • 【原创软件】第15期:免费好用的Excel合并软件,无需安装office也可以合并
  • 有关于简道云模式选择的思考
  • 详细介绍:80(HTTP默认端口)和8080端口(备用HTTP端口)区别
  • 一加9pro安卓14降级到安卓13记录
  • 【科普系列】隐藏在OSI模型里的“交通指挥员”——UDS会话层
  • openssl编程之sm2加解密代码示例
  • list对象转json_json转list对象集合
  • Gitee(码云)中国本土领先的代码托管与研发协作平台
  • H5游戏性能优化系列-----总纲