同九義,為何 SkyWalking 一枝獨秀?

隨著互聯網時代的發展,很多企業為了快速響應業務的變化,開始使用微服務架構。微服務架構的系統常常被切分為多個獨立的子系統並以集群的方式部署在數十甚至成百上千的機器上。

--《31講帶你搞懂 SkyWalking 》

你好,我是你的 SkyWalking 老師徐郡明。今天呢,我給大家講解一下APM 系統的概念以及目前市面上常見的 APM 實現,SkyWalking 的整體架構以及 Service、Endpoint、ServiceInstance 等核心概念。

01PART 常見 APM 系統

APM 系統(Application Performance Management,即應用性能管理)

國內比較常見的 APM 如下

1.CAT: 由國內美團點評開源的,基於 Java 語言開發,目前提供 Java、C/C++、Node.js、Python、Go 等語言的客戶端,監控數據會全量統計。國內很多公司在用,例如美團點評、攜程、拼多多等。CAT 需要開發人員手動在應用程序中埋點,對代碼侵入性比較強。

2.Zipkin: 由 Twitter 公司開發並開源,Java 語言實現。侵入性相對於 CAT 要低一點,需要對web.xml 等相關配置文件進行修改,但依然對系統有一定的侵入性。Zipkin 可以輕鬆與 Spring Cloud 進行集成,也是 Spring Cloud 推薦的 APM 系統。

3.Pinpoint: 韓國團隊開源的 APM 產品,運用了字節碼增強技術,只需要在啟動時添加啟動參數即可實現 APM 功能,對代碼無侵入。目前支持 Java 和 PHP 語言,底層採用 HBase 來存儲數據,探針收集的數據粒度非常細,但性能損耗較大,因其出現的時間較長,完成度也很高,文檔也較為豐富,應用的公司較多。

4.SkyWalking: 國人開源的產品,2019 年 4 月 17 日 SkyWalking 從 Apache 基金會的孵化器畢業成為頂級項目。目前 SkyWalking 支持 Java、.Net、Node.js 等探針,數據存儲支持MySQL、ElasticSearch等。SkyWalking 與 Pinpoint 相同,Java 探針採用字節碼增強技術實現,對業務代碼無侵入。探針採集數據粒度相較於 Pinpoint 來說略粗,但性能表現優秀。目前,SkyWalking 增長勢頭強勁,社區活躍,中文文檔齊全,沒有語言障礙,支持多語言探針,這些都是 SkyWalking 的優勢所在,還有就是 SkyWalking 支持很多框架,包括很多國產框架,例如,Dubbo、gRPC、SOFARPC 等等,也有很多開發者正在不斷向社區提供更多插件以支持更多組件無縫接入 SkyWalking。

還有很多不開源的 APM 系統,例如,淘寶鷹眼、Google Dapper 等等,不再展開介紹了。

本文選自:拉勾教育專欄《 31講帶你搞懂 SkyWalking 》見文末了解更多

02PART SkyWalking 架構與概念

SkyWalking 是一個基於 OpenTracing 規範的、開源的 APM 系統,它是專門為微服務架構以及雲原生架構而設計的。從 SkyWalking 6.0 開始,SkyWalking 將自身定義為一個觀測性分析平臺(Observability Analysis Platform,OAP)。

SkyWalking 的核心功能有:

  1. 服務、服務實例、端點指標分析。
  2. 服務拓撲圖分析
  3. 服務、服務實例和端點(Endpoint)SLA 分析
  4. 慢查詢檢測
  5. 告警

SkyWalking 如下特點:

  1. 多語言自動探針,支持 Java、.NET Code 等多種語言。
  2. 為多種開源項目提供了插件,為 Tomcat、 HttpClient、Spring、RabbitMQ、MySQL 等常見基礎設施和組件提供了自動探針。
  3. 微內核 + 插件的架構,存儲、集群管理、使用插件集合都可以進行自由選擇。
  4. 支持告警。
  5. 優秀的可視化效果。

本文選自:拉勾教育專欄《 31講帶你搞懂 SkyWalking 》見文末了解更多

SkyWalking 的架構圖如下所示:

同九義,為何 SkyWalking 一枝獨秀?

SkyWalking 分為三個核心部分:

  1. Agent(探針):Agent 運行在各個服務實例中,負責採集服務實例的 Trace 、Metrics 等數據,然後通過 gRPC 方式上報給 SkyWalking 後端。
  2. OAP:SkyWalking 的後端服務,其主要責任有兩個。一個是負責接收 Agent 上報上來的 Trace、Metrics 等數據,交給 Analysis Core (涉及 SkyWalking OAP 中的多個模塊)進行流式分析,最終將分析得到的結果寫入持久化存儲中。SkyWalking 可以使用 ElasticSearch、H2、MySQL 等作為其持久化存儲,一般線上使用 ElasticSearch 集群作為其後端存儲。另一個是負責響應 SkyWalking UI 界面發送來的查詢請求,將前面持久化的數據查詢出來,組成正確的響應結果返回給 UI 界面進行展示。
  3. UI 界面:SkyWalking 前後端進行分離,該 UI 界面負責將用戶的查詢操作封裝為 GraphQL 請求提交給 OAP 後端觸發後續的查詢操作,待拿到查詢結果之後會在前端負責展示。

這裡通過電商系統中的一個接口(請求 path 為"/query/userInfo"),來介紹一下 SkyWalking 中的三個核心概念,如下圖所示:

同九義,為何 SkyWalking 一枝獨秀?

1.Service(服務):用戶服務是一個提供獨立功能的模塊,單獨部署成一個集群並對外提供服務,這就是 SkyWalking 中的 Service(服務),這與微服務架構中的一個服務幾乎是一樣的。

2.ServiceInstance(服務實例):用戶服務的集群是由多個部署了同一套代碼的 JVM 節點構成的,對外提供了相同的處理能力,當請求進入系統時,由接入層進行負載均衡選擇一個節點處理請求。用戶服務中一個 JVM 節點即為一個 ServiceInstance(服務實例)。

3.Endpoint(端點):服務對外暴露的接口,例如這裡的 "/query/userInfo" 接口,或是其他的 RPC 接口,就是 SkyWalking 中的 Endpoint(端點)。

在後面的分享中,這三個概念會頻繁的出現,希望你仔細理解這三個概念之後,再開始後續的學習。今天的分享就到這裡啦~

本文選自:拉勾教育專欄《 31講帶你搞懂 SkyWalking 》見文末了解更多


分享到:


相關文章: