SkyWalking架构深度解析:分布式系统监控的利器

一、SkyWalking概述

        SkyWalking是一款开源的APM(应用性能监控)系统,专门为微服务、云原生和容器化架构设计。它由Apache软件基金会孵化并毕业,已成为分布式系统监控领域的明星项目。

核心特性

  • 分布式追踪‌:跨服务调用链路的完整追踪
  • 服务拓扑分析‌:自动绘制服务间依赖关系图
  • 性能指标监控‌:JVM、CLR、线程池等运行时指标
  • 告警系统‌:基于规则的实时告警机制
  • 日志集成‌:与分布式日志系统无缝对接

二、整体架构设计

SkyWalking采用模块化设计,主要分为以下几个核心组件:

1. Agent/探针层

架构角色‌:数据采集端

实现机制‌:

  • 基于Java Agent技术实现无侵入式埋点
  • 支持多种语言的探针(Java, .NET, NodeJS等)
  • 采用插件化架构,可按需扩展监控能力

核心功能‌:

  • 方法级追踪数据采集
  • JVM指标收集
  • 上下文传播(跨进程/跨线程)
  • 自适应采样控制

2. OAP(Observability Analysis Platform)服务层

架构角色‌:数据处理中枢

模块组成‌:

1. 接收层(Receiver)‌
  • 协议支持‌:
    • Agent上报:gRPC(SkyWalking原生协议)
    • 第三方集成:HTTP/JSON(如OpenTelemetry)、Kafka(日志流)
  • 关键组件‌:
    • Receiver-Trace:调用链数据解析
    • Receiver-Meter:Prometheus格式指标解析
    • Receiver-JVM:Java探针性能数据接收
‌2. 数据总线(Data Bus)‌
  • 作用‌:异步解耦接收层与分析层
  • 实现‌:
    • 内存队列(默认):基于Disruptor高性能环形队列
    • 扩展支持:Kafka(集群部署时启用)
‌3. 分析引擎(Analyzer)‌
  • 实时计算‌:
    • OAL脚本:定义指标计算规则(如service_resp_time = avg(endpoint.latency)
    • MAL引擎:数学告警表达式(如error_rate = sum(error)/sum(total)
  • 拓扑构建‌:自动识别服务依赖关系(基于Trace的上下游分析)
‌4. 聚合器(Aggregator)‌
  • 多级聚合‌:
    • L1聚合:分钟级指标(原始精度)
    • L2聚合:小时/天级指标(降精度存储)
  • 优化策略‌:时间窗口滚动计算(减少重复扫描)
‌5. 告警引擎(Alert Engine)‌
  • 规则触发‌:
    • 流式检测(如service_sla < 99%持续5分钟)
    • 支持动态加载规则(无需重启服务)
  • 输出事件‌:通过gRPC/Kafka推送至Alarm Service
‌6. 存储适配层(Storage Adapter)‌
  • 多存储支持‌:
    • 时序数据:Elasticsearch(默认)、TiDB
    • 元数据:H2(嵌入式)、MySQL
  • 分片策略‌:按时间分片(如metrics-202306
‌7. 查询引擎(Query Engine)‌
  • 统一接口‌:
    • GraphQL:拓扑/追踪查询
    • PromQL:指标查询(兼容Prometheus)
  • 缓存优化‌:热点数据LRU缓存

核心价值

  • 实时流式分析‌(Analyzer + Aggregator)
  • 可插拔架构‌(通过Storage Adapter对接不同存储)
  • 一体化观测能力‌(Metrics/Tracing/Logging联动)

3. UI层

架构特点‌:

  • 基于React+Ant Design实现
  • 动态仪表盘配置
  • 拓扑图自动布局算法
  • 多租户支持

三、核心架构设计亮点

1. 混合探针模型

/*** Java Agent的入口方法,由JVM在应用主程序启动前自动调用* * @param args  从-javaagent参数传入的配置字符串(如agent.jar=config.properties)* @param inst  JVM提供的Instrumentation实例,用于类加载拦截和字节码修改*/
public static void premain(String args, Instrumentation inst) {// 1. 创建插件扫描器// PluginConfig会加载plugins/目录下的所有插件定义文件(如apm-dubbo-plugin.xml)// PluginFinder根据这些配置建立"类名->对应插件"的映射关系PluginFinder finder = new PluginFinder(new PluginConfig());// 2. 安装字节码增强器// 将Instrumentation实例与插件扫描器绑定,后续所有类加载时都会触发扫描器检查// ByteBuddyAgent内部通过java.lang.instrument.ClassFileTransformer实现字节码注入ByteBuddyAgent.install(inst, finder);
}

支持三种数据采集模式:

  • 自动探针‌:零代码修改
  • 手动埋点‌:通过@Trace注解等
  • 服务网格集成‌:Istio/Envoy数据适配

2. 高性能数据处理流水线

关键优化点:

  • 异步非阻塞IO模型
  • 多级缓冲队列
  • 批处理写优化
  • 压缩传输

3. 可扩展存储架构

# 存储模块配置(支持动态扩展)
storage:# 1. 存储类型选择器 - 核心扩展点# 通过环境变量SW_STORAGE动态指定存储类型(默认elasticsearch)# 可扩展值:elasticsearch/h2/mysql/tidb/influxdb等selector: ${SW_STORAGE:elasticsearch} # 2. Elasticsearch配置组 - 插件化实现案例elasticsearch:# 命名空间隔离(多租户支持)nameSpace: ${SW_NAMESPACE:""}# 集群节点动态配置 - 支持水平扩展# 格式:ip1:port,ip2:port 可通过SW_STORAGE_ES_CLUSTER_NODES覆盖clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}# 其他可扩展参数示例:# - indexShardsNumber: 分片数扩展# - bulkActions: 批量写入规模调整 

支持存储类型:

  • Elasticsearch(生产推荐)
  • H2(开发测试)
  • TiDB/MySQL(关系型方案)
  • BanyanDB(SkyWalking自研时序数据库)

四、分布式协调与一致性保障机制‌

        ‌该架构通过分片路由、多级聚合和一致性协议的组合,在分布式环境下实现数据有序处理。

1. 数据分片路由机制‌

  • 哈希分片策略‌:Agent根据TraceID/ServiceID等关键字段计算哈希值,确定目标OAP节点,确保相同业务链路的请求始终路由到同一节点处理
  • 动态负载均衡‌:OAP集群通过心跳检测实时同步节点负载状态,Agent侧动态调整路由权重(如基于CPU/内存使用率)
  • 混合角色设计‌:默认所有OAP节点均为Mixed角色(同时承担接收和聚合),大规模部署时可分离为ReceiverAggregator两类专用节点

2. 分布式计算协同‌

处理阶段

协调机制

初次聚合

Receiver节点完成本地指标计算,需跨节点聚合的数据通过Data Bus分发

二次聚合

Aggregator节点按分片规则接收数据,完成全局聚合后写入存储

冲突解决

采用时间戳+版本号机制,对重复数据执行去重(如选择时间戳最新的记录)

3. 一致性保障技术‌

  • 最终一致性模型‌:通过异步批处理实现指标聚合,容忍秒级延迟但保证最终结果准确
  • 向量时钟(Vector Clock)‌:记录数据版本演化路径,解决跨节点时钟不同步导致的分歧
  • 幂等设计‌:所有数据处理操作支持重复执行,避免网络重传导致的数据重复计算

4. 容错与恢复‌

  • 检查点(Checkpoint)‌:定期持久化处理进度,故障恢复时从最近检查点继续处理
  • 冗余副本‌:关键数据在多个OAP节点保留副本,主节点故障时自动切换
  • 补偿机制‌:对超时/失败任务启动重试或回滚,确保数据不丢失

五、性能优化实践

1. Agent端优化‌:

  1. 适当调整采样率
  2. 过滤非关键Span
  3. 启用压缩传输

2. 服务端优化‌:

core:default:# 调整工作线程数restThreads: ${SW_CORE_REST_THREADS:2}# 增大处理队列restQueueSize: ${SW_CORE_QUEUE_SIZE:10000}

3. 存储层优化‌:

        a. ES分片策略优化

        b. 冷热数据分离

        c. 索引生命周期管理

六、与其他APM系统架构对比

特性

SkyWalking

Zipkin

Pinpoint

代码侵入性

扩展性

高(模块化)

一般

一般

存储多样性

支持多种

有限

HBase为主

语言支持

多语言

多语言

Java为主

云原生支持

优秀

一般

有限

结语

        SkyWalking通过其模块化、可扩展的架构设计,在分布式系统监控领域展现出强大的适应能力。其架构演进始终围绕三个核心原则:

  1. 对业务透明‌:最小化侵入性
  2. 高性能处理‌:应对大规模部署
  3. 开放生态‌:多语言多协议支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab程序设计基础

matlab程序设计基础 程序设计函数文件1.函数文件的基本结构2.创建并使用函数文件的示例3.带多个输出的函数示例4.包含子函数的函数文件 流程控制1. if 条件语句2. switch 多分支选择语句3. try-catch 异常处理语句ME与lasterr 4. while 循环语句5. for 循环语句break和continue…

Client-Side Path Traversal 漏洞学习笔记

近年来,随着Web前端技术的飞速发展,越来越多的数据请求和处理逻辑被转移到客户端(浏览器)执行。这大大提升了用户体验,但也带来了新的安全威胁。其中,Client-Side Path Traversal(客户端路径穿越,CSPT)作为一种新兴的漏洞类型,逐渐受到安全研究者和攻击者的关注。本文…

基于Socketserver+ThreadPoolExecutor+Thread构造的TCP网络实时通信程序

目录 介绍&#xff1a; 源代码&#xff1a; Socketserver-服务端代码 Socketserver客户端代码&#xff1a; 介绍&#xff1a; socketserver是一种传统的传输层网络编程接口&#xff0c;相比WebSocket这种应用层的协议来说&#xff0c;socketserver比较底层&#xff0c;soc…

【无标题】平面图四色问题P类归属的严格论证——基于拓扑收缩与动态调色算法框架

平面图四色问题P类归属的严格论证——基于拓扑收缩与动态调色算法框架 --- #### **核心定理** 任意平面图 \(G (V, E)\) 的四色着色问题可在多项式时间 \(O(|V|^2)\) 内求解&#xff0c;且算法正确性由以下三重保证&#xff1a; 1. **拓扑不变性**&#xff08;Kuratowsk…

HALCON 深度学习训练 3D 图像的几种方式优缺点

HALCON 深度学习训练 3D 图像的几种方式优缺点 ** 在计算机视觉和工业检测等领域&#xff0c;3D 图像数据的处理和分析变得越来越重要&#xff0c;HALCON 作为一款强大的机器视觉软件&#xff0c;提供了多种深度学习训练 3D 图像的方式。每种方式都有其独特的设计思路和应用场…

pytest中的元类思想与实战应用

在Python编程世界里&#xff0c;元类是一种强大而高级的特性&#xff0c;它能在类定义阶段深度定制类的创建与行为。而pytest作为热门的测试框架&#xff0c;虽然没有直接使用元类&#xff0c;但在设计机制上&#xff0c;却暗含了许多与元类思想相通的地方。接下来&#xff0c;…

以太网帧结构和封装【三】-- TCP/UDP头部信息

TCP头部用于建立可靠连接、流量控制及数据完整性校验。 Ipv4封装tcp报&#xff1a; Ipv6封装tcp报&#xff1a; UDP头部信息 UDP关键协议特性&#xff1a; 1&#xff09;无连接&#xff1a;无需握手&#xff0c;直接发送数据。 2&#xff09;不可靠性&#xff1a;不保证数据…

MySQL补充知识点学习

书接上文&#xff1a;MySQL关系型数据库学习&#xff0c;继续看书补充MySQL知识点学习。 1. 基本概念学习 1.1 游标&#xff08;Cursor&#xff09; MySQL 游标是一种数据库对象&#xff0c;它允许应用程序逐行处理查询结果集&#xff0c;而不是一次性获取所有结果。游标在需…

基于InternLM的情感调节大师FunGPT

基于书生系列大模型&#xff0c;社区用户不断创造出令人耳目一新的项目&#xff0c;从灵感萌发到落地实践&#xff0c;每一个都充满智慧与价值。“与书生共创”将陆续推出一系列文章&#xff0c;分享这些项目背后的故事与经验。欢迎订阅并积极投稿&#xff0c;一起分享经验与成…

【拓扑】1639.拓扑排序

题目描述 这是 2018 2018 2018 年研究生入学考试中给出的一个问题&#xff1a; 以下哪个选项不是从给定的有向图中获得的拓扑序列&#xff1f; 现在&#xff0c;请你编写一个程序来测试每个选项。 输入格式 第一行包含两个整数 N N N 和 M M M&#xff0c;分别表示有向图…

macOS 上使用 Homebrew 安装redis-cli

在 macOS 上使用 Homebrew 安装 redis-cli&#xff08;Redis 命令行工具&#xff09;非常简单&#xff0c;以下是详细步骤&#xff1a; 1. 安装 Redis&#xff08;包含 redis-cli&#xff09; 运行以下命令安装 Redis&#xff1a; brew install redis这会安装完整的 Redis 服…

Scratch节日 | 六一儿童节射击游戏

六一儿童节快乐&#xff01;这款超有趣的 六一儿童节射击游戏&#xff0c;让你变身小猫弓箭手&#xff0c;守护节日的快乐时光&#xff01; &#x1f3ae; 游戏玩法 上下方向键&#xff1a;控制小猫的位置&#xff0c;自由移动&#xff0c;瞄准目标&#xff01; 空格键&#…

[AI Claude] 软件测试2

好的&#xff0c;我现在为你准备一份预填充好大部分内容的测试报告和PPT内容。这里面的数据是我根据项目结构和常见的测试场景推理和编造的&#xff0c;你需要根据你的实际操作结果&#xff08;包括截图、实际数据、发现的缺陷等&#xff09;进行替换和修改。 我将按照之前定义…

程序代码篇---face_recognition库实现的人脸检测系统

以下是一个基于face_recognition库的人脸管理系统,支持从文件夹加载人脸数据、实时识别并显示姓名,以及动态添加新人脸。系统采用模块化设计,代码结构清晰,易于扩展。 一、系统架构 face_recognition_system/ ├── faces/ # 人脸数据库(按姓名命名子…

Cursor 工具项目构建指南:Java 21 环境下的 Spring Boot Prompt Rules 约束

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南:Java 21 环境下的 Spring Boot Prompt Rules 约束前言项目简…

大模型高效提示词Prompt编写指南

大模型高效Prompt编写指南 一、引言二、核心原则1. 清晰性原则&#xff1a;明确指令与期望2. 具体性原则&#xff1a;提供详细上下文3. 结构化原则&#xff1a;组织信息的逻辑与层次4. 迭代优化原则&#xff1a;通过反馈改进Prompt5. 简洁性原则&#xff1a;避免冗余信息 三、文…

gitLab 切换中文模式

点击【头像】--选择settings 选择【language】,选择中文&#xff0c;点击【保存】即可。

vue实现点击按钮input保持聚焦状态

主要功能&#xff1a; 点击"停顿"按钮切换对话框显示状态输入框聚焦时保持状态点击对话框外的区域自动关闭 以下是代码版本&#xff1a; <template><div class"input-container"><el-inputv-model"input"style"width: 2…

[春秋云镜] CVE-2023-23752 writeup

首先奉上大佬的wp表示尊敬&#xff1a;&#xff08;很详细&#xff09;[ 漏洞复现篇 ] Joomla未授权访问Rest API漏洞(CVE-2023-23752)_joomla未授权访问漏洞(cve-2023-23752)-CSDN博客 知识点 Joomla版本为4.0.0 到 4.2.7 存在未授权访问漏洞 Joomla是一套全球知名的内容管理…