某对象存储元数据集群改造流水账

软件产品:某厂商提供的不便具名的对象存储产品,核心底层技术源自HDFS和Amazon S3,元数据集群采用了基于MongoDB的NOSQL数据库产品和MySQL数据库产品相结合。

该产品的元数据逻辑示意图如下:

业务集群现状:当前第3期建设的元数据集群中存在约50亿条对象文件记录。当前共3期建成规模,元数据记录总量约400亿条。当前集群中对象文件的读写存在明显时延,读写性能已不满足业务应用方使用需求。

业务集群现状分析:

甲:当前业务集群主要是在跑大规模语言模型训练,产生的对象文件会冷档到对象存储集群,单个文件命名而成的元数据块未超过20B;

乙:当前对象存储系统所构成软件版本已不再维护,MySQL版本较低,数据库中单表过于庞大、且无法拆分;

丙:造成当前集群中对象文件读写延时的瓶颈在于MySQL数据库中单表过于庞大,此外NOSQL数据库的数据磁盘已利用了70%、NOSQL数据库消耗了其Host-OS内存的65%。

现场勘验结论:

简单地对当前集群进行元数据集群扩容无法缓解对象文件读写延时问题,需要对对象文件列表操作相关的MySQL数据库表做改造才能从根本上解决业务应用方反映的痛点。

对象存储软件存储系统组件分析:

NOSQL数据库主要以热存储的方式存储对象文件的名称、创建时间、存储桶位置、全局存储索引等索引信息,并以 K/V 的形式对外提供查询服务;

MySQL数据库主要记录存储桶内的对象文件索引信息,供文件列表类的操作使用。

换而言之,NOSQL存储了全局元数据信息、MySQL记录存储桶内的对象文件元数据信息。这种情况下,可以认为是NOSQL向MySQL同步了一部分元数据、对MySQL列表操作后的结果会来到NOSQL查找对象文件的具体存放位置。

有了这个认识,那么元数据集群的改造也就定向了:提升MySQL数据库表的链接查询速度和效率,增加NOSQL集群规模。因为提升MySQL数据库表的链接查询速率可以在前端页面快速返回被列表操作的对象文件集合;增加NOSQL集群规模可以缩小各节点上的 K/V记录的规模、进而缩短对象文件被查询的时间。

至此这个问题就变成了如何优化MySQL的数据库表结构、如何优化MySQL的数据库表链接查询速率的问题了。

在这个方向上大体有两种解决办法:

一是重新设计MySQL集群中的库表结构、并将对象文件的读写转移到新的MySQL集群上。这个操作需要分两个大的步骤来完成:第一步先完成新的兼容性库表的设计并搭建好新的MySQL集群,保证新写入的数据指向新建的MySQL集群、已有的数据继续从原来的MySQL集群上读写;第二步是构建一个新的中转数据池,把原有的MySQL集群中的数据同步到中转池中、并从中转池中清洗后写入到新建的MySQL集群,等到原有的数据和元数据同步完毕,再选择一个合适的操作窗口停止业务应用的读写、把尾数数据写入到新建的MySQL集群中、并更改数据访问路由到新建的MySQL集群上。

这个办法保守,能最大限度地保全原有数据的完整性,场内有过低版本MySQL向高版本MySQL迁移的案例,上线排期会比较短;但是操作周期长、操作过程频繁且复杂,既考验DBA对业务数据结构的规划设计能力、又考虑业务应用方对业务中断的容忍程度,很可能会遭遇业务应用方的否决。

二是采用路由网关的方式直接指向NOSQL数据库中的存储桶数据表。具体操作为新构建一个数据仓储池,把NOSQL中的数据记录持续被分到仓储池,在NOSQL节点上部署一个针对表的搜索引擎实例(如Elasticsearch、Lucene、Solr、ClickHouse等),在数据文件统一入口后添加一个路由网关(如Netflix Zuul),通过配置路由网关让文件列表操作直达存储桶所在的NOSQL节点,由搜索引擎对表文件进行查询并返回对象文件所在的物理位置。

这个办法比较激进,场内没有类似或相关的案例研究,理论上不会产生已有数据的丢失。优点是彻底解放了文件列表操作的数量限制(MySQL低版本上的表容纳量约为10亿条),只要路由网关和搜索引擎规模足够大,对象文件的列表操作几乎不会出现较大的延时。在做好路由流量切分的情况下,可以实现业务应用方的无感知操作。缺点是对原有集群改动幅度比较大,需要产品研发配合做针对性的代码修改,上线排期比较长。

当前这两种方案都做过了小规模的POC验证,但出于谨慎和客户方催期考虑,决定优先使用第一种方案对现有业务集群进行改造。

(等到该项目脱密或者我本人离岗脱密后,再行讨论这两种改造方案的细节内容。)

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

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

相关文章

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

【Monero】Onion Monero Blockchain Explorer | 洋葱门罗币区块链浏览器

github:onion-monero-blockchain-explorer Onion Monero Blockchain Explorer特点: • 没有cookie,没有网络分析跟踪器,没有image, • 开源, • 完全用C编写, • 显示加密的付款 ID, • 显示环…

Django auth模块

【一】命令行创建用户 【1】语法 python manage.py createsuper【2】示例 用户名 默认是是电脑名称 邮箱 可以填也可以不填 密码 terminal中:输入密码不显示出来manage.py中:明文输入输入密码太简单会提示 Username (leave blank to use administra…

20231911 2022-2023-2 《网络攻防实践》实验三

1.实验内容 1、实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探,回答问题:你在访问www.tianya.cn网站首页时,浏览器将访问多少个Web服务器?他们的IP地址都是什么? 2、实践Wireshark 使…

Cesium for UE-03-添加数据集(倾斜摄影)

继续上一章节,在创建了项目和关卡的基础上添加倾斜摄影 重新打开上次的项目和关卡 如果你已经关掉了上次的项目和关卡,可以重新打开ue,然后选择 选择 文件-打开关卡,在弹出的窗口中,选择 上次的关卡,并点击…

从汇编以及栈帧层面理解内联函数的原理

宏太复杂,所以弄出内联,内联适合小函数,把函数连到程序里面,这样就直接用,不需要调用,但是它占用空间。 C推荐 const和enum替代宏常量 inline去替代宏函数 宏缺点: 1、不能调试 2、没有类型安…

多层感知机-----自我神经MLP入门笔记

多层感知机(Multilayer Perceptron, MLP)是一种常见的人工神经网络(Artificial Neural Network, ANN)模型,它由多个人工神经元组成的多层结构。每个神经元都与前一层的所有神经元连接,并且每条连接都有一个…

HarmonyOS(鸿蒙开发)入门篇

如果需要学习鸿蒙开发可以查看以下学习资源链接 OpenAtom OpenHarmony Develop applications - HUAWEI HarmonyOS APP 转载请注明出处HarmonyOS(鸿蒙开发)入门篇-CSDN博客,谢谢!

如何使用PHP和RabbitMQ实现延迟队列(方式一)?

前言 今天我们来做个小试验,用PHP和RabbitMQ实现消息队列的延迟功能。 前期准备,需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列?-CSDN博客 一、安装RabbitM…

js逆向之实例某宝热卖(MD5)爬虫

目录 正常写 反爬 逆向分析 关键字搜索 打断点&分析代码 得出 sign 的由来 确定加密方式 写加密函数了 补全代码 免责声明:本文仅供技术交流学习,请勿用于其它违法行为. 正常写 还是老规矩,正常写代码,该带的都带上,我这种方法发现数据格式不完整. 应该后面也是大…

R语言学习——Rstudio软件

R语言免费但有点难上手,是数据挖掘的入门级别语言,拥有顶级的可视化功能。 优点: 1统计分析(可以实现各种分析方法)和计算(有很多函数) 2强大的绘图功能 3扩展包多,适合领域多 …

C语言数据结构基础————二叉树学习笔记(四)简单的OJ题目练习

1.单值二叉树 965. 单值二叉树 - 力扣(LeetCode) 建立一个新的函数,用函数传参的方法来记录val的值 如上一篇最后的对称二叉树的习题,建立新的函数来传参 多采用使用反对值的方法,因为如果是相等return true的话&am…

UE4_旋转节点总结一

一、Roll、Pitch、Yaw Roll 围绕X轴旋转 飞机的翻滚角 Pitch 围绕Y轴旋转 飞机的俯仰角 Yaw 围绕Z轴旋转 飞机的航向角 二、Get Forward Vector理解 测试: 运行: 三、Get Actor Rotation理解 运行效果: 拆分旋转体测试一&a…

Spring05 SpringIOC DI

名词解释 今天我们来介绍Spring框架的最重要的part之一 SpringIOC 和 DI 这里的SpringIOC 其实是容器的意思,Spring是一个包含了很多工具方法的IOC容器 什么是IOC呢? IOC其实是Spring的核心思想 Inversion of Control (控制反转) 可能这里你还是不理解这个是啥意思 其实就…

程序运行之ELF文件的段

更多精彩内容在公众号。 我们将之前的代码增加下变量来具体看下 在代码中增加了全局变量以及静态变量&#xff0c;还有一个简单的函数。 #include <stdio.h> int global_var1; int global_init_var; void func1(int i){ printf("%d\n",i); } int main(vo…

C++入门(一)

目录 命名空间&#xff1a; 为什么要提出命名空间&#xff1f; 命名空间的定义&#xff1a; 命名空间的使用&#xff1a; 加命名空间名称及作用域限定符&#xff1a; 使用using将命名空间中某个成员引入&#xff1a; 使用using namespace命名空间名称引用&#xff1a; C…

【c++】类和对象(四)深入了解拷贝构造函数

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好啊&#xff0c;本篇内容带大家深入了解拷贝构造函数 目录 1.拷贝构造函数1.1传值调用的无限调用1.2浅拷贝1.3深拷贝1.4深拷贝的实现 1.拷贝构造函数 拷贝构造函数是一种特殊的…

yolov5+pyside6+登录+用户管理目标检测可视化源码

一、软件简介 这是基于yolov5目标检测实现的源码&#xff0c;提供了用户登录功能界面&#xff1b; 用户需要输入正确的用户名和密码才可以登录。如果是超级管理员&#xff0c;可以修改普通用户的信息&#xff0c;并且在检测界面的右上角显示【管理用户】按钮。 支持图片、视频、…

访问二维数组本质

先从一维数组讲起 int main() {int arr[5] { 1,2,3,4,5 };for (int i 0; i < 5; i) {printf("%d",arr[i]); //对数组进行访问}return 0; } 其实 arr [ i ] * (arr i) 这两个是完全相等的&#xff0c;在c语言指针&#xff08;1&#xff09;8.数组名与 …