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

1000qps怎么保证系统的高可用

1000qps怎么保证系统的高可用(k8s)到消息隔离、限流、线程池怎么配置、缓存上面的优化

要保证系统在 1000 QPS 的高并发场景下实现高可用,需要从 Kubernetes 部署架构、消息隔离、限流、线程池优化、缓存策略 等多个维度进行设计。以下是完整的优化方案:

  1. Kubernetes 高可用架构设计
    (1) 多副本部署 + HPA 自动扩缩容

deployment.yaml 示例

apiVersion: apps/v1
kind: Deployment
metadata:name: my-app
spec:replicas: 3  # 初始副本数selector:matchLabels:app: my-apptemplate:spec:containers:- name: my-appimage: my-app:latestresources:limits:cpu: "2"memory: "2Gi"requests:cpu: "1"memory: "1Gi"
---

HPA 自动扩缩容 (CPU > 70% 或 QPS > 800 时扩容)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: my-app-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-appminReplicas: 3maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70- type: Externalexternal:metric:name: requests_per_secondselector:matchLabels:app: my-apptarget:type: AverageValueaverageValue: 800

(2) Pod 反亲和性 + 多可用区部署

affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [my-app]topologyKey: kubernetes.io/hostnamenodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues: [zone-a, zone-b, zone-c]

(3) 健康检查 + 就绪探针

livenessProbe:httpGet:path: /healthport: 8080initialDelaySeconds: 30periodSeconds: 10
readinessProbe:httpGet:path: /readyport: 8080initialDelaySeconds: 5periodSeconds: 5
  1. 消息隔离(MQ 优化)
    (1) 消息队列选型
    ● 高吞吐场景:Kafka(分区并行消费)
    ● 延迟敏感:RabbitMQ(优先级队列)
    ● 顺序消息:RocketMQ(顺序消息)
    (2) Kafka 分区设计
    // Producer 配置
    props.put(“acks”, “1”); // 平衡吞吐与可靠性
    props.put(“retries”, 3);
    props.put(“batch.size”, 16384); // 批量发送提升吞吐

// Topic 分区数 = 消费者数量 × 2(例如 6 分区)
bin/kafka-topics.sh --create --topic orders
–partitions 6 --replication-factor 3
(3) 消费者隔离
● 独立消费者组:不同业务使用不同 group.id
● 慢消费隔离:将延迟敏感消息单独放入高优先级队列

  1. 限流策略
    (1) 网关层限流(Nginx/Spring Cloud Gateway)

Nginx 限流 (1000 QPS)

limit_req_zone $binary_remote_addr zone=api_limit:10m rate=1000r/s;server {location /api/ {limit_req zone=api_limit burst=200 nodelay;proxy_pass http://backend;}
}
(2) 分布式限流(Redis + Lua)
// Redis 令牌桶算法
String luaScript = "local key = KEYS[1] " +"local limit = tonumber(ARGV[1]) " +"local current = tonumber(redis.call('get', key) or 0) " +"if current + 1 > limit then return 0 else redis.call('INCR', key) return 1 end";// 调用限流
Boolean pass = redisTemplate.execute(new RedisCallback<Boolean>() {@Overridepublic Boolean doInRedis(RedisConnection connection) {return connection.eval(luaScript.getBytes(),1,"api_limit_".getBytes(),"1000".getBytes()) == 1;}}
);

(3) Sentinel 熔断降级

Spring Cloud Alibaba Sentinel 配置

spring:cloud:sentinel:transport:dashboard: localhost:8080web-context-unify: falsedatasource:ds1:nacos:server-addr: localhost:8848dataId: sentinel-rulesruleType: flow
  1. 线程池优化
    (1) Tomcat/Jetty 线程池配置

application.yml (Spring Boot)

server:tomcat:threads:max: 200       # 最大线程数 (公式: QPS × 平均响应时间(ms) / 1000)min-spare: 20  # 最小空闲线程jetty:threadPool:maxThreads: 200minThreads: 20
(2) 异步任务线程池
@Configuration
public class ThreadPoolConfig {@Bean("asyncTaskExecutor")public Executor asyncTaskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(50);      // 核心线程数executor.setMaxPoolSize(200);      // 最大线程数executor.setQueueCapacity(1000);   // 队列容量executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());executor.setThreadNamePrefix("async-task-");return executor;}
}
(3) 线程池监控
// 监控线程池状态
ThreadPoolExecutor executor = (ThreadPoolExecutor) asyncTaskExecutor;
log.info("ActiveThreads={}, QueueSize={}", executor.getActiveCount(), executor.getQueue().size());5. 缓存优化
(1) 多级缓存架构
请求 → CDN → Nginx缓存 → Redis → 本地缓存(Caffeine) → DB
(2) Redis 优化
# Redis 集群配置 (6节点: 3主3从)
spring:redis:cluster:nodes: redis-1:6379,redis-2:6379,redis-3:6379lettuce:pool:max-active: 1000  # 连接池大小max-wait: 10ms

(3) 缓存策略
策略 适用场景 配置示例
读写穿透 强一致性场景 @Cacheable + Cache-Aside
异步刷新 高并发读场景 Caffeine.refreshAfterWrite(5m)
分布式锁防击穿 防止缓存失效风暴 RedissonLock.tryLock()

// Caffeine 本地缓存
LoadingCache<String, Data> cache = Caffeine.newBuilder().maximumSize(10_000).expireAfterWrite(5, TimeUnit.MINUTES).refreshAfterWrite(1, TimeUnit.MINUTES).build(key -> loadFromDB(key));
  1. 监控与告警
    (1) Prometheus + Grafana 监控

prometheus.yml 抓取配置

scrape_configs:- job_name: 'spring-app'metrics_path: '/actuator/prometheus'static_configs:- targets: ['app:8080']

(2) 关键指标告警
● QPS 突增:rate(http_requests_total[1m]) > 1200
● P99 延迟:histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[1m])) > 1s
● 缓存命中率:sum(rate(cache_hits_total[1m])) / sum(rate(cache_requests_total[1m])) < 0.9

总结:1000 QPS 高可用架构
层级 技术方案 优化目标
基础设施 K8s多副本+HPA+多可用区 弹性伸缩、容灾
流量控制 Nginx限流+Sentinel熔断 防止过载、优雅降级
消息队列 Kafka分区+消费者隔离 并行处理、业务解耦
线程池 动态线程池+异步化 资源利用率最大化
缓存 多级缓存+本地缓存刷新 降低延迟、减少DB压力
监控 Prometheus+Granfana+告警 快速定位瓶颈
通过以上组合策略,系统可以稳定支撑 1000 QPS 并具备横向扩展能力。实际部署时需根据压测结果微调参数。

http://www.dtcms.com/a/342371.html

相关文章:

  • abc Reachable Set
  • 基于Nodejs作为服务端,React作为前端框架,axios作为通讯框架,实现滑块验证
  • C++ 学习与 CLion 使用:(四)常量和变量,包括字面常量和符号常量
  • 计算机视觉--opencv(代码详细教程)(三)--图像形态学
  • 【框架篇二】FastAPI路由与请求处理
  • javaweb开发笔记——微头条项目开发
  • 零性能妥协:Gearbox Entertainment 通过 AWS 和 Perforce 实现远程开发革命
  • AWS EC2 实例优化检测工具:完整指南与实践
  • WSL的Ubuntu如何改名字
  • AWS Lambda 高并发场景下的错误处理与监控最佳实践
  • 06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
  • 一款更适合 SpringBoot 的API文档新选择(Spring Boot 应用 API 文档)
  • 数据结构:构建一棵AVL树需要多少节点(Height VS Nodes in AVL Trees)
  • Claude Code 已支持【团队版】和【企业版】订阅
  • 解析 C 语言整数类型:超越命名的长度奥秘
  • SWMM排水管网水力、水质建模及海绵城市与水环境中的应用
  • 7. if 条件语句的知识与实践
  • 三层交换机
  • CMake2: CMakeLists.txt的常用命令
  • 5.6 element ui
  • 计算机网络技术-第六章
  • STM32 TIM_CtrlPWMOutputs函数
  • 两种单例模式
  • 分享一个免费开源的网站跟踪分析工具Open-Web-Analytics(和GoogleAnalytics一样)
  • 3D 环形旋转图片轮播(纯html,css,js)
  • Docker:安装配置
  • Unity编辑器相关
  • 类加载问题与内存泄漏排查:隐藏在元数据区的致命陷阱
  • electron-vite_18Less和Sass共用样式指定
  • 超级 APP:重构多平台运营生态,一站式解决用户与商家痛点