服務鏈路追蹤

一、服務鏈路追蹤導論

1.背景

對于一個大型的幾十個、幾百個微服務構成的微服務架構系統,通常會遇到下面一些問題,比如:

  1. 如何串聯整個調用鏈路,快速定位問題?
  2. 如何理清各個微服務之間的依賴關系?
  3. 如何進行各個微服務接口的性能分折?
  4. 如何跟蹤整個業務流程的調用處理順序?

2.鏈路追蹤選型

  1. Zipkin是Twitter開源的調用鏈分析工具,目前基于springcloud sleuth得到了廣泛的使用,特點是輕量,使用部署簡單。
  2. Pinpoint是韓國人開源的基于字節碼注入的調用鏈分析,以及應用監控分析工具。特點是支持多種插件,UI功能強大,接入端無代碼侵入。
  3. SkyWalking是本土開源的基于字節碼注入的調用鏈分析,以及應用監控分析工具。特點是支持多種插件,UI功能較強,接入端無代碼侵入。目前已加入Apache孵化器。
  4. CAT是大眾點評開源的基于編碼和配置的調用鏈分析,應用監控分析,日志采集,監控報警等一系列的監控平臺工

起對比如下:

探針性能對比

模擬了三種并發用戶:500,750,1000。使用jmeter測試,每個線程發送30個請求,設置思考時間為10ms。使用的采樣率為1,即100%,這邊與生產可能有差別。pinpoint默認的采樣率為20,即50%,通過設置agent的配置文件改為100%。zipkin默認也是1。組合起來,一共有12種。下面看下匯總表:

從上表可以看出,在三種鏈路監控組件中,skywalking的探針對吞吐量的影響最小,zipkin的吞吐量居中。pinpoint的探針對吞吐量的影響較為明顯,在500并發用戶時,測試服務的吞吐量從1385降低到774,影響很大。然后再看下CPU和memory的影響,在內部服務器進行的壓測,對CPU和memory的影響都差不多在10%之內。?

二、Skywalking

1.Skywalking基礎概念

1.什么是Skywalking?

skywalking是一個國產開源框架,2015年由吳晟開源 , 2017年加入Apache孵化器。skywalking是分布式系統的應用程序性能監視工具,專為微服務、云原生架構和基于容器(Docker、K8s、Mesos)架構而設計。SkyWalking 是觀察性分析平臺和應用性能管理系統,提供分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。

官網:Apache SkyWalking

下載:Downloads | Apache SkyWalking

Github:GitHub - apache/skywalking: APM, Application Performance Monitoring System

文檔: https://skywalking.apache.org/docs/main/v8.4.0/readme/

中文文檔: SkyWalking 文檔中文版(社區提供)

2. Skywalking主要功能特性

1、多種監控手段,可以通過語言探針和service mesh獲得監控的數據;

2、支持多種語言自動探針,包括 Java,.NET Core 和 Node.JS;

3、輕量高效,無需大數據平臺和大量的服務器資源;

4、模塊化,UI、存儲、集群管理都有多種機制可選;

5、支持告警;

6、優秀的可視化解決方案;

3. Skywalking支持三種探針

● Agent – 基于ByteBuddy字節碼增強技術實現,通過jvm的agent參數加載,并在程序啟動時攔截指定的方法來收集數據。

● SDK – 程序中顯式調用SkyWalking提供的SDK來收集數據,對應用有侵入。

● Service Mesh – 通過Service mesh的網絡代理來收集數據。

2.架構設計

1. Skywalking整體架構

整個架構分成四部分:

1、上部分Agent :負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器;

2、下部分 SkyWalking OAP :負責接收Agent發送的Tracing數據信息,然后進行分析(Analysis Core),存儲到外部存儲器(Storage),最終提供查詢(Query)功能;

3、右部分Storage:Tracing數據存儲,目前支持ES、MySQL、Sharding Sphere、TiDB、H2多種存儲器,目前采用較多的是ES,主要考慮是SkyWalking開發團隊自己的生產環境采用ES為主;

4、左部分SkyWalking UI:負責提供控制臺,查看鏈路等等;

簡單來說就是負責數據采集-數據分析-數據存儲-數據查詢可視化頁面。

2.模塊交互流程

后端(Backend)

接受探針發送過來的數據,進行度量分析,調用鏈分析和存儲。后端主要分為兩部分:

● OAP(Observability Analysis Platform)- 進行度量分析和調用鏈分析的后端平臺,并支持將數據存儲到各種數據庫中,如:ElasticSearch,MySQL,InfluxDB等。

● OAL(Observability Analysis Language)- 用來進行度量分析的DSL,類似于SQL,用于查詢度量分析結果和警報。

界面(UI)

● RocketBot UI – SkyWalking 7.0.0 的默認web UI

● CLI – 命令行界面

這三個模塊的交互流程:

0

3.SkyWalking 部署實戰

  • skywalking agent和業務系統綁定在一起,負責收集各種監控數據
  • Skywalking oapservice是負責處理監控數據的,比如接受skywalking agent的監控數據,并存儲在數據庫中;接受skywalking webapp的前端請求,從數據庫查詢數據,并返回數據給前端。Skywalking oapservice通常以集群的形式存在。
  • skywalking webapp,前端界面,用于展示數據。
  • 用于存儲監控數據的數據庫,比如mysql、elasticsearch等。

啟動成功后訪問對應UI頁面,頁面地址為http://localhost:8080/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40629.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40629.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40629.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pycorrector一鍵式文本糾錯工具,整合了BERT、MacBERT、ELECTRA、ERNIE等多種模型,讓您立即享受糾錯的便利和效果

pycorrector:一鍵式文本糾錯工具,整合了Kenlm、ConvSeq2Seq、BERT、MacBERT、ELECTRA、ERNIE、Transformer、T5等多種模型,讓您立即享受糾錯的便利和效果 pycorrector: 中文文本糾錯工具。支持中文音似、形似、語法錯誤糾正,pytho…

Python OpenGL環境配置

1.Python的安裝請參照 Anconda安裝_安裝anconda_lwb-nju的博客-CSDN博客anconda安裝教程_安裝ancondahttps://blog.csdn.net/lwbCUMT/article/details/125322193?spm1001.2014.3001.5501 Anconda換源虛擬環境創建及使用(界面操作)_anconda huanyuan_l…

徹底卸載Android Studio

永恒的愛是永遠恪守最初的諾言。 在安裝Android Studio會有很多問題導致無法正常運行,多次下載AS多次錯誤后了解到,刪除以下四個文件才能徹底卸載Android Studio。 第一個文件:.gradle 路徑:C:\Users\yao(這里yao是本…

解密人工智能:線性回歸 | 邏輯回歸 | SVM

文章目錄 1、機器學習算法簡介1.1 機器學習算法包含的兩個步驟1.2 機器學習算法的分類 2、線性回歸算法2.1 線性回歸的假設是什么?2.2 如何確定線性回歸模型的擬合優度?2.3 如何處理線性回歸中的異常值? 3、邏輯回歸算法3.1 什么是邏輯函數?…

火山引擎聯合Forrester發布《中國云原生安全市場現狀及趨勢白皮書》,賦能企業構建云原生安全體系

國際權威研究咨詢公司Forrester 預測,2023年全球超過40%的企業將會采用云原生優先戰略。然而,云原生在改變企業上云及構建新一代基礎設施的同時,也帶來了一系列的新問題,針對涵蓋云原生應用、容器、鏡像、編排系統平臺以及基礎設施…

用棧解決有效的括號匹配問題

//用數組實現棧 typedef char DataType; typedef struct stack {DataType* a;//動態數組int top;//棧頂int capacity; //容量 }ST;void STInit(ST*pst);//初始化void STDestroy(ST* pst);//銷毀所有空間void STPush(ST* pst, DataType x);//插入數據到棧中void STPop(ST* pst);…

【業務功能篇65】maven加速 配置settings.xml文件 鏡像

maven加速 添加阿里鏡像倉 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additi…

Kubernetes 調度約束(親和性、污點、容忍)

目錄 一、Pod啟動典型創建過程 二、調度流程 三、指定調度節點 1.使用nodeName字段指定調度節點 2.使用nodeSelector指定調度節點 2.1給對應的node節點添加標簽 2.2修改為nodeSelector調度方式 3.通過親和性來指定調度節點 3.1節點親和性 3.2Pod親和性與反親和性 3.2…

Vue CLI創建Vue項目詳細步驟

&#x1f680; 一、安裝Node環境&#xff08;建議使用LTS版本&#xff09; 在開始之前&#xff0c;請確保您已經安裝了Node.js環境。您可以從Node.js官方網站下載LTS版本&#xff0c;以確保穩定性和兼容性。 中文官網下載 確認已安裝 Node.js。可以在終端中運行 node -v 命令…

基于STM32設計的中藥分裝系統

一、設計需求 基于STM32設計的中藥分裝系統 【1】項目背景 中藥文化是我國文化瑰寶之一,它具有療效好、副作用小的優點,而且相對于西藥,全天然的中藥還具有標本兼治的特點,不僅可以用來治病,更可以對患者身體進行調理,所以格外受到當今一直追求生活質量的人們的追捧&quo…

在Spring Boot和Vue中實現請求過濾器以驗證請求頭中的Token

在Spring Boot應用程序中創建一個過濾器類&#xff0c;用于處理請求&#xff1a; Component public class AuthenticationFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,…

FastAPI入門

目錄 FastAPI FastAPI 是什么 為什么要用 FastAPI FastAPI 入門 安裝 用 FastAPI 寫個接口 調試接口 創建快捷請求 保存為快捷請求 發送請求 總結 FastAPI FastAPI 是什么 什么是 FastAPI 呢&#xff1f; FastAPI 是 Python 的一個框架&#xff0c;如果要類比的話…

ros編譯catkin_make/catkin build 報錯“string no output variable specified”

文章目錄 問題描述問題分析問題描述 CMake Error at /opt/ros/melodic/share/catkin/cmake/platform/lsb.cmake:8 (string):string no output variable specified Call Stack (most recent call first):/opt/ros/melodic/share/catkin/cmake/all.cmake:164 (include)/opt/ros/…

Django的簡介安裝與配置及兩大設計模式

一.Djang的介紹 1.Django是什么 Django 是使用 Python 語言開發的一款免費而且開源的 Web 應用框架。 由于 Python 語言的跨平臺性&#xff0c;所以 Django 同樣支持 Windows、Linux 和 Mac 系統。 在 Python 語言熾手可熱的當下&#xff0c;Django 也迅速的崛起&#xff0c;在…

javaScript:一分鐘看懂數組排序以及冒泡排序(重點)

目錄 一.前言 二.數組排序 sort&#xff08;&#xff09; 字符串大小的比較原則 字符編碼排序規則 如果使用sort從小到大排列 &#xff08;重點&#xff09; 函數的返回值 規則&#xff1a; 代碼 案例 數組打亂 sort相關代碼 三.冒泡排序&#xff08;重點&#xff…

【RocketMQ】NameServer總結

NameServer是一個注冊中心&#xff0c;提供服務注冊和服務發現的功能。NameServer可以集群部署&#xff0c;集群中每個節點都是對等的關系&#xff08;沒有像ZooKeeper那樣在集群中選舉出一個Master節點&#xff09;&#xff0c;節點之間互不通信。 服務注冊 Broker啟動的時候會…

【通俗易懂】如何使用GitHub上傳文件,如何用git在github上傳文件

目錄 創建 GitHub 倉庫 使用 Git 進行操作 步驟 1&#xff1a;初始化本地倉庫 步驟 2&#xff1a;切換默認分支 步驟 3&#xff1a;連接到遠程倉庫 步驟 4&#xff1a;獲取遠程更改 步驟 5&#xff1a;添加文件到暫存區 步驟 6&#xff1a;提交更改 步驟 7&#xff1a…

Chrome 手動代理設置 HTTP/Socks5

1、安裝代理插件&#xff1a;SwitchyOmega 在線安裝 從 Chrome 應用商店 安裝&#xff0c;如果您無法從該鏈接安裝&#xff0c;請使用下面的離線安裝。 離線安裝 ①、去 Github 下載 最新版安裝包 &#xff0c;或者直接 本地下載 文件進行安裝。 ②、下載安裝文件后&#xf…

[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“

[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 這說明出現了undefined這個變量類型&#xff0c;比如JSON.parse()時候會出現&#xff0c;可以先嘗試打印JSON.parse()括號中的內容是否是undefined&#xff0c;如果是&#xff0c;那問題的根源…

RenderDoc 導出Cubemap到UE

找到使用了Cubemap的模型,再Output里會顯示該模型使用的所有貼圖 ,選中Cubemap導出 選擇導出格式為HDR 導出的Cubemap是豎著的,需要再PS里逆時針旋轉&#xff19;&#xff10;度 還有&#xff0c;導出的的Cubemap方向是錯的,需要把3,4 跟1,2 對換,6旋轉180度 UE 文檔里的方向參…