【手把手】光說不練假把式,這篇全鏈路壓測實踐探索

来源:https://www.cnblogs.com/jiagooushi/archive/2022/09/15/16696447.html
-Advertisement-
Play Games

Hello,大家好呀,前兩篇文章,我們說了下關於全鏈路壓測的意義、整體架構,以及5種壓測的方案。 前面兩篇基本都屬於比較理論的內容,今天這篇咱們來點實踐的東西,手把手帶你搞出一個壓測來 如果不清楚之前兩篇的文章的小伙伴,可以先看下,在這裡 7 環境準備 7.1 環境服務列表 需要在虛擬機或者linu ...


Hello,大家好呀,前兩篇文章,我們說了下關於全鏈路壓測的意義、整體架構,以及5種壓測的方案。

前面兩篇基本都屬於比較理論的內容,今天這篇咱們來點實踐的東西,手把手帶你搞出一個壓測來

如果不清楚之前兩篇的文章的小伙伴,可以先看下,在這裡

7 環境準備

7.1 環境服務列表

需要在虛擬機或者linux伺服器啟動運行環境

服務 ip 備註
mysql 172.18.0.10 3306 資料庫服務
rabbitMQ 172.18.0.20 5672,5672 RabbitMQ消息服務
redis 172.18.0.30 6379 Redis緩存服務
nacos 172.18.0.40 8848 微服務註冊中心
skywalking 172.18.0.50 1234,11800,12800 鏈路追蹤APM服務端
skywalking-ui 172.18.0.60 8080 鏈路追蹤APM服務UI端

7.2 應用服務列表

應用服務可以單獨部署或者在idea中啟動

服務 ip 備註
order-service 127.0.0.1 8001 訂單服務
account-service 127.0.0.1 8002 賬戶服務
storage-service 127.0.0.1 8003 數據存儲服務
notice-service 127.0.0.1 8004 通知服務

7.3 docker-compose 編排環境

我們的docker-compose只對環境進行了搭建,具體微服務在本地運行或者在容器運行都可以。

version: '2'
services:
    mysql:
        image: mysql:5.7
        hostname: mysql
        container_name: mysql
        networks:
            docker-network:
                ipv4_address: 172.18.0.10
        ports:
            - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
        volumes:
            - "/tmp/etc/mysql:/etc/mysql/conf.d"
            - "/tmp/data/mysql:/var/lib/mysql"
    rabbitMQ:
        image: rabbitmq:management
        hostname: rabbitMQ
        container_name: rabbitMQ
        networks:
            docker-network:
                ipv4_address: 172.18.0.20
        ports:
            - "5672:5672"
            - "15672:15672"
    redis:
        image: redis
        hostname: redis
        container_name: redis
        networks:
            docker-network:
                ipv4_address: 172.18.0.30
        ports:
            - "6379:6379"
        volumes:
            - "/tmp/etc/redis/redis.conf:/etc/redis/redis.conf"
            - "/tmp/data/redis:/data"
        command:
           redis-server /etc/redis/redis.conf
    nacos:
        image: nacos/nacos-server
        hostname: nacos
        container_name: nacos
        depends_on:
            - mysql
        networks:
            docker-network:
                ipv4_address: 172.18.0.40
        ports:
           - "8848:8848"
        environment:
            MODE: standalone
        volumes:
            - "/tmp/etc/nacos/application.properties:/home/nacos/conf/application.properties"
    skywalking:
        image: apache/skywalking-oap-server
        hostname: skywalking
        container_name: skywalking
        networks:
            docker-network:
                ipv4_address: 172.18.0.50
        ports:
           - "1234:1234"
           - "11800:11800"
           - "12800:12800"
    skywalkingui:
        image: apache/skywalking-ui
        hostname: skywalkingui
        container_name: skywalkingui
        depends_on:
            - skywalking
        networks:
            docker-network:
                ipv4_address: 172.18.0.60
        environment:
            SW_OAP_ADDRESS: 172.18.0.50:12800
        ports:
           - "8080:8080"
networks:
    docker-network:
        ipam:
            config:
                - subnet: 172.18.0.0/16
                  gateway: 172.18.0.1

7.4 初始化數據

  1. 初始化用戶數據以及產品數據

  2. 將feign,hystrix,ribbon等統一配置配置到nacos

    # 配置超時時間
    feign:
      hystrix:
        enabled: true  #開啟熔斷
      httpclient:
        enabled: true
    hystrix:
      threadpool:
        default:
          coreSize: 50
          maxQueueSize: 1500
          queueSizeRejectionThreshold: 1000
      command:
        default:
          execution:
            timeout:
              enabled: true
            isolation:
              thread:
                timeoutInMilliseconds: 60000
    ribbon:
      ConnectTimeout: 10000
      ReadTimeout: 50000
    

8 全鏈路壓測測試

8.1 jmeter配置

配置好壓測數據,並且配置壓測線程數1000 進行10輪壓測

file

8.2 第一輪壓測

8.2.1 鏈路分析優化

我們找到一個調用時長1S左右的鏈路,分析發現在存儲服務調用時,耗時較長,但是資料庫調用耗時並不長,基本說明是存儲服務的連接池耗盡導致調用過長。

file

8.2.2 資料庫連接池優化

調整存儲服務的連接池,由原來的最大10 改為100

initialSize: 10
minIdle: 20
maxActive: 100

8.3 第二輪壓測

結果已經由原來的服務內部的耗時 變為了fegin的耗時,這種情況下可以考慮使用fegin的連接池優化或者新增節點

file

8.3.1 觀察消費節點

發現消費速度很慢,產生了大量消息堆積

file

檢查storage-serviceactualPlaceOrder端點信息

發現平均響應時間在200ms左右

file

檢查斷點鏈路/storage/order/actualPlaceOrder

發現是事務提交慢造成的,這個時候就需要優化mysql伺服器了

file

9 Skywalking 使用

9.1 Skywalking 模塊欄目

file

Skywalking web UI 主要包括如下幾個大的功能模塊:

  • 儀錶盤:查看被監控服務的運行狀態
  • 拓撲圖:以拓撲圖的方式展現服務直接的關係,並以此為入口查看相關信息
  • 追蹤:以介面列表的方式展現,追蹤介面內部調用過程
  • 性能剖析:單獨端點進行採樣分析,並可查看堆棧信息
  • 告警:觸發告警的告警列表,包括實例,請求超時等。
  • 自動刷新:刷新當前數據內容。

9.2 儀錶盤

file

  • 第一欄:不同內容主題的監控面板,應用/資料庫/容器等
  • 第二欄:操作,包括編輯/導出當前數據/倒入展示數據/不同服務端點篩選展示
  • 第三欄:不同緯度展示,服務/實例/端點

9.3 展示欄

9.3.1 Global全局維度

file

  • 第一欄:Global、Server、Instance、Endpoint不同展示面板,可以調整內部內容
  • Services load:服務每分鐘請求數
  • Slow Services:慢響應服務,單位ms
  • Un-Health services(Apdex):Apdex性能指標,1為滿分。
  • Global Response Latency:百分比響應延時,不同百分比的延時時間,單位ms
  • Global Heatmap:服務響應時間熱力分佈圖,根據時間段內不同響應時間的數量顯示顏色深度
  • 底部欄:展示數據的時間區間,點擊可以調整。
9.3.2 Service服務維度

file

  • Service Apdex(數字):當前服務的評分
  • Service Apdex(折線圖):不同時間的Apdex評分
  • Successful Rate(數字):請求成功率
  • Successful Rate(折線圖):不同時間的請求成功率
  • Servce Load(數字):每分鐘請求數
  • Servce Load(折線圖):不同時間的每分鐘請求數
  • Service Avg Response Times:平均響應延時,單位ms
  • Global Response Time Percentile:百分比響應延時
  • Servce Instances Load:每個服務實例的每分鐘請求數
  • Show Service Instance:每個服務實例的最大延時
  • Service Instance Successful Rate:每個服務實例的請求成功率
9.3.3 Instance實例維度

file

  • Service Instance Load:當前實例的每分鐘請求數
  • Service Instance Successful Rate:當前實例的請求成功率
  • Service Instance Latency:當前實例的響應延時
  • JVM CPU:jvm占用CPU的百分比
  • JVM Memory:JVM記憶體占用大小,單位m
  • JVM GC Time:JVM垃圾回收時間,包含YGC和OGC
  • JVM GC Count:JVM垃圾回收次數,包含YGC和OGC
  • CLR XX:類似JVM虛擬機,這裡用不上就不做解釋了
9.3.4 Endpoint端點(API)維度

file

  • Endpoint Load in Current Service:每個端點的每分鐘請求數
  • Slow Endpoints in Current Service:每個端點的最慢請求時間,單位ms
  • Successful Rate in Current Service:每個端點的請求成功率
  • Endpoint Load:當前端點每個時間段的請求數據
  • Endpoint Avg Response Time:當前端點每個時間段的請求行響應時間
  • Endpoint Response Time Percentile:當前端點每個時間段的響應時間占比
  • Endpoint Successful Rate:當前端點每個時間段的請求成功率

9.4 拓撲圖

file

  • 1:選擇不同的服務關聯拓撲
  • 2:查看單個服務相關內容
  • 3:服務間連接情況
  • 4:分組展示服務拓撲

9.5 追蹤

file

  • 左側:api介面列表,紅色-異常請求,藍色-正常請求
  • 右側:api追蹤列表,api請求連接各端點的先後順序和時間

9.6 性能剖析

file

  • 服務:需要分析的服務
  • 端點:鏈路監控中端點的名稱,可以再鏈路追蹤中查看端點名稱
  • 監控時間:採集數據的開始時間
  • 監控持續時間:監控採集多長時間
  • 起始監控時間:多少秒後進行採集
  • 監控間隔:多少秒採集一次
  • 最大採集數:最大採集多少樣本

查看監控結果

file

本文由傳智教育博學谷教研團隊發佈。

如果本文對您有幫助,歡迎關註點贊;如果您有任何建議也可留言評論私信,您的支持是我堅持創作的動力。

轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 嗨嘍~大家好呀,這裡是魔王吶 ! 開發環境以及模塊的使用: python 3.6 pycharm requests >>> pip install requests os 內置模塊 不需要安裝的 整體流程: 代碼 import requests # 第三方模塊 pip install requ ...
  • 目錄 前言 本次案例實現目標 最基本思路流程: <通用> 一. 數據來源分析 二. 代碼實現步驟過程: 代碼實現基本四大步驟 代碼實現 獲取書籍詳情信息 發送請求 解析數據 保存數據 運行代碼得到結果 可視化圖表 書籍總體價格區間 各個出版社書籍數量柱狀圖 電子書版本占比 書籍評論數據 詞雲 對於本 ...
  • 摘要:串列流比較簡單,對於parallelStream,站在它背後的是ForkJoin框架。 本文分享自華為雲社區《深入理解Stream之foreach源碼解析》,作者:李哥技術 。 前言 Stream中的操作可以分為兩大類:中間操作與結束操作。 今天要說的foreach是屬於結束操作。 Strea ...
  • 聲明 本文章中所有內容僅供學習交流使用,不用於其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據介面等均已做脫敏處理,嚴禁用於商業用途和非法用途,否則由此產生的一切後果均與作者無關! 本文章未經許可禁止轉載,禁止任何修改後二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權, ...
  • “Mysql如何解決幻讀問題” 一個工作了4年小伙伴,去一個美團面試,遇到了這樣一個問題。 大家好,我是Mic,一個工作了14年的Java程式員 關於這個問題,面試官想考察什麼?我們應該如何回答呢? 問題解析 這個問題至少考察的是3年以上開發經驗的同學。 Mysql底層去解決併發事務問題,至少是要有 ...
  • 摘要:經常有朋友問,學 Python 面向對象時,翻閱別人代碼,會發現一個 super() 函數,那這個函數的作用到底是什麼? 本文分享自華為雲社區《Python中的super函數怎麼學,怎麼解?》,作者: 夢想橡皮擦。 實戰場景 經常有朋友問,學 Python 面向對象時,翻閱別人代碼,會發現一個 ...
  • 前言 1.安裝RabbitMQ前需先安裝erlang, 且兩者需要版本對應, 否則無法正常啟動RabbitMQ (本教程使用22.0.7版本的erlang和3.8.6版本的Rabbitmq) 版本對應查看: https://www.rabbitmq.com/which-erlang.html#com ...
  • 在之前關於資源與工序的場景中寫了一篇不同資源與工序組合下,APS設計難度的文章. 並針對多工序、多工序場景下排程的初步設計。關於生產計劃排程的種類及其特性. ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...