回到網易后開源APM技術選型與實戰

篇幅一:APM基礎篇

\\

1、什么是APM?

\\

APM,全稱:Application Performance Management ,目前市面的系統基本都是參考Google的Dapper(大規模分布式系統的跟蹤系統)來做的,翻譯傳送門《google的Dapper 中文翻譯》

\\

思考下:不遵守該理論的是偽APM,耍流氓嗎?

\\

APM的核心思想是什么? 在應用服務各節點相互調用的時候,從中記錄并傳遞一個應用級別的標記,這個標記可以用來關聯各個服務節點之間的關系。比如兩個應用服務節點之間使用 HTTP 作為傳輸協議的話,那么這些標記就會被加入到 HTTP 頭中。可見如何傳遞這些標記是與應用服務節點之間使用的通訊協議有關的,常用的協議就相對容易加入這些內容,一些按需定制的可能就相對困難些,這一點也直接決定了實現分布式追蹤系統的難度。

\\

2、為什么要用APM?

\\

有業務痛點,才要尋求解決方案,個人認為,APM需要優先解決測試環境下兩個場景問題,基于測試先行的原則考慮:

\\

94dd32ebd95fbb363a0232089080105a.png

\優先關注宏觀數據,并不是說測試人員無須關注微觀層面的問題,在測試角度來看,先解決性能測試環境的數據采樣、收集問題,再去評估生產環境,而線上的鏈路監控需要研發跟運維去配合,【研發角度場景】相對于測試人員來說是弱關注了。

\\

3、市面上有哪些APM工具?

\\
  • Pinpoint
    \\tPinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
    https://github.com/naver/pinpoint\\t
  • SkyWalking
    \\tA distributed tracing system, and APM ( Application Performance Monitoring ) .
    http://skywalking.org\\t
  • Zipkin
    \\tZipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in microservice architectures. It manages both the collection and lookup of this data. Zipkin’s design is based on the Google Dapper paper.
    http://zipkin.io/\\t
  • CAT (大眾點評)
    \\tCAT基于Java開發的實時應用監控平臺,包括實時應用監控,業務監控。
    https://github.com/dianping/cat\

4、先說結論

\\

目前比較貼合 Google Dapper 原理設計的,Pinpoint 優于 Zipkin。
\Pinpoint對代碼的零侵入,運用JavaAgent字節碼增強技術,添加啟動參數即可。
\并且符合【測試角度場景】性能測試調優監控的宏觀;
\當然,結論太早了,會有疑惑:

\\

Spring Cloud Slueth和zipkin之間的關系是什么?

\\

需要看詳細對比的,詳見下圖:

\\

7eb1b29b341e0a4249c6371c39beeea7.png

\\

5、再說對比

\\

本質上 Spring Cloud Slueth 與 Pinpoint 沒有可比性,真正對比的是Zipkin,Spring Cloud Slueth 聚焦在鏈路追蹤和分析,將信息發送到Zipkin,利用 Zipkin的存儲來存儲信息,當然,Zipkin也可以使用ELK來記錄日志和展示,再通過收集服務器性能的腳本把數據存儲到ELK,則可以展示服務器狀況信息了。Zipkin的總體展示,也是基于鏈路分析為主。

\\

1fb925d8ab258148fa86217e3df5e657.png

\\

篇幅二:Pinpoint實戰篇

\\

1、Pinpoint架構圖

\\

Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.
cfeb2bff97a51861c829abcc63adb009.png

\\

架構圖對應說明:

\\
  • Pinpoint-Collector:收集各種性能數據\\t
  • Pinpoint-Agent:探針與應用服務器(例如tomcat)關聯,部署到同一臺服務器上\\t
  • Pinpoint-Web:將收集到的數據層現在web展示\\t
  • HBase Storage:收集到數據存到HBase中\

2、Pinpoint的數據結構

\\

Pinpoint 消息的數據結構主要包含三種類型 Span,Trace 和 TraceId。

\\
  • Span 是最基本的調用追蹤單元
    \\t當遠程調用到達的時候,Span 指代處理該調用的作業,并且攜帶追蹤數據。為了實現代碼級別的可見性,Span 下面還包含一層 SpanEvent 的數據結構。每個 Span 都包含一個 SpanId。\\t
  • Trace 是一組相互關聯的 Span 集合
    \\t同一個 Trace 下的 Span 共享一個 TransactionId,而且會按照 SpanId 和 ParentSpanId 排列成一棵有層級關系的樹形結構。\\t
  • TraceId 是 TransactionId、SpanId 和 ParentSpanId 的組合
    \\tTransactionId(TxId)是一個交易下的橫跨整個分布式系統收發消息的 ID,其必須在整個服務器組中是全局唯一的。也就是說 TransactionId 識別了整個調用鏈;SpanId(SpanId)是處理遠程調用作業的 ID,當一個調用到達一個節點的時候隨即產生;ParentSpanId(pSpanId)顧名思義,就是產生當前 Span 的調用方 Span 的 ID。如果一個節點是交易的最初發起方,其 ParentSpanId 是 -1,以標志其是整個交易的根 Span。下圖能夠比較直觀的說明這些 ID 結構之間的關系。\

f5fd2980211825ae00a07e5573bc8677.png

\\

3、Pinpoint部署

\\

網上太多部署文檔,這里不詳細說明,簡要說明下:
86a025cb1186968741131b497b3ecaa3.png

\\

注意版本要求:

\\

有兩種方式啟動:

\\

方式一:修改tomat目錄下bin/catalina.sh,在Control Script for the CATALINA Server加入以下三行代碼:

\\
\CATALINA_OPTS=\"$CATALINA_OPTS -javaagent:/home/webapps/service/pp-agent/pinpoint-bootstrap-1.6.2.jar\"\CATALINA_OPTS=\"$CATALINA_OPTS -Dpinpoint.agentId=pp32tomcattest\"\CATALINA_OPTS=\"$CATALINA_OPTS -Dpinpoint.applicationName=32tomcat\"
\\

第一行:pinpoint-bootstrap-1.6.2.jar的位置
\第二行:agentId必須唯一,標志一個jvm
\第三行:applicationName表示同一種應用:同一個應用的不同實例應該使用不同的agentId,相同的applicationName

\\

方式二:SpringBoot啟動

\\
\java  -javaagent:/home/webapps/pp-agent/pinpoint-bootstrap-1.6.2.jar  -Dpinpoint.agentId=pp32tomcattest -Dpinpoint.applicationName=32tomcat -jar 32tomcat-0.0.1-SNAPSHOT.jar
\\

4、代碼注入是如何工作的

\\

53a04f67e58eed565cab6d01695016d7.png
\Pinpoint 對代碼注入的封裝非常類似 AOP,當一個類被加載的時候會通過 Interceptor 向指定的方法前后注入 before 和 after 邏輯,在這些邏輯中可以獲取系統運行的狀態,并通過 TraceContext 創建 Trace 消息,并發送給 Pinpoint 服務器。但與 AOP 不同的是,Pinpoint 在封裝的時候考慮到了更多與目標代碼的交互能力,因此用 Pinpoint 提供的 API 來編寫代碼會比 AOP 更加容易和專業。

\\

5、Pinpoint實戰效果演示

\\

搭建一個java開源項目jforum,跑在tomcat下,使用jmeter進行壓測,用戶100個:

\\
  • \\t

    服務器圖(ServerMap)

    \\\t

    通過可視化其組件的互連方式來了解任何分布式系統的拓撲。單擊節點將顯示有關組件的詳細信息,例如其當前狀態和事務計數。
    4670e3b2b7f46976c1baf6fbbecc2163.png

    \\t\\t
  • \\t

    實時活動線程圖(Realtime Active Thread Chart)

    \\\t

    實時監視應用程序內的活動線程。(用了官方圖,當時沒截圖)
    6ebac9e1c415d598402b0952d2cb83ff.png

    \\t\\t
  • \\t

    請求/響應散布圖(Request/Response Scatter Chart)

    \\\t

    可視化請求計數和響應模式,以確定潛在問題。可以通過在圖表上拖動來選擇事務以獲取更多詳細信息。
    ddc955247bcdc646b69249cc0866284d.png

    \\t\\t
  • \\t

    調用棧信息(CallStack)

    \\\t

    增強分布式環境中每個事務的代碼級可見性,識別單個視圖中的瓶頸和故障點。
    aeda9a50a07822337bd93b82275ce73e.png

    \\t\\t
  • \\t

    檢查器(Inspector)

    \\t\

查看應用程序的其他詳細信息,如CPU使用率,內存/垃圾收集,TPS和JVM參數。
a282d96794c44430369a3585266316d1.png

\\

6、總結

\\

第一:PinPoint從宏觀上看:總體鏈路、服務總體狀態(cpu、內存等等信息),符合【測試角度場景】性能測試調優監控的宏觀;
\第二:Spring Cloud Slueth需要結合Zipkin從微觀來看:自身無法單獨提供展示,要結合Zipkin展示鏈路問題(并沒有服務器總體狀態的展示),更多服務器性能狀況等信息展示需要定制腳本通過ELK收集展示,符合【研發角度場景】性能測試調優監控的微觀;

\\

總的來說兩者是結合體,要單獨使用的話,從測試業務上來看:PinPoint滿足,性能測試調優監控的宏觀【測試角度場景】

\\

7、項目場景

\\

訪問某個API,后端應用服務產生的一系列鏈路,為何請求一次有23次數據庫訪問呢?這里就是需要排查的的地方,詳細看看CallTree,找出可優化的SQL查詢語句。
9d2daa6e8e123f9a44ffeccef612f193.png
643f51db3952920223ce6a16e55cb731.png
\另外,在做性能測試的時候,服務器并發的IO,PP不斷寫入也會產生瓶頸,需要后續解決。

\\

8、標簽庫項目簡單壓測

\\

通過jmeter對標簽庫進行簡單壓測,腳本如下:
d268dd61fcb61eb1a80243f69ab91b6c.png

\\

通過APM發現問題如下:
35881076f475cac3e821c483396fc81d.png

\\

pquery.do的res高達6782ms,需要安排開發進一步排查定位代碼問題

738c0c86c70c7131ca091dc2cac64ccd.png

\\

533aee6c55ece25c9d62dcb50a5bb625.png

\\

另外一種場景,測試人員無法在頁面獲取到的信息(有些情況下,測試人員是沒有服務器權限),這些是服務底層的異常信息,可以通過CallTree來查看。

\\

9、應用服務接入APM后的鏈路全景蜘蛛網圖

\\

e4748ad84ca9b681ce51a3d199313bd9.jpg

\\

參考文獻:

\\

Pinpoint github

Pinpoint源碼解析(三)Dapper,大規模分布式系統的跟蹤系統Pinpoint學習筆記Pinpoint v1.5.0 APM 視頻介紹

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

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

相關文章

持續集成持續部署持續交付_如何開始進行持續集成

持續集成持續部署持續交付Everything you need to know to get started with continuous integration: branching strategies, tests automation, tools and best practices.開始進行持續集成所需的一切:分支策略,測試自動化,工具和最佳實踐。…

51nod 1073約瑟夫環

思路傳送門 &#xff1a;http://blog.csdn.net/kk303/article/details/9629329 n里面挑選m個 可以遞推從n-1里面挑m個 然后n-1里面的x 可以轉換成 n里面的x 的公式 x &#xff08;xm&#xff09;%n; #include <bits/stdc.h> using namespace std;int main () {int n,m;s…

如何選擇優化算法遺傳算法_用遺傳算法優化垃圾收集策略

如何選擇優化算法遺傳算法Genetic Algorithms are a family of optimisation techniques that loosely resemble evolutionary processes in nature. It may be a crude analogy, but if you squint your eyes, Darwin’s Natural Selection does roughly resemble an optimisa…

robot:截圖關鍵字

參考&#xff1a; https://www.cnblogs.com/hong-fithing/p/9656221.html--python https://blog.csdn.net/weixin_43156282/article/details/87350309--robot https://blog.csdn.net/xiongzaiabc/article/details/82912280--截圖指定區域 轉載于:https://www.cnblogs.com/gcgc/…

leetcode 832. 翻轉圖像

給定一個二進制矩陣 A&#xff0c;我們想先水平翻轉圖像&#xff0c;然后反轉圖像并返回結果。 水平翻轉圖片就是將圖片的每一行都進行翻轉&#xff0c;即逆序。例如&#xff0c;水平翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。 反轉圖片的意思是圖片中的 0 全部被 1 替換&#xff…

SVN服務備份操作步驟

SVN服務備份操作步驟1、準備源服務器和目標服務器源服務器&#xff1a;192.168.1.250目標服務器&#xff1a;192.168.1.251 root/rootroot 2、對目標服務器&#xff08;251&#xff09;裝SVN服務器&#xff0c; 腳本如下&#xff1a;yum install subversion 3、創建一個新的倉庫…

SpringCloud入門(一)

1. 系統架構演變概述 #mermaid-svg-F8dvnEDl6rEgSP97 .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-F8dvnEDl6rEgSP97 .label text{fill:#333}#mermaid-svg-F8dvnEDl6rEgSP97 .node rect,#merm…

PullToRefreshListView中嵌套ViewPager滑動沖突的解決

PullToRefreshListView中嵌套ViewPager滑動沖突的解決 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情況,ViewPager 作為頭部添加到ListView中&#xff0c;發先ViewPager在滑動過程中流暢性太差幾乎很難左右滑動。在網上也看了很多大神的介紹&#xff0c;看了ViewP…

神經網絡 卷積神經網絡_如何愚弄神經網絡?

神經網絡 卷積神經網絡Imagine you’re in the year 2050 and you’re on your way to work in a self-driving car (probably). Suddenly, you realize your car is cruising at 100KMPH on a busy road after passing through a cross lane and you don’t know why.想象一下…

數據特征分析-分布分析

分布分析用于研究數據的分布特征&#xff0c;常用分析方法&#xff1a; 1、極差 2、頻率分布 3、分組組距及組數 df pd.DataFrame({編碼:[001,002,003,004,005,006,007,008,009,010,011,012,013,014,015],\小區:[A村,B村,C村,D村,E村,A村,B村,C村,D村,E村,A村,B村,C村,D村,E村…

開發工具總結(2)之全面總結Android Studio2.X的填坑指南

前言&#xff1a;好多 Android 開發者都在說Android Studio太坑了&#xff0c;老是出錯&#xff0c;導致開發進度變慢&#xff0c;出錯了又不知道怎么辦&#xff0c;網上去查各種解決方案五花八門&#xff0c;有些可以解決問題&#xff0c;有些就是轉來轉去的寫的很粗糙&#x…

無聊的一天_一人互聯網公司背后的無聊技術

無聊的一天Listen Notes is a podcast search engine and database. The technology behind Listen Notes is actually very very boring. No AI, no deep learning, no blockchain. “Any man who must say I am using AI is not using True AI” :)Listen Notes是一個播客搜索…

如何在Pandas中使用Excel文件

From what I have seen so far, CSV seems to be the most popular format to store data among data scientists. And that’s understandable, it gets the job done and it’s a quite simple format; in Python, even without any library, one can build a simple CSV par…

Js實現div隨鼠標移動的方法

HTML: <div id"odiv" style" COLOR: #666; padding: 2px 8px; FONT-SIZE: 12px; MARGIN-RIGHT: 5px; position: absolute; background: #fff; display: block; border: 1px solid #666; top: 50px; left: 10px;"> Move_Me</div>第一種&…

leetcode 867. 轉置矩陣

給你一個二維整數數組 matrix&#xff0c; 返回 matrix 的 轉置矩陣 。 矩陣的 轉置 是指將矩陣的主對角線翻轉&#xff0c;交換矩陣的行索引與列索引。 示例 1&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[[1,4,7],[2,5,8],[3,6,9]] …

數據特征分析-對比分析

對比分析是對兩個互相聯系的指標進行比較。 絕對數比較(相減)&#xff1a;指標在量級上不能差別過大&#xff0c;常用折線圖、柱狀圖 相對數比較(相除)&#xff1a;結構分析、比例分析、空間比較分析、動態對比分析 df pd.DataFrame(np.random.rand(30,2)*1000,columns[A_sale…

Linux基線合規檢查中各文件的作用及配置腳本

1./etc/motd 操作&#xff1a;echo " Authorized users only. All activity may be monitored and reported " > /etc/motd 效果&#xff1a;telnet和ssh登錄后的輸出信息 2. /etc/issue和/etc/issue.net 操作&#xff1a;echo " Authorized users only. All…

tableau使用_使用Tableau升級Kaplan-Meier曲線

tableau使用In a previous article, I showed how we can create the Kaplan-Meier curves using Python. As much as I love Python and writing code, there might be some alternative approaches with their unique set of benefits. Enter Tableau!在上一篇文章中 &#x…

踩坑 net core

webclient 可以替換為 HttpClient 下載獲取url的內容&#xff1a; 證書&#xff1a; https://stackoverflow.com/questions/40014047/add-client-certificate-to-net-core-httpclient 轉載于:https://www.cnblogs.com/zxs-onestar/p/7340386.html

我從參加#PerfMatters會議中學到的東西

by Stacey Tay通過史黛西泰 我從參加#PerfMatters會議中學到的東西 (What I learned from attending the #PerfMatters conference) 從前端的網絡運行情況發布會上的注意事項 (Notes from a front-end web performance conference) This week I had the privilege of attendin…