李 衡,楊潔艷,莫 穹(.中國聯(lián)合網(wǎng)絡(luò)通信集團有限公司,北京 00033;.中訊郵電咨詢設(shè)計院有限公司鄭州分公司,河南 鄭州 450007)
應(yīng)用性能管理(APM)是實現(xiàn)對應(yīng)用程序性能管理和故障管理的系統(tǒng)化解決方案。
隨著分布式系統(tǒng)和微服務(wù)架構(gòu)的應(yīng)用和發(fā)展,應(yīng)用性能管理成為系統(tǒng)運維管理和網(wǎng)絡(luò)管理的一個重要方向,它能夠?qū)φ麄€企業(yè)的IT 系統(tǒng)各個層面進行集中的性能監(jiān)控,并對有可能出現(xiàn)的性能問題進行及時、準(zhǔn)確的分析和處理。它能輕松地從一個IT 應(yīng)用系統(tǒng)中找到故障點,并提供相關(guān)解決建議或方法,從而提高整體的系統(tǒng)性能。一個企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)用的性能強大,可以保證企業(yè)業(yè)務(wù)應(yīng)用系統(tǒng)的高效性和穩(wěn)定性,提升企業(yè)的核心競爭力。
本文主要研究中國聯(lián)通IT 運營平臺應(yīng)用性能管理模塊建設(shè)模式,從APM 技術(shù)模型、核心功能、應(yīng)用價值入手,提出中國聯(lián)通IT運營平臺APM 模塊的建設(shè)需求、目標(biāo)、系統(tǒng)定位、功能需求,并對APM 使用場景作出探討。
1.1.1 APM模型
隨著互聯(lián)網(wǎng)技術(shù)和應(yīng)用的快速發(fā)展,應(yīng)用程序的管理變得越來越難,因為它們從單體架構(gòu)轉(zhuǎn)向高度分布的、多層、多元素的分布式應(yīng)用架構(gòu),應(yīng)用系統(tǒng)在許多情況下依賴于應(yīng)用程序的開發(fā)框架。APM 概念框架旨在幫助企業(yè)考慮在IT 系統(tǒng)架構(gòu)中需要首先關(guān)注的方法,以便企業(yè)能夠快速實施并全面了解五維APM模型。APM 五維模型如圖1所示。
圖1 APM 五維模型
終端用戶體驗:圖形化或數(shù)據(jù)化展示最終用戶使用應(yīng)用的可用性、時延、交易執(zhí)行等用戶視角體驗。
應(yīng)用架構(gòu)映射:實時發(fā)現(xiàn)應(yīng)用相關(guān)的硬件、軟件組件,并對這些組件之間的交互關(guān)系以及實時交易路徑進行清晰的圖形化展示。
應(yīng)用事務(wù)分析:記錄用戶的所有訪問行為,并根據(jù)相應(yīng)事件追蹤用戶的訪問在架構(gòu)中的路徑,以及交易在路徑各個節(jié)點上的性能表現(xiàn)。
深度應(yīng)用診斷:深度代碼診斷和分析,跟蹤記錄每個交易的代碼級上下文關(guān)聯(lián),以及對資源的消耗。
數(shù)據(jù)分析:根據(jù)采集的各項應(yīng)用系統(tǒng)指標(biāo)數(shù)據(jù),進行應(yīng)用性能分析。
1.1.2 APM核心功能
APM 主要包含應(yīng)用程序性能指標(biāo)檢測(存活、資源占用、時延等)、應(yīng)用程序關(guān)鍵事件檢測、服務(wù)調(diào)用跟蹤、監(jiān)控告警等核心功能。
1.1.3 APM主要應(yīng)用價值
對于IT 管理層:用戶體驗可量化,并與同行業(yè)的性能體驗比較可以發(fā)現(xiàn)自身差距并進行優(yōu)化,提升客戶滿意度。
對于IT 運維人員:實現(xiàn)了以應(yīng)用運行情況分析為核心的運維,提高運維價值,對運維數(shù)據(jù)可視化,更快發(fā)現(xiàn)、更準(zhǔn)確定位、更精準(zhǔn)地做出應(yīng)急決策。
對于業(yè)務(wù):掌握用戶體驗關(guān)鍵業(yè)務(wù)的關(guān)系,提高業(yè)務(wù)決策。
中國聯(lián)通網(wǎng)絡(luò)IT 運營平臺通過大數(shù)據(jù)、云計算技術(shù)整合網(wǎng)絡(luò)IT 運營資源,系統(tǒng)采用微服務(wù)架構(gòu)、容器化部署,針對中國聯(lián)通總部運營支撐自身系統(tǒng)及運維部OSS2.0 相關(guān)業(yè)務(wù)系統(tǒng),主要包括智能監(jiān)控、沃運維、資源管理、客服支撐、統(tǒng)一采集與指令適配、數(shù)據(jù)共享、沃網(wǎng)絡(luò)、統(tǒng)一流程平臺與省分平臺系統(tǒng)等,實現(xiàn)對各業(yè)務(wù)系統(tǒng)自動化、智能化、可視化的運營,面向各級管理單位與建設(shè)商提供統(tǒng)一的IT運營與運維服務(wù)能力。
2.1.1 主動化管理需求
隨著IT 技術(shù)的不斷發(fā)展、IT 架構(gòu)的日趨復(fù)雜,影響IT 系統(tǒng)可用性的主要因素不僅僅是基礎(chǔ)設(shè)施的性能,更多的是上層應(yīng)用的問題。而中國聯(lián)通傳統(tǒng)的基礎(chǔ)資源監(jiān)測自底向上對網(wǎng)絡(luò)、服務(wù)器、存儲、中間件、數(shù)據(jù)庫等基礎(chǔ)設(shè)備進行監(jiān)測,這種條塊化的監(jiān)測方式,因為技術(shù)原因無法深入到應(yīng)用系統(tǒng)內(nèi)部進行監(jiān)測,無法從應(yīng)用角度去衡量應(yīng)用可用性,應(yīng)用出現(xiàn)異常后無法主動定位異常根源。本文所述項目需要通過字節(jié)碼技術(shù)、網(wǎng)絡(luò)旁路鏡像收集與分析技術(shù)、日志分析技術(shù)等,收集應(yīng)用系統(tǒng)運行狀態(tài)和性能,自動生成應(yīng)用系統(tǒng)組件調(diào)用關(guān)系,主動快速定位故障根源,為系統(tǒng)性能分析、優(yōu)化、故障診斷提供準(zhǔn)確依據(jù)。
2.1.2 一體化管理需求
中國聯(lián)通IT 運營平臺需構(gòu)建一體化運維管理體系,通過前期科學(xué)的規(guī)劃和設(shè)計,采用各類不同的數(shù)據(jù)采集和分析技術(shù),改變以往數(shù)據(jù)孤島的運維模式,從底層IT 基礎(chǔ)設(shè)施資源到上層的應(yīng)用業(yè)務(wù),統(tǒng)一納入到一體化運維管理平臺中,做到“統(tǒng)一收集、統(tǒng)一存儲、統(tǒng)一分析、統(tǒng)一展示”。協(xié)助各級領(lǐng)導(dǎo)、運維主管、運維人員快速、清晰地掌握各類IT 系統(tǒng)的運行狀態(tài)和可用性,快速分析系統(tǒng)異常根源,降低IT查障、排障周期。
2.2.1 多級應(yīng)用系統(tǒng)監(jiān)控
覆蓋通信協(xié)議1~7層,通過事務(wù)處理過程的監(jiān)控、模擬等手段實現(xiàn)OSS各業(yè)務(wù)系統(tǒng)端到端應(yīng)用監(jiān)控。
2.2.2 應(yīng)用性能故障快速定位
對OSS 各業(yè)務(wù)系統(tǒng)各組件進行監(jiān)控,迅速定位系統(tǒng)故障,并進行修復(fù)或提出修復(fù)建議。
2.2.3 應(yīng)用性能全面優(yōu)化
精確分析各業(yè)務(wù)系統(tǒng)及其組件占用資源情況,并根據(jù)各業(yè)務(wù)系統(tǒng)性能要求提出優(yōu)化建議措施。
中國聯(lián)通IT 運營平臺中的應(yīng)用性能管理模塊應(yīng)能夠提供面向應(yīng)用的性能管理整體解決方案,提供自動應(yīng)用拓?fù)鋱D,根據(jù)總部運維支撐系統(tǒng)部署應(yīng)用的現(xiàn)有狀況,針對Java 和.net等語言提供代碼層事務(wù)追蹤,整合瀏覽器與主機層面的功能,能夠從應(yīng)用的宏觀視角分析系統(tǒng)運行的整體狀態(tài),同時基于端到端細(xì)化追蹤分析代碼及SQL執(zhí)行性能。應(yīng)用監(jiān)控需同時支持應(yīng)用端、瀏覽器端和移動端的應(yīng)用性能監(jiān)控。
根據(jù)中國聯(lián)通OSS 各運維應(yīng)用系統(tǒng)技術(shù)架構(gòu)現(xiàn)狀,提出如下IT運營平臺APM模塊建設(shè)功能要求。
2.4.1 多種開發(fā)語言與架構(gòu)支持
可以對多種開發(fā)語言、框架及應(yīng)用中間件的應(yīng)用代碼行執(zhí)行時間、SQL 語句的執(zhí)行時間以及應(yīng)用中調(diào)用其他服務(wù)的時間等提供監(jiān)控支持,多種開發(fā)語言支持,支持對J2EE,.net,PHP,Python,Ruby,Node.js 等開發(fā)語言的應(yīng)用性能監(jiān)控,支持的框架包括:
開發(fā)框架:CXF、JSF、Spring、Hibernate、HttpClient、Struts、EJB2、EJB3、OSB、Apache Turbine、Dorado、Netty。
應(yīng)用服務(wù)器:Weblogic、Websphere、Tomcat、Jboss、Jetty、Resin、TongWeb。
傳輸中間件:RabbitMQ、ActiveMQ、IBM MQ、Tonglinkq、RocketMQ。
數(shù)據(jù)庫:Oracle、SqlServer、MySQL、Postgres、DB2、Sybase、Informix、Mongodb、Redis、Memcached。
分布式協(xié)議:XMLRPC、hsfRPC、phpRPC、RMI、Dubbo、HTTP、Thrift。
2.4.2 應(yīng)用拓?fù)渥詣影l(fā)現(xiàn)
系統(tǒng)能夠根據(jù)應(yīng)用中間件的部署、URL 請求及參數(shù),自動識別出不同的業(yè)務(wù)系統(tǒng),并能跟蹤、串聯(lián)應(yīng)用系統(tǒng)從前端至后端的整個交互過程,自動識別并生成業(yè)務(wù)應(yīng)用端到端交易拓?fù)?;能夠在調(diào)用鏈視圖上展示節(jié)點自身響應(yīng)時間、調(diào)用的響應(yīng)時間及吞吐量等關(guān)鍵性能指標(biāo)。能夠根據(jù)應(yīng)用代碼的調(diào)用關(guān)系,自動呈現(xiàn)該應(yīng)用的全局調(diào)用拓?fù)鋱D及單事務(wù)調(diào)用拓?fù)鋱D,將性能瓶頸通過不同顏色及數(shù)據(jù)進行展現(xiàn),基于應(yīng)用環(huán)境建模,應(yīng)用拓?fù)涮峁┱{(diào)用層、節(jié)點、事務(wù)、SQL、層間事務(wù)調(diào)用等性能信息,實現(xiàn)將業(yè)務(wù)、應(yīng)用、邏輯的資源關(guān)聯(lián)圖展現(xiàn)。
2.4.3 跨應(yīng)用調(diào)用鏈追蹤
針對復(fù)雜的應(yīng)用架構(gòu),提供“應(yīng)用系統(tǒng)→集群→Agent”3層應(yīng)用監(jiān)控模型,能夠?qū)⑾嗤瑯I(yè)務(wù)功能的節(jié)點定義為同一集群,通過3層應(yīng)用架構(gòu)視圖,能夠在一張拓?fù)渲凶詣影l(fā)現(xiàn)和展示完整的跨應(yīng)用調(diào)用關(guān)系,從業(yè)務(wù)請求入口的角度,端到端地分析復(fù)雜應(yīng)用系統(tǒng)分布式應(yīng)用的運行情況。
2.4.4 異常性能剖析
對于異常業(yè)務(wù),能夠根據(jù)監(jiān)控管理需求進行線追蹤。對單個事務(wù)進行自定義的性能剖析,可設(shè)定剖析名稱、采樣周期、最大跟蹤數(shù)、持續(xù)時間參數(shù)。能夠收集到關(guān)鍵事務(wù)的CPU消耗、線程和鎖等數(shù)據(jù)。
2.4.5 單用戶緩慢調(diào)用鏈追蹤
調(diào)用鏈追蹤記錄單個用戶緩慢請求在整個應(yīng)用鏈路的調(diào)用詳情,包括調(diào)用路徑中每個節(jié)點的代碼執(zhí)行情況、數(shù)據(jù)庫性能等。通過自動還原的單個用戶請求調(diào)用鏈路,快速定位影響業(yè)務(wù)性能的故障節(jié)點,并可通過鉆取故障節(jié)點,深入查找代碼級原因。
2.4.6 SQL語句性能分析
系統(tǒng)能夠監(jiān)控應(yīng)用系統(tǒng)中SQL 語句的執(zhí)行情況,包括執(zhí)行時間、吞吐量、數(shù)據(jù)庫操作類型等,定位程序代碼與SQL 語句的調(diào)用關(guān)系。同時根據(jù)預(yù)設(shè)閾值,自動捕獲慢SQL 語句執(zhí)行。提供SQL 語句執(zhí)行時間、執(zhí)行時長、調(diào)用堆棧信息。
2.4.7 后臺服務(wù)性能分析
系統(tǒng)能夠監(jiān)控非Web事務(wù),如:EJB、JMS等后臺服務(wù)的平均響應(yīng)時間、吞吐量、服務(wù)器CPU/內(nèi)存使用情況等指標(biāo)。
2.4.8 外部服務(wù)性能監(jiān)控
能夠記錄分析所監(jiān)控的應(yīng)用系統(tǒng)中調(diào)用其他外部服務(wù)的平均響應(yīng)時間、執(zhí)行時間比重、吞吐量等指標(biāo),并能夠在拓?fù)湟晥D上清晰展示。
2.4.9 監(jiān)控事務(wù)自定義聚合
能夠根據(jù)http 請求中的信息進行自定義匯聚,包括但不限于URI、請求方法、請求參數(shù)、cookie、session、請求主機IP 地址、請求主機端口號、客戶端IP 地址;能夠根據(jù)類或者方法的信息進行自定義匯聚,包括但不限于方法中的參數(shù)、類名、包名、方法名、線程ID、線程等。
2.4.10 自定義參數(shù)管理
平臺能夠?qū)eb 請求過程中的參數(shù)進行收集和分析,包括URL、session id、cookie 中的參數(shù)、session 的屬性、http請求參數(shù)、http header中的參數(shù)。
2.4.11 系統(tǒng)錯誤分析
應(yīng)用系統(tǒng)錯誤率,是指應(yīng)用程序返回異常數(shù)據(jù)的比率。異常數(shù)據(jù)指的是底層應(yīng)用代碼所拋出的異常信息、http 無法響應(yīng)、Web 無響應(yīng)等錯誤信息,提供異常發(fā)送時間、請求事務(wù)、主機名、請求參數(shù)、自定義參數(shù)、錯誤信息、調(diào)用棧信息等數(shù)據(jù),與應(yīng)用程序運行日志中的錯誤信息等無關(guān)。系統(tǒng)會根據(jù)錯誤類別進行歸類展示。
2.4.12 應(yīng)用告警分析與通知
提供了完善的預(yù)警和告警機制,將提供郵件、webhook 等告警方式,用戶可以根據(jù)管理需要,對應(yīng)用系統(tǒng)性能管理中涉及的關(guān)鍵指標(biāo)以及相關(guān)人員進行定義,包括警報條件設(shè)置、應(yīng)用系統(tǒng)設(shè)置、通知方式設(shè)置、人員設(shè)置等。異常性能指標(biāo)告警指標(biāo)包括JVM 內(nèi)存、事務(wù)最大響應(yīng)時間、平均響應(yīng)時間、最小響應(yīng)時間、錯誤次數(shù)錯誤率、無數(shù)據(jù)告警等。
2.4.13 JVM性能分析
系統(tǒng)支持對JVM 運行狀態(tài)進行數(shù)據(jù)獲取,包含JVM 中堆內(nèi)存、非堆內(nèi)存的使用情況、垃圾回收情況、會話和線程情況、異常散點捕獲和展示??梢詭椭治鱿到y(tǒng)是否有內(nèi)存溢出或應(yīng)用運行異常。
2.4.14 IT運營分析
系統(tǒng)實時跟蹤應(yīng)用性能并將應(yīng)用性能信息存儲到管理服務(wù)器的性能數(shù)據(jù)庫中。用戶可以通過管理界面實時查看應(yīng)用系統(tǒng)過去一天、一周的歷史性能記錄,及時了解應(yīng)用系統(tǒng)的各種異常波動。
以下以分布式鏈路監(jiān)控追蹤分析為例,闡述APM在IT運營平臺的應(yīng)用。
隨著中國聯(lián)通網(wǎng)絡(luò)IT 應(yīng)用架構(gòu)的擴張,分布式系統(tǒng)變得日趨復(fù)雜,越來越多的組件開始走向分布式化,如微服務(wù)、消息收發(fā)、分布式數(shù)據(jù)庫、分布式緩存、分布式對象存儲、跨域調(diào)用,這些組件共同構(gòu)成了繁雜的分布式網(wǎng)絡(luò),那現(xiàn)在的問題是一個請求經(jīng)過了這些服務(wù)后出現(xiàn)了一個調(diào)用失敗的問題,只知道有異常,但具體的異常在哪個服務(wù)引起的就需要進入每一個服務(wù)里面看日志,這樣的處理效率是非常低的。
一個典型的分布式應(yīng)用如圖2所示。
圖2 典型分布式應(yīng)用場景
中國聯(lián)通急需一種能追蹤其調(diào)用鏈的APM 應(yīng)用方案,以快速完成問題的定位。
2.5.1 應(yīng)用場景
分布式調(diào)用鏈就是將一次分布式請求還原成調(diào)用鏈路,運維人員可通過客戶端或Web 瀏覽器查看一次分布式請求的調(diào)用情況,比如各個節(jié)點上的耗時、請求具體打到了哪臺機器上、每個服務(wù)節(jié)點的請求狀態(tài)等。具體應(yīng)用場景要求如下:
a)故障快速定位。通過調(diào)用鏈跟蹤,一次請求的邏輯軌跡可以完整清晰地展示出來。開發(fā)中可以在業(yè)務(wù)日志中添加調(diào)用鏈ID,通過調(diào)用鏈結(jié)合業(yè)務(wù)日志快速定位錯誤信息。
b)各個調(diào)用環(huán)節(jié)的性能分析。在調(diào)用鏈的各個環(huán)節(jié)分別添加調(diào)用時延,可以分析系統(tǒng)的性能瓶頸,進行針對性的優(yōu)化。通過分析各個環(huán)節(jié)的平均時延、QPS等信息,可以找到系統(tǒng)的薄弱環(huán)節(jié),對一些模塊做調(diào)整,如數(shù)據(jù)冗余等。
c)數(shù)據(jù)分析。調(diào)用鏈綁定業(yè)務(wù)后查看具體每條業(yè)務(wù)數(shù)據(jù)對應(yīng)的鏈路問題,可以得到用戶的行為路徑,經(jīng)過了哪些服務(wù)器上的哪個服務(wù),可匯總分析應(yīng)用在不同業(yè)務(wù)場景的性能表現(xiàn)。
d)生成服務(wù)調(diào)用拓?fù)鋱D。通過可視化分布式系統(tǒng)的模塊和它們之間的相互聯(lián)系來理解系統(tǒng)拓?fù)洹|c擊某個節(jié)點會展示這個模塊的詳情,比如它當(dāng)前的狀態(tài)和請求數(shù)量。
2.5.2 技術(shù)實現(xiàn)
服務(wù)追蹤體系,可參照Google 的Dapper 的體系,通過跟蹤請求的處理過程,來對應(yīng)用系統(tǒng)在前后端處理、服務(wù)端調(diào)用的性能消耗進行跟蹤(包括每個請求的完整調(diào)用鏈路和每個服務(wù)的性能數(shù)據(jù)),方便工程師快速定位問題。分布式鏈路監(jiān)控追蹤分析可選擇如下技術(shù)。
Zipkin:參考Dapper 的體系實現(xiàn),為分布式鏈路調(diào)用監(jiān)控系統(tǒng),聚合各業(yè)務(wù)系統(tǒng)調(diào)用延遲數(shù)據(jù),達(dá)到鏈路調(diào)用監(jiān)控跟蹤的目的。Zipkin 通過Brave 的組件來實現(xiàn)對應(yīng)用內(nèi)部的性能分析數(shù)據(jù)采集,通過實現(xiàn)一系列的Java 攔截器,來做到對http/servlet 請求、數(shù)據(jù)庫訪問的調(diào)用過程跟蹤。然后通過在spring 類的配置文件里加入這些攔截器,完成對Java應(yīng)用的性能數(shù)據(jù)采集。
Pinpoint:Pinpoint 是開源在github 上的一款A(yù)PM監(jiān)控工具,它是用Java編寫的,用于大規(guī)模分布式系統(tǒng)監(jiān)控。它對性能的影響最?。ㄖ辉黾蛹s3%資源利用率),安裝agent是無侵入式的。pinpoint通過JavaAgent的機制來做字節(jié)碼代碼植入,實現(xiàn)加入traceid 和抓取性能數(shù)據(jù)的目的。
技術(shù)對比如表1所示。
系統(tǒng)可根據(jù)現(xiàn)有應(yīng)用系統(tǒng)的技術(shù)架構(gòu)靈活地采用分布式鏈路監(jiān)控追蹤技術(shù)。
表1 技術(shù)對比
中國聯(lián)通IT運營平臺合理采用APM 技術(shù),可有效增強IT 應(yīng)用性能管理水平,應(yīng)對虛擬化技術(shù)、云化技術(shù)、容器技術(shù)、集群化技術(shù)發(fā)展下IT 系統(tǒng)帶來的管理挑戰(zhàn),能夠?qū)χ袊?lián)通網(wǎng)絡(luò)IT 的關(guān)鍵業(yè)務(wù)應(yīng)用進行監(jiān)測、優(yōu)化,提高企業(yè)應(yīng)用的可靠性和質(zhì)量,保證用戶得到良好的服務(wù),降低IT總擁有成本(TCO)。