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

news2024/9/19 20:13:30

传统的指标采集方法通常使用一些命令行工具,如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.coloradmin.cn/o/1686139.html

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

相关文章

【深度学习】加速采样生成图像——DDIM原理解析

文章目录 1、前言2、DDPM回顾及为何不能跳步采样2.1、回顾2.2、从DDPM的目标函数视角上看,为什么无法跳步采样?2.3、DDPM的困境 3、DDIM3.1、马尔可夫假设3.2、跳步采样构造3.3、DDIM的目标函数3.4、求解目标函数3.4.1、设定逆扩散过程3.4.2、求解KL散度…

企业级内网穿透(神卓互联)

神卓互联内网穿透采用自主研发的 WanGooe Tunnel 第九代核心引擎,拥有高级别用户访问权限验证,无授权将无法访问项目,地域限制,可灵活设置仅限某个地区可以访问 项目,保障数据传输安全采用,端到端加密&…

【cocos creator】进度条控制脚本,支持节点进度条,图片进度条,进度条组件,和进度文字展示

进度条控制脚本,支持节点进度条,图片进度条,进度条组件,和进度文字展示 const { ccclass, property, menu } cc._decorator;let text_type cc.Enum({"20%": 0,"1/5": 1,"差值": 2,"自定义…

Windows:iHasher-v0.2安装报错Windows 功能 .NET Framework 3.5

一、情景描述 我们从MSDN下载了镜像文件,一般要验证下载文件的HASH值是否与MSDN上发布的一致,确保传出过程中iso文件没有损坏。 MSDN地址:https://msdn.itellyou.cn/ 我从MSDN下载了Hasher工具,进行校验。 但是,安装…

js 面试题学习笔记一

1、什么是防抖和节流?有什么区别?如何实现? 防抖:触发高频事件后N秒内函数只会执行一次,如果N秒高频事件再次被触发,则重新计算时间。(a时间触发,5秒内执行一次,但是第4…

【代码随想录】【算法训练营】【第16天】 [104]二叉树的最大深度 [111]二叉树的最小深度 [222]完全二叉树的节点个数

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 16,周四,再坚持一下吧~ 题目详情 [104] 二叉树的最大深度 题目描述 104 二叉树的最大深度 解题思路 前提:二叉树的最大深度,等价于二叉树的层…

C#读取.sql文件并执行文件中的sql脚本

有些时候我们需要在程序中编写读取sql脚本文件并执行这些sql语句,但是我们在有些时候会遇到读出来的sql语句不能执行,其实不能执行并不是你的sql脚本文件有错误,而是去执行sql语句的时候,C#代码里面执行sql语句的代码对sql里面的一…

新书推荐:6.2 else if语句

本节必须掌握的知识点: 示例代码二十 代码分析 汇编解析 ■if语句表达形式3 if(表达式1) statement1 else if(表达式2) statement2 else if(表达式3) statement3 …… else statementN 解析: 如果表达式1非0,则执行statement1&#…

基于Netty实现WebSocket服务端

本文基于Netty实现WebSocket服务端,实现和客户端的交互通信,客户端基于JavaScript实现。 在【WebSocket简介-CSDN博客】中,我们知道WebSocket是基于Http协议的升级,而Netty提供了Http和WebSocket Frame的编解码器和Handler&#…

9.3 Go语言入门(变量声明和函数调用)

Go语言入门(变量声明和函数调用) 目录二、变量声明和函数调用1. 变量声明1.1 使用 var 关键字声明1.2 简短声明1.3 零值1.4 常量 2. 函数调用2.1 函数定义2.2 多个返回值2.3 命名返回值2.4 可变参数2.5 匿名函数和闭包 目录 Go 语言(Golang&a…

Windows11下使用Qt5.14.2编译QtXlsx驱动详细步骤

原有&#xff1a;由于系统需要将QTableWidget表格中的数据导出、在Windows下最开始使用Excel.Application组件实现了导出功能&#xff0c;后面将代码转换到Ubuntu20.04下进行编译&#xff0c;发现项目.pro文件中的QT axcontainer和代码.h文件中的#include <QAxObject>跟…

接口自动化基础

1、接口自动化测试 接口自动化&#xff1a;使用工具或代码代替人对接口进行测试的技术。 测试目的&#xff1a;防止开发修改代码时引入新的问题。 l测试时机&#xff1a; 开发进行系统测试转测前&#xff0c;可以先进行接口自动化脚本的编写。 开发进行系统测试转测后&…

dubbo复习:(4) 和springboot 整合时,客户端负载均衡的配置

需要在DubboReference注解指定loadbalance属性。示例如下&#xff1a; package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Ser…

【全开源】活动报名表单系统(ThinkPHP+Uniapp+uView)

轻松构建高效报名平台 一、引言 随着线上活动的日益增多&#xff0c;一个高效、易用的活动报名表单系统成为了举办各类活动的必备工具。为了满足不同组织和个人的需求&#xff0c;我们推出了功能强大的“活动报名表单系统源码”。本文将为您详细介绍该源码的特点、功能以及使…

燃数科技前端25-40K*14薪一面超简单,下周二面啦

一面 1、自我介绍 2、低代码如何设计的 3、react路由原理 4、react生命周期 5、什么是回调地狱&#xff0c;如何解决 6、jwt和session有什么区别 7、js文件相互引用有什么问题&#xff1f;如何解决 8、一个很大的json文件&#xff0c;前端读取如何优化 面试我的不像是…

实战之快速完成 ChatGLM3-6B 在 GPU-8G的 INT4 量化和本地部署

ChatGLM3 (ChatGLM3-6B) 项目地址 https://github.com/THUDM/ChatGLM3大模型是很吃CPU和显卡的&#xff0c;所以&#xff0c;要不有一个好的CPU&#xff0c;要不有一块好的显卡&#xff0c;显卡尽量13G&#xff0c;内存基本要32GB。 清华大模型分为三种(ChatGLM3-6B-Base&…

部署运行petalinux系统镜像

参考文档《编译 petalinux 系统镜像》编译获取 petalinux 系统镜像&#xff0c;编译生成的各种镜像文件如下&#xff1a; scilogyhunterubuntu1804:~/petalinux/workspace/project0/petalinux$ ls images/linux/ bl31.bin Image pxelinux.cfg rootfs.cpio.gz.u-boot …

【实战JVM】-01-JVM通识-字节码详解-类的声明周期-加载器

【实战JVM】-01-JVM通识-字节码详解-类的声明周期-加载器 1 初识JVM1.1 什么是JVM1.2 JVM的功能1.2.1 即时编译 1.3 常见JVM 2 字节码文件详解2.1 Java虚拟机的组成2.2 字节码文件的组成2.2.1 正确打开字节码文件2.2.2 字节码组成2.2.3 基础信息2.2.3.1 魔数2.2.3.1 主副版本号…

Java 数组的基本使用

目录 含义语法格式语句特点数组的长度数组的元素打印数组显示数组数组的复制扩展示例【12】&#xff1a; 含义 数组&#xff08;array&#xff09;是一种最简单的复合数据类型&#xff0c;它是有序数据的集合&#xff0c;数组中的每个元素具有相同的数据类型&#xff0c;可以用…

一款好用的SSH连接工具-Tabby Terminal 使用教程

简介 Tabby Terminal 是一款现代化的终端应用程序&#xff0c;旨在提供流畅、高效且可定制的用户体验。它具有跨平台兼容性&#xff0c;支持多种操作系统&#xff0c;包括 Windows、macOS 和 Linux。其界面设计简洁美观&#xff0c;允许用户通过插件和主题进行个性化定制。同时…