解密 Grupo MasMovil 使用 ClickHouse 监控无线网络

图片

本文字数:4151;估计阅读时间:11 分钟

作者:Rodrigo Aguirregabiria Herrero, Grupo MasMovil

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

图片

我们很高兴与大家分享来自西班牙最大的电信运营商之一Grupo Masmovil的这篇客座文章。Masmovil的OSS & Tools Monitoring部门的高级监控工程师Rodrigo Aguirregabiria Herrero详细介绍了监控无线接入网络(RAN)所面临的挑战以及ClickHouse如何改变了他们的方法。

对于不熟悉无线接入网络(RAN)的人来说,它们是移动网络的第一个接入点。这些节点允许您的智能手机访问2G、3G、4G和5G网络。

这些网络庞大而复杂,需要部署成千上万个节点(或天线)。这样,当您远离一个节点时,您可以连接到另一个节点并保持互联网连接。

在MasMovil,我们决定从专用于电信的工具迁移到开源的大数据技术,其中之一就是ClickHouse,它让我们能够:

  • 改进我们的监控解决方案:

    • 拥有更可靠的解决方案

    • 加快处理速度

    • 保留更多数据

  • 在以下方面节省成本:

    • 软件许可证

    • 第三级支持

    • 硬件

让我们看看我们是如何做到的。

实际数据规模

那么,我们如何监控为数百万人提供互联网服务的数千个节点呢?

有几种方法可以做到这一点,但在这种情况下,我们将专注于直接来自这些节点的信息。

这些节点有许多指标,几乎可以监控它们的每一个性能方面,例如与其他节点的连接、通话数量、流量,以及每个节点字面上数以千计的计数器。

我们并不需要所有这些信息,因此我们对其进行了过滤。然而,我们仍然有数百个计数器和数千个节点,每个节点每15分钟发布一次数据。

数据以非结构化格式进入我们的服务器,存储在磁盘上的文件中。因此,它不是作为事件流发布的。这些文件的大小可以在200KB到40MB之间(这确实是一个很宽的范围),但是拥有40MB的节点只是一个很小的部分。最常见的情况是节点大小在2-5MB左右,想象一下我们只有大约1万个节点,那么我们每15分钟就要处理大约30GB的数据,每天将近3TB的数据。注意:1万个节点不足以为整个西班牙提供服务。

基本上,我们需要每小时处理数千个文件,但主要问题是快速读取磁盘上写入的文件。使用流式处理工具处理数据并不太复杂。然而,我们需要一个在磁盘使用方面最佳的数据库。

这就是ClickHouse的好处之一。加上查询速度非常快。

使用ClickHouse,您可以使用不同的编解码器和压缩算法,这在这种情况下非常有帮助,因为调整压缩会显着减少存储负担,这不仅更有效,而且更具成本效益。

让我们看看我们在其中一张表中使用ClickHouse实现的数据压缩:

rowsdisk_sizecompressed_sizeuncompressed_sizeratio
562426183351.84 GiB349.04 GiB1.31 TiB0.260

压缩效果相当不错,与实际数据大小相比,我们使用的磁盘要少得多,与之前的解决方案相比也是如此。

通过我们当前的解决方案,我们使用的磁盘使用量比之前减少了16倍,但最重要的是,我们保留了更多的数据。这是如何可能的呢?首先,我们需要了解一些关于公式、传统电信监控系统以及时间和物理聚合的知识。

公式、时间和空间聚合

在本文的前面部分,我们已经谈到了计数器;然而,在几乎所有情况下,单独的计数器并不提供太多有用的信息。有价值的信息来自我们的工程团队或节点供应商设计的公式。

这些公式生成可以使用一个或多个计数器的关键绩效指标(我指的是很多;我们有使用超过150个计数器的公式)。

因此,如果我们有数百个不太有用的计数器和数百个有用的KPI,为什么不只保留计算出的KPI呢?这可能是一个解决方案,但不是一个有效的解决方案,因为我们不仅监视节点和某个时间段,用户需要在不同的时间聚合和空间聚合中获取信息。

用户以15分钟、每小时、每天等批次中找到有用的数据。这些信息不能预先计算,因为这会导致在更大的时间聚合中出现错误的KPI。

一个快速的例子是节点中的呼叫成功率,公式是:

100 x (成功呼叫数/呼叫尝试数)

一个小时内的一个节点:

TimeSuccessful CallsCall AttemptsSuccess Call Rate
9:0011100%
9:1522100%
9:3010030033,33%
9:459810098%

如果我们只有最终的KPI,我们就无法得到小时的真实值,因为让我们看看如果我们得到平均值 -> (100 + 100 + 33,33 + 98)/4 = 82,83

但是那个值完全被歪曲了。它没有考虑到在某些时间戳下呼叫数量是更大的。

真正的KPI将计算为:


100 * ((1+2+100+98)/(1+2+300+100)) = 49,88

这几乎是平均值的一半。这意味着我们需要所有计数器的信息,而不是最终的KPI。

这种计算在SQL中相当容易,只需将时间转换为前几个小时,并对计数器进行求和,例如:


toStartOfHour(Time), 100 * SUM(Successful Calls)/SUM(Call Attempts)

相当简单!而且最好的是我们不需要计算出的KPI。

我们的遗留系统的问题在于它需要计算出的KPI和原始计数器,因此结果是我们消耗了更多的磁盘空间。

我们已经谈到了时间聚合,但也有空间聚合。我们只提到了对节点的监控,但在这些节点内部有单元,而在它们上面,还有关于城市、地区的拓扑信息,以及全国某些KPI的值,这些对我们的工程团队至关重要。

在空间聚合方面,我们将会有:

图片

节点包含一组小区,而节点属于城市、地区等。用户需要能够进行所有必要的深入分析。

问题在于,传统系统需要对所有空间和时间聚合都同时使用原始计数器和计算得到的关键绩效指标。

实际数据的图像如下所示:

图片

但我们还没有考虑时间聚合,所以我们将有一个第三维,一个立方体。在数据中,立方体听起来很像OLAP立方体,对吗?

图片

我们正在指数级地增加数据的大小。在传统系统中,我们有复杂的方法来创建这些公式和聚合,同时为KPI和网络拓扑创建内部清单。

但请考虑这一点,如果我们有一个高速的OLAP数据库,我们只需要为标记了单元格的原始计数器(添加列)与其他拓扑的部分合并,就像这样:

图片

这就是我们使用ClickHouse的主要原因。在ClickHouse中,实时查询非常快,因此我们不再需要复杂的系统来计算不同类型的聚合的公式。目前,一旦我们有了单元格数据,并且拓扑已经丰富,我们就拥有了所有相关信息,不需要后台进行更多数据处理。

此外,传统系统需要将大量数据存储在磁盘上,不能存储最小时间聚合的大量数据。例如,对于15分钟的数据,我们只有15天的数据,对于每小时的数据,我们有30天的数据,对于15分钟的数据,我们有一年的数据。

现在,我们有1年的15分钟数据。再多也是没有必要的,对于更大的聚合,我们将它们保存在单独的表中。最终,我们拥有了一个更丰富的数据集,并且我们使用的磁盘空间少了16倍。

SQL,查询的力量

另一个重要方面是公式。它们之间差异很大,有些简单,有些使用数百个计数器,有些需要前一时间相同KPI的值,有些计数器是数组,等等。

这给一些公式增加了很多复杂性。如果你需要一个能提供这些功能的系统,你将需要一个复杂的系统,它可以持续改进,如果出现新的KPI类型。这些系统不仅需要一个强大的数据库,还需要一个强大的后端。随着所有这些复杂性,另一个问题出现了,即指标发布的延迟,我们的传统系统可能会有3小时的数据发布延迟。

但是使用SQL和ClickHouse带来的附加功能,我们可以复制所有不同的KPI,自己或与ClickHouse支持团队的帮助下创建它们是很有趣的,后者对于特殊和奇怪的KPI帮助了我们很多。

通过SQL,我们可以为所有类型的聚合使用相同的公式,在我们的情况下,我们使用Grafana来表示它。使用变量和查询,我们使用户能够轻松地在时间和空间聚合之间切换,一切都是动态的。

因此,ClickHouse同时结合了我们的后端和数据库。

关于我们的ClickHouse环境

我们在运行ESX的虚拟机中使用Docker部署了ClickHouse。

我们从几个内核和8GB的RAM开始,根据需要添加更多资源。

大多数时候,它只消耗几个内核,但为了尽快为用户提供结果,它可以占用所有内核。

结果和结论

在实施了这种新的RAN网络监控方式的一年半后,这些是我们的成果:

  • 我们保留更多数据,使用的空间减少了16倍。

    • 用户可以查看旧数据,没有丢失的信息。

  • 结果发布的延迟大大减少(15分钟对比传统系统的3小时)。主要延迟在数据文件的提取上。

  • 我们使用的资源(CPU和内存)减少了10倍。

  • KPI的公式对用户是透明的,不再隐藏在用户后端。

  • 支持多种可视化工具

    • Superset

    • Grafana

    • 自定义前端开发

  • 稳定性。我们的ClickHouse部署从未出现故障,也没有停机,而传统系统通常存在间隙,需要不断重启。

更多详情

  • ClickHouse插件 for Grafana | Grafana Labs 【https://grafana.com/grafana/plugins/grafana-clickhouse-datasource/】

  • 将Superset连接到ClickHouse | ClickHouse文档 【https://clickhouse.com/docs/en/integrations/superset】

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

图片

​​联系我们

手机号:13910395701

邮箱:Tracy.Wang@clickhouse.com

满足您所有的在线分析列式数据库管理需求

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

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

相关文章

数据类型总结

1 引言 在计算机的世界里,数据类型是被人类定义出来的,方便人去更好地理解、辨别数据。计算机只能识别二进制数,不可能要求写代码时,只是输入一些0/1的东西。通过定义数据类型,可以让人和计算机更好地“沟通”&#x…

如何评价微软发布的Phi-3,手机都可以运行的小模型

前几天才刚刚发布了Llama 3,今天微软就出手了,发布了小而精的phi-3 添加图片注释,不超过 140 字(可选) 刚刚发布的Phi-3系列小模型技术报告,引起AI圈热议。 添加图片注释,不超过 140 字&#x…

【数据结构】三、栈和队列:1.栈的基础(从数据结构三要素讨论:逻辑结构、物理结构(存储结构)、数据运算(基本操作))

文章目录 栈Stack逻辑结构物理(存储)结构基本操作常考题型 栈Stack 逻辑结构 栈(Stack)是只允许在一端进行插入或删除操作的线性表。 重要术语:栈顶(现在能放入的一段),栈底&…

光接入网络的超宽带半导体光放大器

添加图片注释,不超过 140 字(可选) 新颖的双有源层结构获得宽增益光谱,应用于多波单纤双向光放大 ----翻译Xiao Sun等人2016年撰写的文章,文中给出了宽光谱SOA的一种新颖的结构设计方法和仿真结果,但并未给…

JavaVue 借助json传递数据

由前端向后端发送一个json键值对 <template><div><button click"sendRequest">发送请求</button></div> </template><script setup> import axios from axios;const sendRequest () > {const jsonData {key1: value…

mysql面试题五(锁)

目录 1.mysql有哪些锁及作用 1. 行锁&#xff08;Row Locks&#xff09; 2. 间隙锁&#xff08;Gap Locks&#xff09; 3. Next-Key Locks 4. 意向锁&#xff08;Intention Locks&#xff09; 5. 表锁&#xff08;Table Locks&#xff09; 6. 元数据锁&#xff08;Metad…

蓝海彤翔作为协办单位参加2024陵水全球招商大会

4月16日&#xff0c;2024 陵水全球招商大会在海口第四届中国国际海南消费品博览会期间举办。蓝海彤翔作为本次大会的协办单位&#xff0c;将海南蓝陵数字科技有限公司与海南陵水国际数字内容产业平台落户陵水&#xff0c;标志着蓝海彤翔在数字内容产业领域迈出了坚实的一步&…

上位机图像处理和嵌入式模块部署(树莓派4b与视觉slam十四讲)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 实际使用中&#xff0c;树莓派4b是非常好的一个基础平台。本身板子价格也不是很贵&#xff0c;建议大家多多使用。之前关于vslam&#xff0c;也就是…

Docker基本操作学习

基本指令 docker服务启动&#xff1a; service docker start service docker restart service docker stop# 重启服务器自动运行docker systemctl enable docker镜像生成方式&#xff1a; 通过docker build DockerFile… 生成镜像 镜像相关指令&#xff1a; docker push 仓…

【Python】MongoDB中的批量写入案例,避免单条插入失败导致整体失败

当看尽潮起潮落 只要你记得我 你曾说过 会永远爱我 也许承诺 不过证明没把握 不用难过 不用掩饰什么 当结果是那么赤裸裸 其实不必说什么 才能离开我 起码那些经过属于我 &#x1f3b5; 莫文蔚《盛夏的果实》 MongoDB是一个功能强大的NoSQL数据库&#xf…

【黑马点评Redis——003优惠券秒杀4——消息队列Stream】

1. 目前还存在的问题 设置的阻塞队列可能会超出最大长度系统重启会导致阻塞队列中的信息消失&#xff0c;可能会出现问题 2. 消息队列 消息队列 (Message Queue)。 字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色消息队列:存储和管理消息&#xff0c;也被称为…

甲醛传感器ETO-A1在建筑装修过程中甲醛监测的重要作用

随着建筑装修行业的快速发展&#xff0c;甲醛污染问题逐渐受到人们的关注。甲醛是一种常见的室内空气污染物&#xff0c;主要来源于建筑装修过程中使用的各种材料。为了保障人们的健康和安全&#xff0c;甲醛传感器在装修过程中的监测作用显得尤为重要。英国Alphasense公司推出…

vue3 -- 基于maptalks和threejs实现3D地图板块效果

文章目录 🍉开发环境🍉实现效果🍉准备地图json文件🍉文件结构🍉代码🍉side_mode (纹理图片)🍉开发环境 vue“3.3.4”maptalks“1.0.0-rc.23”maptalks.three“^0.38.3”three“~0.143.0”maptalks/gl-layers“^0.34.1”node“v16.20.0”pnpm“8.6.2”🍉实现效

矽塔SA6288Q栅极驱动器,可替代峰绍FD6288Q

SA6288 是一款集成了三个独立半桥栅极驱动器&#xff0c;特别适合于三相电机应用中高速功率MOSFET 和 IGBT 的栅极驱动。可在高达250V 电压下工作。 SA6288内置 VCC 和 VBS 欠压&#xff08; UVLO &#xff09;保护功能&#xff0c;防止功率管在过低的电压下工作&#xff0c;…

记一次 Java 应用内存泄漏的定位过程

问题现象 最近&#xff0c;笔者负责测试的某个算法模块机器出现大量报警&#xff0c;报警表现为机器CPU持续高占用。该算法模块是一个优化算法&#xff0c;本身就是CPU密集型应用&#xff0c;一开始怀疑可能是算法在正常运算&#xff0c;但很快这种猜测就被推翻&#xff1a;同…

vue 的 diff 算法

vue的diff算法&#xff0c;是其虚拟DOM实现中的核心部分&#xff0c;用于高效地比较新旧虚拟节点&#xff0c;并据此更新实际的DOM&#xff0c; vue的diff算法&#xff0c;基于以下策略来优化性能&#xff1a; 1、同层比较&#xff1a; Vue 的 diff 不会跨层级比较节点&…

springboot基于点餐码 二维码在线点餐系统vue.js+java

Maven: 项目管理和构建自动化工具&#xff0c;用于java项目。 java: 广泛使用的编程语言&#xff0c;适用于构建跨平台应用。 Springmvc:从而在使用Spring进行WEB开发时&#xff0c;可以选择使用Spring的Spring MVC框架。 MyBatis: java持久层框架&#xff0c;支持定制化SQL、存…

DirectX12(D3D12)基础教程(二十三) ——DirectShaderCompiler 头文件接口 ID3DInclude 的应用

目录 1、前言2、ID3DInclude 回调接口介绍3、基本使用方法4、示例代码中的实现 1、前言 本章教程较短小&#xff0c;但内容十分重要&#xff0c;是后续更灵活使用 Shader 编程的重要基础之一。也就是对 Shader 代码进行头文件分离复用设计进行全面支持。或者直白的说&#xff0…

第68天:APP攻防-XposedFridaHook证书校验反代理代理转发

目录 思维导图 案例一&#xff1a;某牛防抓包-xposed&frida&r0capture 如何检测是否启动了反代理 xp框架 方案二&#xff1a;某社交防抓包-Proxifier&frida&r0capture 思维导图 案例一&#xff1a;某牛防抓包-xposed&frida&r0capture 这里某牛软…

C语言-结构体基本概念

在C语言中&#xff0c;结构体提供了一种将多种不同数据类型组装起来形成自定义变量类型的方式&#xff0c;使得我们可以更好地表示现实生活中的复杂对象。比如&#xff0c;一个学生可以有学号&#xff08;整型&#xff09;、姓名&#xff08;字符串&#xff09;、分数&#xff…