您好,登錄后才能下訂單哦!
這篇文章主要介紹“APM的作用有哪些”,在日常操作中,相信很多人在APM的作用有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”APM的作用有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一個完整的微服務系統包含多個微服務單元,各個微服務子系統存在互相調用的情況,形成一個 調用鏈。一個客戶端請求從發出到被響應 經歷了哪些組件、哪些微服務、請求總時長、每個組件所花時長 等信息我們有必要了解和收集,以幫助我們定位性能瓶頸、進行性能調優,因此監控整個微服務架構的調用鏈十分有必要。
APM(application performance management)
通過記錄調用經過的每一條鏈路上的耗時,我們能快速定位整個系統的瓶頸點在哪里。比如你訪問微博首頁發現很慢,肯定是由于某種原因造成的,有可能是運營商網絡延遲,有可能是網關系統異常,有可能是某個服務異常,還有可能是緩存或者數據庫異常。通過服務追蹤,可以從全局視角上去觀察,找出整個系統的瓶頸點所在,然后做出針對性的優化。
通過服務追蹤可以分析調用所經過的路徑,然后評估是否合理。比如一個服務調用下游依賴了多個服務,通過調用鏈分析,可以評估是否每個依賴都是必要的,是否可以通過業務優化來減少服務依賴。
還有就是,一般業務都會在多個數據中心都部署服務,以實現異地容災,這個時候經常會出現一種狀況就是服務A調用了另外一個數據中心的服務B,而沒有調用同處于一個數據中心的服務B。
根據我的經驗,跨數據中心的調用視距離遠近都會有一定的網絡延遲,像北京和廣州這種幾千公里距離的網絡延遲可能達到30ms以上,這對于有些業務幾乎是不可接受的。通過對調用鏈路進行分析,可以找出跨數據中心的服務調用,從而進行優化,盡量規避這種情況出現。
通過服務追蹤系統中記錄的鏈路信息,可以生成一張系統的網絡調用拓撲圖,它可以反映系統都依賴了哪些服務,以及服務之間的調用關系是什么樣的,可以一目了然。除此之外,在網絡拓撲圖上還可以把服務調用的詳細信息也標出來,也能起到服務監控的作用。
除了服務追蹤,業務上經常有一種需求,期望能把一些用戶數據,從調用的開始一直往下傳遞,以便系統中的各個服務都能獲取到這個信息。比如業務想做一些A/B測試,這時候就想通過服務追蹤系統,把A/B測試的開關邏輯一直往下傳遞,經過的每一層服務都能獲取到這個開關值,就能夠統一進行A/B測試。
Google發布的一篇的論文Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
,里面詳細講解了服務追蹤系統的實現原理。它的核心理念就是調用鏈:通過一個全局唯一的ID將分布在各個服務節點上的同一次請求串聯起來,從而還原原有的調用關系,可以追蹤系統問題、分析調用數據并統計各種系統指標。
主要有侵入式探針和非侵入式探針:
侵入式探針: 通過添加代碼,配置攔截器等方式實現數據采集。
非侵入式探針: 通過修改字節碼的方式實現數據采集。
全局唯一,64位整數,用于標識一次分布式請求,會在RPC調用的網絡中傳遞。traceId是用于串聯某一次請求在系統中經過的所有路徑,
spanId是用于區分系統不同服務之間調用的先后關系,簽名方式生成:0, 0.1, 0.1.1, 0.2。用于標識一次RPC在分布式請求中的位置,比如0.2就是0節點服務調用的第二個服務。
用于業務自定義一些自己感興趣的數據,在上傳traceId和spanId這些基本信息之外,添加業務需求信息
OpenTracing 通過提供平臺無關、廠商無關的API,使得開發人員能夠方便的添加(或更換)追蹤系統的實現
不過 OpenTracing 并不是標準。因為 CNCF 不是官方標準機構,但是它的目標是致力為分布式追蹤創建更標準的 API 和工具
官方網站https://opentracing.io/
一個 trace 代表了一個事務或者流程在(分布式)系統中的執行過程
一個 span 代表在分布式系統中完成的單個工作單元。也包含其他 span 的 “引用”,這允許將多個 spans 組合成一個完整的 Trace
每個 span 根據 OpenTracing 規范封裝以下內容:
操作名稱
開始時間和結束時間
key:value span Tags
key:value span Logs
SpanContext
Span tags(跨度標簽)可以理解為用戶自定義的 Span 注釋。便于查詢、過濾和理解跟蹤數據
Span logs(跨度日志)可以記錄 Span 內特定時間或事件的日志信息。主要用于捕獲特定 Span 的日志信息以及應用程序本身的其他調試或信息輸出
SpanContext 代表跨越進程邊界,傳遞到子級 Span 的狀態。常在追蹤示意圖中創建上下文時使用
Baggage Items 可以理解為 trace 全局運行中額外傳輸的數據集合
數據采集層的作用就是在系統的各個不同模塊中進行埋點,采集數據并上報給數據處理層進行處理。
數據處理層的作用就是把數據采集層上報的數據按需計算,然后落地存儲供查詢使用。數據處理的需求一般分為兩類,一類是實時計算需求,一類是離線計算需求。
實時計算需求對計算效率要求比較高,一般要求對收集的鏈路數據能夠在秒級別完成聚合計算,以供實時查詢。而離線計算需求對計算效率要求就沒那么高了,一般能在小時級別完成鏈路數據的聚合計算即可,一般用作數據匯總統計。針對這兩類不同的數據處理需求,采用的計算方法和存儲也不相同。
實時數據處理
針對實時數據處理,一般采用Storm或者Spark Streaming來對鏈路數據進行實時聚合加工,存儲一般使用OLTP數據倉庫,比如HBase,使用traceId作為RowKey,能天然地把一整條調用鏈聚合在一起,提高查詢效率。
離線數據處理
針對離線數據處理,一般通過運行MapReduce或者Spark批處理程序來對鏈路數據進行離線計算,存儲一般使用Hive。
數據展示層的作用就是將處理后的鏈路信息以圖形化的方式展示給用戶。實際項目中主要用到兩種圖形展示,一種是調用鏈路圖,一種是調用拓撲圖。
到此,關于“APM的作用有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。