国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你們公司的 QPS 是怎么統計出來的?這五種常見方法我踩過一半的坑!

開發 前端
每種方法都有自己的適用場景,我會結合 Java 項目常用技術棧(Spring Boot、Nginx、Prometheus 等),給出可直接復用的代碼。

三年前做電商秒殺項目,運維同學說 “網關 QPS 已經到 8000 了,趕緊擴容”,但我查應用監控卻顯示 “接口 QPS 才 3000”—— 兩邊數據差了一倍多,最后發現是網關統計時把 “健康檢查請求” 也算進去了,白擴容了 3 臺服務器。

作為 Java 的老開發,我太清楚 QPS 統計的重要性:它是判斷系統承載能力、決定是否擴容的核心依據,統計不準會導致 “要么資源浪費,要么系統雪崩”。今天就從 業務場景、技術原理、核心代碼、踩坑經驗 四個維度,拆解 5 種常見的 QPS 統計方法,幫你避開我曾踩過的坑。

一、先明確:不同業務場景,QPS 統計的 “粒度” 不一樣

在講方法前,得先搞清楚 “你要統計什么粒度的 QPS”—— 不同場景關注的重點完全不同:

業務場景

統計粒度

核心需求

電商秒殺

單個接口(如 /order/seckill)

實時性(秒級更新)、準確性(排除無效請求)

微服務集群監控

服務維度(如訂單服務)

全局視角(所有接口匯總)、低侵入

接口性能優化

方法級(如 createOrder 方法)

細粒度(定位慢方法)、結合響應時間

離線容量評估

全天 / 峰值時段匯總

數據完整性(不丟日志)、可回溯

二、5 種 QPS 統計方法:從網關到應用,從實時到離線

每種方法都有自己的適用場景,我會結合 Java 項目常用技術棧(Spring Boot、Nginx、Prometheus 等),給出可直接復用的代碼。

方法 1:網關層統計(全局視角,適合分布式項目)

適用場景:微服務集群,需要統計所有服務的總 QPS,或單個服務的入口 QPS(如 API 網關、Nginx)。原理:所有請求都經過網關,在網關層攔截請求,記錄請求數和時間,按秒計算 QPS。

實戰 1:Nginx 統計 QPS(中小項目首選)

Nginx 的access_log會記錄每一次請求,配合ngx_http_stub_status_module模塊,能快速統計 QPS。關注工眾號:碼猿技術專欄,回復關鍵詞:1111 獲取阿里內部Java性能調優手冊!

  • 配置 Nginx(nginx.conf):
http {
    # 開啟狀態監控頁面
    server {
        listen 8080;
        location /nginx-status {
            stub_status on;
            allow 192.168.0.0/24; # 只允許內網訪問
            deny all;
        }
    }

    # 記錄詳細請求日志(用于離線分析)
    log_format main '$remote_addr [$time_local] "$request" $status $request_time';
    server {
        listen 80;
        server_name api.example.com;
        access_log /var/log/nginx/api-access.log main; # 日志路徑

        # 轉發到后端服務
        location / {
            proxy_pass http://backend-service;
        }
    }
}
  • 查看實時 QPS: 訪問http://192.168.0.100:8080/nginx-status,會顯示:
Active connections: 200
server accepts handled requests
 10000  10000  80000
Reading: 0 Writing: 10 Waiting: 190
  • QPS 計算:requests/時間,比如 10 秒內請求 80000 次,QPS=8000。
  • 工具腳本:寫個 Shell 腳本定時統計(每 1 秒執行一次):
while true; do
    # 取當前請求數
    current=$(curl -s http://192.168.0.100:8080/nginx-status | awk 'NR==3 {print $3}')
    sleep 1
    # 取1秒后請求數
    next=$(curl -s http://192.168.0.100:8080/nginx-status | awk 'NR==3 {print $3}')
    qps=$((next - current))
    echo "當前QPS: $qps"
done

實戰 2:Spring Cloud Gateway 統計 QPS(Java 微服務)

如果用 Spring Cloud Gateway,可通過自定義過濾器統計 QPS:

@Component
publicclass QpsStatisticsFilter implements GlobalFilter, Ordered {
    // 存儲接口QPS:key=接口路徑,value=原子計數器
    privatefinal Map<String, AtomicLong> pathQpsMap = new ConcurrentHashMap<>();

    // 定時1秒清零計數器(避免數值過大)
    @PostConstruct
    public void init() {
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
        executor.scheduleAtFixedRate(() -> {
            // 遍歷所有接口,打印QPS后清零
            pathQpsMap.forEach((path, counter) -> {
                long qps = counter.getAndSet(0);
                log.info("接口[{}] QPS: {}", path, qps);
            });
        }, 0, 1, TimeUnit.SECONDS);
    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 獲取請求路徑(如/order/seckill)
        String path = exchange.getRequest().getPath().value();
        // 計數器自增(線程安全)
        pathQpsMap.computeIfAbsent(path, k -> new AtomicLong()).incrementAndGet();
        // 繼續轉發請求
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1; // 過濾器優先級:數字越小越先執行
    }
}

踩坑經驗:

  • 網關統計會包含 “健康檢查請求”(如 /actuator/health),需要過濾:在filter方法中加if (path.startsWith("/actuator")) return chain.filter(exchange);。
  • 分布式網關(多節點)需匯總 QPS,可把數據推到 Prometheus,避免單節點統計不準。

方法 2:應用層埋點(細粒度,適合單服務接口統計)

適用場景:需要統計單個服務的接口級 QPS(如訂單服務的 /create 接口),或方法級 QPS(如 Service 層的 createOrder 方法)。原理:用 AOP 或 Filter 攔截請求 / 方法,記錄請求數,按秒計算 QPS(適合 Java 應用)。

實戰:Spring AOP 統計接口 QPS

  • 引入依賴(Spring Boot 項目):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  • 自定義切面(統計 Controller 接口 QPS):
@Aspect
@Component
@Slf4j
publicclass ApiQpsAspect {
    // 存儲接口QPS:key=接口名(如com.example.OrderController.createOrder),value=計數器
    privatefinal Map<String, AtomicLong> apiQpsMap = new ConcurrentHashMap<>();

    // 定時1秒打印QPS并清零
    @PostConstruct
    public void scheduleQpsPrint() {
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
            apiQpsMap.forEach((api, counter) -> {
                long qps = counter.getAndSet(0);
                if (qps > 0) { // 只打印有請求的接口
                    log.info("[QPS統計] 接口: {}, QPS: {}", api, qps);
                }
            });
        }, 0, 1, TimeUnit.SECONDS);
    }

    // 切入點:攔截所有Controller方法
    @Pointcut("execution(* com.example.*.controller..*(..))")
    public void apiPointcut() {}

    // 環繞通知:統計請求數
    @Around("apiPointcut()")
    public Object countQps(ProceedingJoinPoint joinPoint) throws Throwable {
        // 獲取接口名(類名+方法名)
        String apiName = joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName();
        // 計數器自增
        apiQpsMap.computeIfAbsent(apiName, k -> new AtomicLong()).incrementAndGet();
        // 執行原方法
        return joinPoint.proceed();
    }
}

進階優化:

  • 過濾無效請求:在countQps中判斷響應狀態碼,只統計 200/300 的有效請求;
  • 結合響應時間:在環繞通知中記錄方法執行時間,同時統計 “QPS + 平均響應時間”:
// 記錄響應時間
long start = System.currentTimeMillis();
Object result = joinPoint.proceed();
long cost = System.currentTimeMillis() - start;
// 存儲響應時間(key=接口名,value=時間列表)
timeMap.computeIfAbsent(apiName, k -> new CopyOnWriteArrayList<>()).add(cost);
// 計算平均響應時間
double avgTime = timeMap.get(apiName).stream().mapToLong(Long::longValue).average().orElse(0);

踩坑經驗:

  • 并發安全:必須用AtomicLong計數,避免long變量的線程安全問題;
  • 性能影響:AOP 會增加微小開銷(單請求約 0.1ms),生產環境可通過@Conditional控制只在非生產環境啟用,或用 Java Agent 替代 AOP 減少侵入。

方法 3:監控工具統計(實時可視化,適合運維監控)

適用場景:需要實時可視化 QPS、歷史趨勢分析、告警(如 QPS 超過閾值自動發告警),主流方案是Prometheus + Grafana。原理:應用埋點暴露指標(如 QPS、響應時間),Prometheus 定時拉取指標,Grafana 展示圖表。

實戰:Spring Boot + Prometheus + Grafana 統計 QPS

  • 引入依賴:
<!-- Micrometer:對接Prometheus的工具 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 配置 Prometheus(application.yml):
spring:
  application:
    name:order-service# 服務名,用于Prometheus識別

management:
endpoints:
    web:
      exposure:
        include:prometheus# 暴露/prometheus端點
metrics:
    tags:
      application:${spring.application.name}# 給指標加服務名標簽
    distribution:
      percentiles-histogram:
        http:
          server:
            requests:true# 開啟響應時間分位數統計
  • 埋點統計 QPS(用 Micrometer 的MeterRegistry):
@RestController
@RequestMapping("/order")
publicclass OrderController {
    // 注入MeterRegistry
    privatefinal MeterRegistry meterRegistry;

    @Autowired
    public OrderController(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }

    @PostMapping("/create")
    public String createOrder() {
        // 統計/create接口的QPS:meterRegistry會自動按秒聚合
        Counter.builder("order.create.qps") // 指標名
                .description("訂單創建接口QPS") // 描述
                .register(meterRegistry)
                .increment(); // 計數器自增

        // 業務邏輯
        return"success";
    }
}
  • 配置 Prometheus 拉取指標(prometheus.yml):
scrape_configs:
  - job_name: 'order-service'
    scrape_interval: 1s # 每秒拉取一次(實時性高)
    static_configs:
      - targets: ['192.168.0.101:8080'] # 應用地址(暴露的actuator端口)
  • Grafana 配置圖表:

導入 Prometheus 數據源,寫 QPS 查詢語句:sum(rate(order_create_qps_total[1m])) by (application)(1 分鐘內的平均 QPS);

配置告警:當 QPS>5000 時,發送郵件 / 釘釘告警。

踩坑經驗:

  • 拉取間隔:scrape_interval不要設太小(如 < 100ms),會增加應用和 Prometheus 的壓力;
  • 指標命名:按 “業務 + 接口 + 指標類型” 命名(如order_create_qps),避免和其他指標沖突。
責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2025-10-21 02:00:00

2024-04-16 11:46:51

C#Redis數據庫

2015-07-27 10:24:01

蘋果中國

2020-12-04 10:11:26

Unsafejava并發包

2024-05-06 00:00:00

緩存高并發數據

2024-04-01 08:05:27

Go開發Java

2025-04-29 10:17:42

2017-07-17 15:46:20

Oracle并行機制

2025-10-16 08:10:59

2018-01-10 13:40:03

數據庫MySQL表設計

2024-11-07 11:17:50

2019-12-12 14:32:26

SQL語句數據庫

2021-02-21 09:28:24

kafka系統并發量

2025-06-27 08:34:19

2022-01-04 06:50:12

數據摘要方法

2025-11-06 02:55:00

2013-02-25 10:11:35

4GLTE商用網絡

2025-05-16 10:53:43

開發異步編程JavaScrip

2015-03-24 16:29:55

默認線程池java

2024-04-10 08:39:56

BigDecimal浮點數二進制
點贊
收藏

51CTO技術棧公眾號

午夜av电影一区| 黄色日韩网站视频| 日韩欧美一区二区免费| 人妻少妇精品无码专区二区| 成人看片黄a免费看视频| 色综合天天综合网天天看片| 丁香花在线影院观看在线播放| 亚洲综合小说| 欧美另类高清videos| 91麻豆国产福利在线观看宅福利| 亚洲欧美偷拍另类a∨色屁股| 中文字幕一区二区三区最新| 欧美精品九九| 欧洲日韩成人av| 日韩在线免费| 日韩精品在线一区二区| 午夜黄色在线观看| 中文字幕亚洲电影| 伊人成色综合网| 狠狠色丁香婷综合久久| 久久亚洲综合网| 狠狠精品干练久久久无码中文字幕| 成人在线视频www| 久久久久九九视频| 综合婷婷亚洲小说| 97影院理论午夜| 免费日本视频一区| 国产在线精品一区免费香蕉| 成人在线视频区| 亚洲日本欧美日韩高观看| av影片在线看| 精品国产老师黑色丝袜高跟鞋| chinese少妇国语对白| 国产一区二区三区四| 日本一区二区三区视频在线观看 | 美女在线视频一区| 亚洲一区二区免费| 少妇精品久久久一区二区| 久久视频在线直播| 精品国模一区二区三区| 亚洲国产97在线精品一区| 美女隐私在线观看| 欧美精品一级二级三级| www 日韩| 制服.丝袜.亚洲.中文.综合| 91露出在线| 欧美精品日韩综合在线| av在线女优影院| 欧美一区二区三区白人| 50度灰在线| 精品免费视频一区二区| h片在线观看视频免费| 精品香蕉在线观看视频一| 日本免费久久| 毛片精品免费在线观看| 韩国精品福利一区二区三区| 午夜精品在线观看| 日韩欧美一区二区三区在线视频| 国产精品亚洲一区二区三区| 国产精品二区影院| 欧美日韩一区二区三区在线观看免 | 国内久久精品视频| 一本久道久久综合| 国产麻豆一精品一av一免费 | 日韩av免费大片| 成人欧美一区二区三区黑人免费| 欧美精品福利| 成年人免费观看的视频| 成人97人人超碰人人99| 日韩精品视频一二三| 亚洲图片一区二区| 免费在线观看污视频| 精品日韩欧美一区二区| 四虎视频在线精品免费网址| 日韩免费av片在线观看| 国产精品aaaa| 亚洲国产最新| 亚洲黄色免费网站| 国产探花一区在线观看| 午夜精品久久久99热福利| 国产一区二区电影在线观看| 精品不卡一区二区三区| 国产一区二区三区综合| 99sesese| 欧美亚日韩国产aⅴ精品中极品| 91在线超碰| 九九热精品视频国产| 日韩欧美1区| 五月婷婷综合色| 中文字幕精品在线不卡| 国产一级二级三级在线观看| 在线播放精品一区二区三区| 欧美一级精品片在线看| 亚洲7777| 亚洲精品乱码久久久久久| 色爱综合区网| 欧美一级免费视频| 久久一二三四| 天天色综合社区| 欧美一区二区三区在线观看视频| 9999精品| 国产精品.com| 久久久亚洲午夜电影| 国产youjizz在线| 欧美成人一区二区三区电影| 亚洲巨乳在线| 国产一区二区在线免费播放| 91精品国产综合久久小美女| 哺乳一区二区三区中文视频| 日韩性感在线| 亚洲一区二区三区影院| 992tv国产精品成人影院| 丰满大乳少妇在线观看网站| 国产精品毛片久久久久久久| 青草影视电视剧免费播放在线观看| 色偷偷av一区二区三区| 亚洲精品精选| 免费看成人a| 日韩网站免费观看| 精品自拍视频| 韩国精品主播一区二区在线观看| 97精品国产97久久久久久| 丝袜美腿亚洲色图| 九色在线91| 中文字幕最新精品| 亚洲高清激情| 男人天堂v视频| 美日韩在线视频| 狠狠色综合播放一区二区| 国产精品乱码一区二区三区软件| 天天噜天天色| 精品国偷自产在线视频| 久久久久久自在自线| 影音先锋另类| 26uuu另类亚洲欧美日本一| 成人午夜在线播放| 牛牛电影国产一区二区| 国产综合av一区二区三区| 精品久久在线播放| 精品久久久久中文字幕小说| 鲁一鲁一鲁一鲁一av| 久久九九国产精品怡红院| 国产精品一区二区在线播放| 成人免费看片| 国产精品xxx在线观看www| 亚洲另类春色国产| 国产主播性色av福利精品一区| 国产资源在线免费观看| 亚洲欧美国产va在线影院| 奇米色一区二区| a视频在线观看免费| 国产欧美在线一区二区| 色88888久久久久久影院野外| 日韩一区亚洲二区| 在线观看麻豆视频| 国产精品视频区1| 一区二区三区色| 欧美人妖在线| 最新在线观看av| 91亚洲va在线va天堂va国| 亚洲午夜久久久久久久久久久| 综合干狼人综合首页| 性欧美18+| 91精品视频免费看| 色网综合在线观看| 国产精品www994| 美女写真理伦片在线看| 欧美二区三区在线| 日韩国产激情在线| 9i在线看片成人免费| 激情不卡一区二区三区视频在线| 免费看日本毛片| 久久综合电影一区| 中文字幕不卡的av| 天天躁日日躁成人字幕aⅴ| 超碰色偷偷男人的天堂| 国产精品美女视频网站| 欧美在线|欧美| 久热精品视频| 日本肉肉一区| 成人午夜剧场免费观看完整版| 成人激情久久| 一区二区在线播放视频| 91国产视频在线播放| 天天免费综合色| 国产伦理一区| 欧美日韩亚洲国产| 男人插曲女人视频免费| 91最新国产视频| 91麻豆精品国产91久久久| 韩国理伦片一区二区三区在线播放 | 国产在线视频欧美一区二区三区| 91超碰这里只有精品国产| 国产午夜久久| 在线黄色的网站| 欧美日韩在线观看不卡| 51国偷自产一区二区三区| 日韩一级完整毛片| 99精品视频免费在线观看| 里番精品3d一二三区|