GaussDB技术解读——GaussDB架构介绍(三)

目录

9  智能关键技术方案

智能关键技术一:自治运维系统

智能关键技术二:库内AI引擎

智能关键技术三:智能优化器

10  驱动接口关键技术方案


GaussDB架构介绍(二)从数据持久化存取层(DataNode)关键技术方案、全局事务管理层(GTM)关键技术方案、集群管理层(CM)关键技术方案、OM运维管理关键技术方案等方面介绍了GaussDB架构,本篇将从智能关键技术方案、驱动接口关键技术方案继续解读GaussDB架构。

9  智能关键技术方案

智能关键技术一:自治运维系统

GaussDB 自治运维系统“DBMind”的整体系统框图如下图所示,包含四个维度:

数据采集层

数据采集层主要功能实现指标数据采集,采集频率分为秒级采集和分钟级采集。其中秒级采集包括操作系统资源信息采集和数据库实例信息采集,例如操作系统层面CPU、内存、IO读写、网络资源信息采集,数据库实例状态、数据库内关键指标(内存、连接数、TPS、QPS、读写频率等);分钟级采集包括审计日志采集、数据库日志采集和全量SQL流水采集。

DBMind数据平台提供Agent进程用于采集上述指标;若客户系统配置普罗米修斯进行信息采集,DBMind提供openGauss-exporter,内置数据库多维度指标采集以及二次数据计算,实现与用户既有普罗米修斯平台对接。

数据库采集端程序需要部署在同数据库物理机节点,数据库多节点集群环境中,每个物理节点部署一个Agent采集端(或者普罗米修斯采集端)。数据库采集端程序通常占用资源很少,通过配置文件可以制定不同指标采集频率,以免占用资源影响数据库业务正常运行。

图1 DBMind整体系统框架图

  • 数据计算层

数据计算层提供数据存储、数据分析及元数据管理能力。其中数据存储用于接收来自数据采集层发生来的数据,存储数据源可以是多种维度或者类型,包括普罗米修斯、时序数据库(OpenTSDB)、MongoDB、SQLite等,DBMind内置对接接口,AI模块与存储数据源的交互,获取数据并进行处理。DBMind默认提供SQLite数据库,方便普通开发者来使用AI自治功能;在企业业务中,存储层设计要复杂的多,可以使用多个开源组件组合使用,例如普罗米修斯+时序数据库,或者kafka+时序数据库等多种方案。

若企业业务中,处理少量业务集群节点,可通过下面方案实现:

图2 小规模节点管控层方案

在图2方案,使用nginx进行业务分流,mgrsrv服务对数据进行初步处理后,将数据写入关系型数据库。基于可靠性考虑,对于三个组件,分别加入备机进行可靠性保护。

若企业业务处理上万业务节点的数据,图2方案无法满足客户业务诉求。故在方案设计时,需要引入分布式消息中间件、数据库中间件(DDM),同时因为nginx挂载节点有上限,需要对mgrsvr进行分区管理。

图3 大规模节点管控层方案

如图3所示,consumer服务可以和mgrsvr部署在同一个节点上,mq集合代表分布式消息中间件,通常可以采用开源软件rocketmq或者rabbitmq,引入消息中间件目的是降低目标数据库的压力。DDM是华为云的数据库中间件,若采用开源软件,也可使用mycat或者dble等,可进行存储大规模被采集的数据。在整体业务角度,纵向通过分层设计,横向通过分区设计,保证全部业务可通过管控层完成数据处理。

在数据计算层除了时序存储数据库外,还可以设计其他存储单元,例如算法模型库和故障规则库。其中算法模型库存储自治管理服务生成的AI模型,例如参数推荐训练模型;在算法模型库中,可以存储传统机器学习(例如监督学习)模型、强化学习模型。故障规则库是记录数据库常见故障案例,将这些案例通过拆解和分析,生成规则引擎。

自治服务层

自治服务层包含三个主要部分:SQL诊断和调优、自治安全、数据库智能运维。其中SQL诊断和调优提供多种SQL治理和调优能力,包括慢SQL发现、SQL表现评估、智能索引推荐、智能查询重写等服务。自治安全通过AI技术实现敏感信息发觉、SQL注入检测和异常行为分析。数据库智能运维功能实现在数据库系统、OS系统和数据库集群层面的运维和调优,其中数据库系统服务包括数据库参数智能推荐、智能巡检、数据库分布键推荐和智能业务调度;在操作系统层面,实现慢盘检测和恢复、网络丢包检测;在数据库集群层面,基于故障或者负载需求,提供自动扩缩容、异常节点修复服务。

监控展示层

DBMind提供监控展示层,通过WEB形式,方便用户直观感受运维管理带来的遍历。在展示界面方面,集成Grafana实现实施数据或指标的展示,同时AI趋势预测,给出后续时段的数据走向。告警界面展示系统中可能存在的问题或故障,分为致命、严重、一般,界面中只显示致命问题。

为方便用户系统观察集群状态,提供健康指数报告和详细综合报告。健康指数报告给出当前系统的健康评分等级,默认80分以上属于运行健康状况,小于60分则存在严重隐患,急需修复。综合报告详细描述系统各维度信息,包括集群状态、负载运行情况、常见数据库指标项信息。

智能关键技术二:库内AI引擎

GaussDB 库内AI引擎架构如下图:

图4 DB4AI架构图

用户接口层

在用户接口层,实现SQL-like语法,提供Create Model、Predict等关键字,支持AI算法训练和预测。当前支持的AI算法包括:GD(梯度下降法)、KMeans(聚类)、XGBoost、决策树等。

查询优化层

查询优化层提供AI训练执行计划和AI预测执行计划,该计划依据内部统计信息和AI算子调用关系,生成相应执行计划。可以把AI算子看做执行器中的计算单元,例如Join、AGG等,AI算子执行代价基于执行逻辑、获取的数据行数、算法复杂度共同决定。同时在执行计划生成后,可通过Explain语句查看详细的执行开销,分析路径选型的正确性。

AI底座和执行层

在AI底座中,提供超参优化能力,即用户不指定超参数或者指定超参数的范围,自动选择适合的参数,该功能极大提升用户使用的效率,同时达到最佳的训练性能。

在执行器中,提供多种AI算子,例如GD算子可支持逻辑回归、分类;KMeans算子支持聚类。在每个算子实现过程中,遵循执行器算子实现逻辑,下层对接Scan算子,上次提供AI算子的训练或推理结果。在训练完成后,训练模型将实时保存到系统表中,用户可以查询gs_model_warehouse系统表来获取模型信息。

存储层

在存储层,DB4AI提供数据集管理功能,即用户可以抽取某个表或多个表中的列信息,组成一个数据集,用于后续模型训练。数据集管理功能类似git模式提供多版本管理,目的是保障训练数据的一致性。同时在这过程中,可通过特征处理和数据清洗保障数据的可用性。

同时对已生成的模型进行管理,包括模型评估、定期模型验证、模型导入、模型导出等能力,在验证模型失效后,模型漂移功能可以进行模型刷新,保障模型可用。

异构计算层

DB4AI框架支持异构计算层,实现CPU和AI算力的统一调度,满足数据库语句执行和AI训练的完美结合。在实现方面,CPU算力,特指ARM及X86芯片,可用于基础机器学习算子调用及并行计算执行;AI算子,例如昇腾及GPU芯片,可用于重度分析算子(Join、AGG)及深度学习算子使用,加速大数据及多层网络场景下计算需求。

智能关键技术三:智能优化器

贝叶斯网络模型原理

贝叶斯网络是一种概率图模型,拓扑结构通常为一个有向无环图。贝叶斯网络的优势在于能够利用条件独立假设对多变量数据进行建模,并且自适应变量之间的相关性,具体是指每个变量的概率分布只和与它直接连接的父亲节点有关。使用这种方法能够比基于简单的独立性假设的模型获得更高的建模准确率,也能够比完整的联合分布建模获得更高的执行效率。在关系数据表中,每一列数据都可以成为一个变量,比如下表中包含A,B,C三列数据:

表1

A

B

C

A1

B1

C1

A1

B1

C1

A1

B1

C1

A2

B1

C1

A2

B2

C2

A2

B2

C2

分别使用基于独立性假设的单列建模和基于条件独立假设的贝叶斯网络计算查询 SELECT * FROM table WHERE A=A1 AND B=B1 AND C=C1的选择率:

单列建模:P(A=A1, B=B1, C=C1)=P(A1)P(B1)P(C1)=0.5 * 0.67 * 0.67=0.22

贝叶斯网络:P(A=A1, B=B1, C=C1)= P(A1)P(B1|A1)P(C1|B1)=0.5*1.0*1.0=0.5

可以看出贝叶斯网络在列相关性强的场景下能够更加准确地估计出多列查询选择率(和基数)。

贝叶斯网络结构搜索

贝叶斯网络的拓扑结构决定于变量之间的互相关性,直观上看,将互相关性强的变量进行连接并计算条件概率有助于提高分布建模准确性。假设有两列数据A和B,互相关性定义如下:

针对例1中的数据,可以计算出A和B列的互相关性:

在本功能中,对于P(a,b),P(a)和P(b)的计算通过使用哈希表统计获得,首先计算单列统计频率,然后计算两列统计频率,最后扫描两列统计表并且通过访问单列统计表获得单列频率,使用公式计算出相关性。最后计算总体相关性。

得到的临时表ab_mutual_correlation结构如下所示:

表2

counta

countb

countab

3

4

3

3

4

1

3

2

2

遍历上述临时表,对每一行求得互相关性,然后求和之后就是A和B列的整体相关性。

贝叶斯网络对于每个节点父亲节点的数量是没有要求的,但是父亲节点越多,条件概率建模的难度也越大,消耗的空间和时间代价也会相应变大。所以在本子系统中,我们只采用树型的网络拓扑结构。这种结构中每个节点只有一个父亲节点,所以只需要保存本节点可以另一个父亲节点的条件概率即可,示例如下:

图5

在有了树型限制之后,结构搜索空间就少了很多,现在的目标就是找到一颗总互相关性最大的生成树,这里本系统采用chow-liu算法,也是一种加权最大生成树算法,算法流程如下:

图6 贝叶斯网络结构搜索流程图

根据搜索出的贝叶斯网络结构,构造出包含所有边的字符串,比如”a,b,a,c”或者”a,b,b,c”传入贝叶斯网络算子进行模型创建。

贝叶斯网络训练

图7 贝叶斯网络训练流程图

贝叶斯网络训练过程中,算子首先会遍历一遍样本数据,获得每列数据不同值统计;然后对于每列数据,根据是否是连续数据类型进行数据分桶或者高频值抽取以减小存储和计算代价;对数据分桶采用等高分桶,尽量使每个桶内的频度是相似的,每个桶中范围值下界被存储在数据列表中,NULL值单独作为一个值放在列表最后;连续值高频值抽取会将频度最高的K各元素放置在数据列表中,除此之外的其他元素都被表示为一个通配符号放在列表最后;为了减少查找匹配代价,字符串类型数据会存储一个额外的哈希值;列表中每个元素表示结构如下所示:

typedef struct ValueInTuple {    Datum data;    Oid type;    bool isnull;    uint32_t hashval;} ValueInTuple;

概率建模过程中,针对形如P(离散值|离散值)的条件概率使用概率表记录每种值的概率;针对P(离散值|连续值),将连续值通过范围分桶当做离散值处理;针对P(连续值|离散值),使用高斯分布对连续值分布进行建模;针对P(连续值|连续值),使用高斯分布对条件连续值进行离散化分桶处理,对目标连续值进行高斯分布建模。

训练完成之后,将模型序列化成一个二进制字符串。

贝叶斯网络模型推理

图8 贝叶斯网络推理流程图

贝叶斯网络从第一个位置开始获得一个未访问节点,如果该节点存在未访问父亲节点,那么就递归访问父亲节点;如果父亲节点都已经被访问,那么利用条件独立性假设,利用概率表或者是高斯函数局部计算出当前节点的条件概率并且和父亲节点的概率相乘作为联合概率。然后判断当前节点是否是叶子节点,如果是叶子节点则将联合概率和选择率相乘,否则继续寻找下一个未被访问过的节点。最后返回选择率。

模型参数缓存策略

在基数估计的时候需要获得相应的模型参数,这个过程需要从磁盘读取以及反序列化两种操作,涉及到磁盘访问以及内存申请操作,效率较低,所以在模型数量不多的情况下可以利用全局共享缓存将其存在内存中,下次访问效率就会变高,但是在模型数量变多之后就需要缓存替换策略以保证内存使用是可控的。本子系统采用的是异步批量替换策略,在模型访问亲和性高的场景下,当前一段时间所需要的模型都放置在内存中,不会带来额外的性能损失,访问申请的也都是共享锁支持高并发;当负载偏移之后,新的模型会被访问,从磁盘中被加载到内存,内存中的数量就会超过阈值,这种情况下系统按照每个模型的最近访问时间归一化之后的概率选择1/3的旧模型替换出内存。这种一次性替换多个模型的方法可以避免每次读操作都要申请互斥锁维护链表并且降低替换操作触发的次数。并发analyze场景通过互斥锁进行共享缓存访问控制。

10  驱动接口关键技术方案

接口驱动兼容开源openGauss, 支持JDBC、ODBC、Python、GO等主流数据库驱动接口,适用于Java/C/C++/python/go 应用程序开发者。对于高级开发者而言,亦可采用libpq动态库接口的方式,对数据库进行接入访问。

以上内容为智能关键技术方案、驱动接口关键技术方案的相关内容,下篇图文将接着分享GaussDB云原生架构、关键技术方案的精彩内容,敬请期待!

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

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

相关文章

Druid未授权访问漏洞修复

前言 安全组针对系统漏扫发现系统存在Druid未授权访问,会引发泄露系统敏感信息,漏洞链接为ip:端口/druid/index.html,可以清楚的查看数据库的相关连接信息,如下图所示: 漏洞修复 1、关闭Druid监控页面 在Druid的配…

右值引用和移动语义

什么是左值?什么是右值? 通俗来讲,可以出现在赋值语句左侧的,为左值;只能出现在赋值语句右侧的,为右值。 左值与右值的本质区别在于:左值能取地址,但右值不能。 本文主要通过三个场景…

使用星鸾云GPU云服务器搭配Jupyter Lab,创建个人AI大模型

最近我们公司IT部门宣布了一个大事情,他们开发了一款内部用的大模型,叫作一号AI员工(其实就是一个聊天机器人),这个一号员工可以回答所有关于公司财务、人事、制度、产品方面的问题。 我问了句:公司加班有…

GMT6绘制北半球

设置绘制区域及投影方式 投影方式选择立体等角投影,在GMT6中的命令是-Js # 定义区域变量和投影变量,纬度从北纬30度到极点 region-180/180/30/90 projection0/90/1:60000000 gmt set PROJ_ELLIPSOID WGS-84定义CPT及地形展示 现在定义一个CPT用于显示…

欧式家居官网源码系统-轻奢大气设计风格

一款家居家私的官方网站系统,设计轻奢大气。 前端内容均可通过后台修改。当然你也可以用于其他行业的官网使用,只要你喜欢这个设计。 大致功能: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多…

[学习笔记] VFX Silhouette

目录 Part 1 : The interface of Silhouettte (Silhouette的界面介绍) Part 2: The shape divisions and manual roto(形状分区和手动roto工作): Part 3: tracking : Part 4: Mocha Tracking Part 5: Motion Blur(…

【单片机毕业设计选题24004】-基于STM32和阿里云的智能鱼缸控制系统

系统功能: 此设计采用STM32单片机将采集到的环境温度,TDS值,PH值等显示在OLED上,并将这些信息上报至阿里云平台。系统可通过阿里云平台或按键开关加热继电器,增氧继电器,水泵继电器和舵机. 主要功能模块原理图: 电源时钟烧录接口: 单片机和按键输入电路: 继电器控…

vscode插件开发之 - menu配置

上一遍博客介绍了如何从0到1搭建vscode插件开发的base code,这遍博客将重点介绍如何配置menu。通常,开发一款插件,会将插件显示在VSCode 左侧的活动栏(Activity Bar),那么如何配置让插件显示在Activity Bar…

香橙派鲲鹏Pro(orange pi kunpeng) 开箱测试,和在娱乐功能(电视盒子),深度机器学习应用方面的测试报告

摘要 对Orange Pi kunpeng这个开发板进行综合评测,特别关注其作为电视盒子的性能以及在深度学习应用中的算力和稳定性。通过一个月的测试,我们评估了其硬件性能、软件兼容性、用户体验和实际应用潜力 引言 5月份,我收到了csdn 对Orange P…

LabVIEW阀性能测试平台

项目背景 公司需要开发一套综合测试平台,用于测试汽车气压制动系统控制装置和调节装置的性能。测试平台需满足QC/T标准,并实现多项测试功能,包括密封性测试、静特性测试、动态特性测试等。公司要求系统基于LabVIEW开发,以便于与现…

C++ 06 之 c++增强

c06c增强.cpp #include <iostream>using namespace std; // 1、全局变量检测增强&#xff1a;可以检测出重定义 (c语言不会报错&#xff0c;但是C会报错) //int a; //int a 10;// 2、函数检测增强: 函数返回值类型、形参类型、实参个数 int sum(int a, int b) {return …

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

JavaScript快速入门系列-3(函数基础)

第三章:函数基础 3.1 函数定义与调用3.1.1 函数声明3.1.2 函数表达式3.2 参数与返回值3.3 匿名函数与立即执行函数表达式(IIFE)3.3.1 匿名函数3.3.2 立即执行函数表达式3.4 箭头函数3.4.1 箭头函数与this3.5 函数的高级话题3.5.1 闭包3.5.2 函数柯里化3.5.3 高阶函数小结在Jav…

【C++课程学习】:Data类的实现

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.头文件 &#x1f369;2.实现文件&#xff1a; &#x1f369;3.分析&#xff1a; &…

【硬件模块】SSD1306 OLED屏幕(含GD32ESP32驱动代码)

OLED屏幕 最近在写GD32的文章&#xff0c;之前STM32有OLED屏幕来展示数据&#xff0c;ESP32可以直接打印到电脑屏幕上&#xff0c;GD32的话手上就没有办法了。 虽然是可以直接把STM32的OLED屏幕的驱动代码改改移植到GD32上面&#xff0c;不过想了想干脆写一个文章来说说如何驱…

2024牛客网高频精选Java面试八股文整理(附答案)

Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人&#xff0c;基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺&#xff0c;而需求量又大&#xff0c;所以这种人才供不应求的现状&#xff0c;就是 Java 工程师的薪…

公用nacos,实现只调用本机相应服务,不出现负载均衡到别人机器上

当我们有两个研发同时在调试一个微服务模块时&#xff0c;你和对方本地都会启动服务&#xff0c;这就导致在nacos会同时注册两个实例。默认情况下请求这个服务&#xff0c;具体处理请求的程序会在你和对方之间来回轮询&#xff0c;即一下你的服务一下对方的服务。 其结果就导…

栈(Stack)汇总

栈简介 栈&#xff08;Stack&#xff09;是只允许在一端进行插入或者删除操作的线性表。它的操作特性可以概括为——后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;。栈顶&#xff08;Top&#xff09;——线性表允许进行插入删除的一端&#xff1b; 栈底…

【Linux】基础IO——文件描述符,重定向

话接上篇&#xff1a; 1.文件描述符fd 磁盘文件 VS 内存文件&#xff1f; 当文件存储在磁盘当中时&#xff0c;我们将其称之为磁盘文件&#xff0c;而当磁盘文件被加载到内存当中后&#xff0c;我们将加载到内存当中的文件称之为内存文件。磁盘文件和内存文件之间的关系就像程…

红队内网攻防渗透:内网渗透之Linux内网权限提升技术:udf提权Capability权限LD_PRELOAD环境变量

红队内网攻防渗透 1. 内网权限提升技术1.1 Linux系统提权-Web&用户-数据库udf提权1.1.1 信息收集1.1.2 Web权限获取1.1.3 MYSQL-UDF提权1.1.4 下载到目标上1.1.5 连接确认是否有条件进行导出调用1.1.6 开始进行写入导出调用1.2 Linux系统提权-Web&用户-Capability能力1…