亚信安慧AntDB数据库采集技术创新:ACC从Java到Go的转型之路

传统的指标采集方法通常使用一些命令行工具,如top、free等来获取系统的性能数据。然而,这种方法存在一些缺点。首先,这些命令行工具输出的数据格式通常是文本形式,需要进行解析和处理才能得到有用的信息,这增加了开发者的工作量。其次,由于这些工具是外部进程,性能开销较大,采集数据的频率受到限制,无法实时获取数据。

采用现代化的语言来实现指标采集则具有更高的效率和可靠性。Java作为一个广泛应用的开发语言,也被用于采集系统性能数据。然而,Java程序对环境有依赖,需要安装和配置JDK环境,这增加了部署的复杂性。此外,Java项目通常比较庞大且依赖较多,占用较多的项目资源和存储空间。另外,由于Java项目的性能开销较大,对主机的负担也较重,可能会影响AntDB数据库的稳定性和性能。

相比之下,使用Go语言实现的数据采集具有以下优势。首先,Go程序不需要额外的依赖和环境配置,可以直接编译为二进制文件,简化了部署的复杂性。其次,Go语言的项目通常比较小巧,静态链接可以减少对外部库的依赖,减少了项目的资源占用和存储空间需求。另外,Go语言的运行时开销较低,性能较高,对主机的负担较小,不会明显影响AntDB数据库的稳定性和性能。通过使用Go语言实现的数据采集,可以提供高效、轻量级和可靠的解决方案,既满足了性能需求,又减少了对系统资源的消耗。

部署方式

部署Agent方式如图所示,每个集群针对每台主机部署一个独属于自己的Agent采集程序。

图片

图1:Agent部署方式

1:由于Go语言的特性,编译器将所有依赖的库和运行时组件静态链接到可执行文件中,这意味着在不同的操作系统上运行Go程序时不需要安装额外的运行时环境,不再依赖于JVM,减少了额外的资源消耗。

2:基于项目结构的优化,Go项目打包的可执行文件占用的存储空间更少,进一步减少了资源消耗。

Go项目的磁盘占用:

图片

图2:Go项目磁盘占用

Java项目的磁盘占用:

图片

图3:Java项目磁盘占用

性能开销

传统的指标采集方法是使用一些命令行工具如top、free等来获取系统的性能数据,此种方式为外部程序,需要主机安装对应命令行程序,并且主机响应较慢。Go语言直接使用内置库进行数据获取,直接与系统进行硬件交互,极大的提升了响应速度。

以下为获取内存的总内存、已用内存、空闲内存、内存利用率指标的两种方式以及花费的总时间。其中使用Go语言内存库进行指标数据采集花费时间为:363微秒,而使用命令行采集花费时间为:28毫秒。两者的时间花费差距相差77倍。

图片

图4:Go语言内置库实现

图片

图5:命令行方式采集

图片

图6:性能开销比较

实现细节

1.内置库实现

内置库包含的指标中,直接通过系统方法调用获取数据进行存储即可。此处以CPU核数、使用率、空闲率举例。

图片

图7:内置库实现采集

2.内置库无法直接获取的指标

针对某些无法直接通过三方库获取的指标数据,需要内部采用高效率的方式实现。例如,获取CPU_LOAD指标,则为代码实现读取文件 /proc/loadavg ,并转为64位float获取。

图片

图8:特定值具体实现

3.速率指标

某些速率指标,采用命令行方式获取,命令行内部已完成速率计算。例如磁盘读写速率,网卡上传、下载速率等,已经由iostat、sar等命令完成,直接使用即可。

此处使用磁盘读写速率举例,iostat -xd 命令中,第六、七、十一、十二列分别记录了磁盘读速率、写速率、读延迟、写延迟的信息,无需二次计算获取。

图片

图9:速率值命令实现

结论

综上所述,将AntDB控制中心数据采集项目从Java改写为Go实现带来了许多优势,包括减少了额外的资源消耗、提高了响应速度、降低了存储空间占用等。通过合理利用Go语言的特性和内置库,我们可以实现更高效、更灵活的数据采集,为系统监控和分析提供更可靠和准确的指标数据。这将对提升系统性能、优化资源利用和预测未来需求等方面产生积极的影响。

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

计算机网络-BGP概述

一、概述 到目前为止我们已经学习了静态路由、OSPF、RIP、IS-IS了,前面我们也了解到按照区域或者范围来分,路由协议可以划分为:IGP内部网关协议、EGP外部网关协议,而我们前面学习的动态路由都属于IGP的范畴. IGP是用于单一自治系统…

科技赋能,拓宽生活边界

在当今多元化与快速变化的社会中,社会适应能力成为了衡量个人能否顺利融入社会、享受生活品质的关键指标。对于盲人朋友而言,这一能力尤为重要,它不仅关乎日常生活的便利,更影响到心理的健康与社会参与度。在此背景下,…

el-upload上传图片,视频可获取视频时长。

对element-ui组件的upload组件再一次封装&#xff0c;简单记录。下面是效果图。 注意点&#xff1a;该组件现在仅支持单图和单个视频上传。 <template><div :style"myStyle"><divclass"uploads":style"{width: upWith px,height: up…

代码随想录算法训练营第36期DAY36

贪心好难&#xff0c;希望能坚持到柳暗花明那天。 DAY36 1005K次取反后最大化的数组和 自己的方法&#xff0c;注意越界条件放在最前面就好&#xff1a; class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { //自己的…

vue中数据已经改变了,但是table里面内容没更新渲染!

解决方案&#xff1a; 给table或者el-table标签上添加一个动态key值&#xff0c;只要数据发生改变&#xff0c;key值变动一下即可 标签上&#xff1a; :key“timeStamp” 初始data&#xff1a;timeStamp:0, 更新数据&#xff1a;this.timeStamp 这样每次更新数据&#xff…

ChannelHandler和ChannelPipeline之一

目录 ChannelHandler Channel的生命周期 ChannelHandler的生命周期 ChannelInboundHandler接口 ChannelOutboundHandler接口 ChannelHandler适配器 资源管理 ChannelPipeline接口 修改ChannelPipeline 触发事件 ChannelHandler Channel的生命周期 Channel定义了一组和…

整理前期PS问题

前面问题汇总 一、字体显示 字体不显示主要有三个原因&#xff0c;其实在这里面我已经打了“国风”两字&#xff0c; 字体太大&#xff0c;输入框小 只需要把输入框拉大/改变字体 经过字体修改还没有&#xff0c;那就是字体颜色和背景一致 二、字体横竖排变换 将文字打好…

java中的Map集合

一、Map集合概述 1、Map集合以键值对的形式存储元素&#xff0c;是将键映射到值的对象 2、要求&#xff1a; &#xff08;1&#xff09;一个键最多映射一个值 &#xff08;2&#xff09;键不能重复&#xff0c;值可以重复 二、HashMap类 1、是Map接口的实现类 2、特点&a…

Webpack源码泄露到Vue快速入门

前言 1.webpack 源码泄露 1.1漏洞简介 1.2存在泄露的站点 1.3 如何判断是否存在漏洞 方法1: 方法2: 1.4.如何将js.map文件还原为项目文件 1. 4.1查看npm版本 1.4.2 安装reverse-sourcemap 1. 4.3.检查是否安装 ​1. 4.4 使用reverse-sourcemap进行js.map文件还原操作…

深入解读HTTP状态码:分类、含义、应用场景与故障排查指南

HTTP状态码作为超文本传输协议(HTTP)响应的重要组成部分,为客户端与服务器之间的交互提供了清晰的状态反馈。本文将全面展开对HTTP状态码的深入解读,涵盖其分类、具体含义、典型应用场景以及在故障排查中的实用价值,旨在帮助开发者与运维人员更好地理解和应对各类HTTP响应…

Postman使用技巧

Postman是一款广泛使用的API开发和测试工具&#xff0c;专为简化Web服务API的开发、测试、文档编制和协作过程而设计。它支持各种HTTP请求方法&#xff0c;包括GET、POST、PUT、DELETE等&#xff0c;允许用户轻松地构建和发送请求&#xff0c;以及检查响应。 本文介绍几个提升效…

第4章 网络层

4.1网络层的功能 1.异网互联:使用路由器连接数据链路层和物理层均不同的网络。【路由器连接的设备物理层&#xff0c;数据链路层和网络层可以不同】 2.转发:从一个端口输入保存后选择另一个端口转发【微观】 3.路由选择:选择合适的路由线路【宏观】 4.SDN的基本概念: 数据平…

目前流行的前端框架有哪些?

目前流行的前端框架有很多&#xff0c;它们可以帮助开发者快速构建高质量的前端应用程序。本文将介绍一些目前比较受欢迎的前端框架&#xff0c;并分析它们的优缺点。 React React 是一个由 Facebook 开发的开源前端JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其…

Ollama本地运行 Mistral-7B-Instruct-v0.3

Ollama本地运行 Mistral-7B-Instruct-v0.3 0. 引言1. 运行 mistral:7b-instruct-v0.3-q8_02. 简单问个问题 0. 引言 Mixtral 5月23日发布了 Mistral-7B-Instruct-v0.3&#xff0c;支持 function calling&#xff0c;今天简单运行一下。 1. 运行 mistral:7b-instruct-v0.3-q8_…

【AI如何帮你编写测试用例并输出表格格式】

1、工具&#xff1a;顺便使用一款生成式AI即可&#xff0c;此处用的是ChatGPT&#xff0c;Kimi这两个工具试验。 2、首先要拿到需求文档&#xff0c;根据需求文档向AI发出如下指令&#xff08;Prompt&#xff09; “请根据下面这段需求&#xff0c;编写测试用例&#xff1a; …

python从0开始学习(十二)

目录 前言 1、字符串的常用操作 2、字符串的格式化 2.1 格式化字符串的详细格式&#xff08;针对format形式&#xff09; ​编辑 总结 前言 上一篇文章我们讲解了两道关于组合数据类型的题目&#xff0c;本篇文章我们将学习新的章节&#xff0c;学习字符串及正则表达式。 …

【Linux】centos7下载安装Python3.10,下载安装openssl1.1.1

目录 centos7下载安装Python&#xff08;版本3.10.14&#xff09; &#xff08;1&#xff09;网页下载python压缩包&#xff0c;并解压缩 &#xff08;2&#xff09;编译安装 Python在make altinstall时&#xff0c;报错及解决 &#xff08;3&#xff09;将安装目录和可执…

EM算法求解高斯混合模型参数公式推导

高斯混合模型介绍 高斯混合模型&#xff08;Gaussian Mixture Model&#xff0c;简称GMM&#xff09;是一种经典的概率模型&#xff0c;被广泛应用于数据挖掘、模式识别和机器学习等领域。它采用多个高斯分布组合来对数据进行建模&#xff0c;每个高斯分布对应于数据中的一个子…

ROCm上运行情感分析:使用卷积神经网络

15.3. 情感分析&#xff1a;使用卷积神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2lbatch_size 64 train_iter, test_iter, vocab d2l.load_data_imdb(batch_size)def corr1d(X, K):w K.s…