一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
前言
微服务架构体系下面,如何快速的定位问题?一个实际的场景,用户浏览商品,下单,支付一个看似简单的动作,在整个电商体系架构下面是走了,多个个服务的流程。中间任何一个环节都有可能出问题。
一个日活千万级别电商公司,每个服务的节点就有可能是几十个,以传统的人肉运维,登录后台查询日志基本上是无法完整这个线上问题快速响应的工作的。
对于一个大型的几十个,几百个微服务构成的微服务架构系统,通常会遇到下面的一系列问题。
- 如何串联整个调用链路,快速定位问题?
- 如何澄清各个微服务之间的依赖关系?
- 如何进行各个微服务接口的性能分析?
- 如何追踪各个业务流程的调用处理顺序?
Skywalking 介绍
skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。
skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。
SkyWalking is an open source APM system, including monitoring, tracing, diagnosing capabilities for distributed system in Cloud Native architecture. The core features are following.
- Service, service instance, endpoint metrics analysis
- Root cause analysis. Profile the code on the runtime
- Service topology map analysis
- Service, service instance and endpoint dependency analysis
- Slow services and endpoints detecting
- Performance optimization
- Distributed tracing and context propagation
- Database access metrics. Detect slow database access statements(including SQL statements)
- Message Queue performance and consuming latency monitoring
- Alarm
- Browser performance monitoring
- Infrastructure(VM, network, disk etc.) monitoring
- Collaboration across metrics, traces, and logs
常用的链路追踪的框架
目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的。
Skyworking 架构
SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面.
1. 探针
基于不同的来源可能是不一样的, 但作用都是收集数据, 将数据格式化为 SkyWalking 适用的格式.
2. 平台后端
支持数据聚合, 数据分析以及驱动数据流从探针到用户界面的流程。 分析包括 Skywalking 原生追踪和性能指标以及第三方来源,包括 Istio 及 Envoy telemetry , Zipkin 追踪格式化等。 你甚至可以使用 Observability Analysis Language 对原生度量指标 和 用于扩展度量的计量系统自定义聚合分析。
3. 存储
通过开放的插件化的接口存放 SkyWalking 数据. 你可以选择一个既有的存储系统, 如 ElasticSearch, H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统。
**4. UI **
一个基于接口高度定制化的Web系统,用户可以可视化查看和管理 SkyWalking 数据。
主要内容:采集上报,分析,持久化,可视化
1. 采集上报:
探针采集(Tracing 和 Metrics),语言探针或其他项目协议 在新的架构示意图中,系统采集部分还多了 Logging 和 事件检查器(Event Detector),并且在他们和接收器中间还加了一个传输层。
2. OAP 平台:
由接收器、分析内核、查询内核三部分组成 在新的架构示意图中,Tracing 和 Metrics 被拿到了外面,接收器 Receiver 也被单独拿了出来,并且可以做成集群。