一、服務鏈路追蹤導論
1.背景
對于一個大型的幾十個、幾百個微服務構成的微服務架構系統,通常會遇到下面一些問題,比如:
- 如何串聯整個調用鏈路,快速定位問題?
- 如何理清各個微服務之間的依賴關系?
- 如何進行各個微服務接口的性能分折?
- 如何跟蹤整個業務流程的調用處理順序?
2.鏈路追蹤選型
- Zipkin是Twitter開源的調用鏈分析工具,目前基于springcloud sleuth得到了廣泛的使用,特點是輕量,使用部署簡單。
- Pinpoint是韓國人開源的基于字節碼注入的調用鏈分析,以及應用監控分析工具。特點是支持多種插件,UI功能強大,接入端無代碼侵入。
- SkyWalking是本土開源的基于字節碼注入的調用鏈分析,以及應用監控分析工具。特點是支持多種插件,UI功能較強,接入端無代碼侵入。目前已加入Apache孵化器。
- 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 – 命令行界面
這三個模塊的交互流程:
3.SkyWalking 部署實戰
- skywalking agent和業務系統綁定在一起,負責收集各種監控數據
- Skywalking oapservice是負責處理監控數據的,比如接受skywalking agent的監控數據,并存儲在數據庫中;接受skywalking webapp的前端請求,從數據庫查詢數據,并返回數據給前端。Skywalking oapservice通常以集群的形式存在。
- skywalking webapp,前端界面,用于展示數據。
- 用于存儲監控數據的數據庫,比如mysql、elasticsearch等。
啟動成功后訪問對應UI頁面,頁面地址為http://localhost:8080/