SkyWalking的OAP(Observability Analysis Platform,观测分析平台)是一个用于链路数据的分布式计算系统。

因为它巧妙的设计,使得在链路数据计算和聚合过程中,不需要考虑数据的一致性,也没有事务、分布式锁等概念。

在极端情况下,可能出现链路数据的丢失,但会最大限度保障OAP集群的可用性。咱们来看一下,它是如何设计的,为以后的系统设计和架构提供一些思路。

数据类型

在介绍分布式计算之前,咱们先了解一下需要计算的数据都有哪些类型:

  • Record数据,即明细数据,如Trace、访问日志等数据,由RecordStreamProcessor进行处理。
  • Metrisc数据,即指标数据,绝大部分的OAL指标都会生成这种数据,由MetricsStreamProcessor进行处理。
  • TopN数据,即周期性采样数据,如慢SQL的周期性采集,由TopNStreamProcessor进行处理。

分布式计算

像Trace、访问日志等这样的明细数据,数据量比较大,但是不需要归并处理,所以在OAP节点内部处理即可完成。明细数据采用缓存、异步批量处理和流式写入的方式写入到存储中。

绝大部分由OAL(Observability Analysis Language,观测分析语言)定义的指标数据是需要分布式聚合计算的,所以在OAP集群计算流中分成了两种步骤。

步骤一:接收和解析探针发送的数据,并进行当前OAP节点内的数据聚合,使用OAL或者其他聚合模式。如果是不需要分布式聚合的数据,直接写入到存储中;如果是需要分布式聚合的数据,根据一定的路由规则发送给指定的OAP节点。

步骤二:接收和解析经步骤一处理过的数据,然后进行二次聚合计算,并写入到存储中。

因为上面两个步骤极有可能不在同一个OAP节点上,所以OAP节点被分为Receiver(步骤一)和Aggregator(步骤二)两种角色。

为了减少部署难度,所有OAP节点在默认情况下都会使用Mixed角色(既可以进行步骤一的操作,也可以进行步骤二的操作)。在大规模部署的时候,可以根据网络流量进行角色分离的两级部署。

指标数据是计算资源消耗最大的分布式计算,也是整套分布式计算要支持的核心计算类型。在此计算过程中,使用哈希路由策略,根据计算的实体,如服务ID、端点ID等的哈希值来选择对应的OAP节点。

OAP节点之间的通信采用的是 gRPC stream 模式,传输过程中不包含业务字段名称,按照数据类型和字段定义顺序进行序列化,减少非数据字段的传输。

注:本文以SkyWalking的8.2.0版本为例进行介绍,如果版本不同会略有差异。

微信公众号:万猫学社

微信扫描二维码

关注后回复「电子书」

获取12本Java必读技术书籍

最后,感谢你的点赞和关注,帅气又美丽。

详解 Apache SkyWalking OAP 的分布式计算的更多相关文章

  1. 详解 Apache SkyWalking 跨进程传播协议

    简介 SkyWalking 跨进程传播协议是用于上下文的传播,本文介绍的版本是3.0,也被称为为sw8协议. Header项 Header应该是上下文传播的最低要求. Header名称:sw8. He ...

  2. 详解apache的allow和deny

    今天看了一篇关于apache allow,deny的文章收获匪浅,防止被删,我直接摘过来了,原文地址!!! !http://www.cnblogs.com/top5/archive/2009/09/2 ...

  3. Linux命令详解-Apache网站服务器配置和管理

    1.Apache网站服务器配置和管理 1.源码包安装 2.rpm包安装 rpm –a | grep httpd 3.启动服务 service httpd start 4.配置文件: /etc/http ...

  4. apache配置详解 apache安装路径

    http://www.linuxidc.com/Linux/2015-02/113921.htm 不同apache的安装方式 的安装目录示例 http://www.121down.com/articl ...

  5. 详解Apache服务与高级配置,(主配置文件每行都有描述)

    HTTP服务---> http://httpd.apache.org/(官方网站) httpd  service :纯粹的web服务器,同时开源(不是GPL). 特性:1.在进程特性上通常是事先 ...

  6. 详解Apache Hudi如何配置各种类型分区

    1. 引入 Apache Hudi支持多种分区方式数据集,如多级分区.单分区.时间日期分区.无分区数据集等,用户可根据实际需求选择合适的分区方式,下面来详细了解Hudi如何配置何种类型分区. 2. 分 ...

  7. 博文推荐|多图详解 Apache Pulsar 消息存储模型

    关于 Apache Pulsar Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息.存储.轻量化函数式计算为一体,采用计算与存储分离架构设计,支 ...

  8. 详解Apache Dubbo的SPI实现机制

    一.SPI SPI全称为Service Provider Interface,对应中文为服务发现机制.SPI类似一种可插拔机制,首先需要定义一个接口或一个约定,然后不同的场景可以对其进行实现,调用方在 ...

  9. 详解 Apache Hudi Schema Evolution(模式演进)

    Schema Evolution(模式演进)允许用户轻松更改 Hudi 表的当前模式,以适应随时间变化的数据. 从 0.11.0 版本开始,支持 Spark SQL(spark3.1.x 和 spar ...

随机推荐

  1. Windwos上Mysql突然出现系统错误3,找不到系统路口

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6540869188678844935/ 问题出现: 调试系统时,突然发现数据库连接不上了,打开界面工具也发现连接不上 ...

  2. less 循环模拟sass的for循环效果

    // 输入框部分宽度 从10px到600px 相隔10像素 .generate-widths(600); .generate-widths(@n, @i: 10) when (@i =< @n) ...

  3. 《剑指offer》面试题07. 重建二叉树

    问题描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍 ...

  4. 《剑指offer》面试题36. 二叉搜索树与双向链表

    问题描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜 ...

  5. 《剑指offer》面试题56 - II. 数组中数字出现的次数 II

    问题描述 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 示例 1: 输入:nums = [3,4,3,3] 输出:4 示例 2: 输入:nums ...

  6. 云计算实验二 Docker实验-docker安装

    一.实验目的  1.了解Docker服务安装: 2.掌握Docker镜像操作 二.实验内容 1.Docker服务安装 查看内核版本 uname -r 安装依赖环境: yum install -y yu ...

  7. 【解决了一个小问题】go.mod文件中引用另一个库,总会自动拉取新版本

    我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx. ...

  8. Cesium入门7 - Adding Terrain - 添加地形

    Cesium入门7 - Adding Terrain - 添加地形 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com ...

  9. uniapp微信小程序保存base64格式图片的方法

    uniapp保存base64格式图片的方法首先第一要先获取用户的权限 saveAlbum(){//获取权限保存相册 uni.getSetting({//获取用户的当前设置 success:(res)= ...

  10. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...