某对象存储元数据集群改造流水账
软件产品:某厂商提供的不便具名的对象存储产品,核心底层技术源自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验证,但出于谨慎和客户方催期考虑,决定优先使用第一种方案对现有业务集群进行改造。
(等到该项目脱密或者我本人离岗脱密后,再行讨论这两种改造方案的细节内容。)
相关文章:
某对象存储元数据集群改造流水账
软件产品:某厂商提供的不便具名的对象存储产品,核心底层技术源自HDFS和Amazon S3,元数据集群采用了基于MongoDB的NOSQL数据库产品和MySQL数据库产品相结合。 该产品的元数据逻辑示意图如下: 业务集群现状:当前第3期建…...
前端理论总结(js)——filter、foearch、for in 、for of 、for的区别以及返回值
Filter: 用途:用于筛选数组中符合条件的元素,返回一个新数组。 返回值:返回一个新数组,包含经过筛选的元素。 Foreach: 用途:遍历数组中的每个元素,执行回调函数。 返回值&#x…...
【JavaEE初阶系列】——多线程案例一——单例模式 (“饿汉模式“和“懒汉模式“以及解决线程安全问题)
目录 🚩单例模式 🎈饿汉模式 🎈懒汉模式 ❗线程安全问题 📝加锁 📝执行效率提高 📝指令重排序 🍭总结 单例模式,非常经典的设计模式,也是一个重要的学科&#x…...
革新水库大坝监测:传统软件与云平台之比较
在水库大坝的监测管理领域,传统监测软件虽然曾发挥了重要作用,但在多方面显示出了其局限性。传统解决方案通常伴随着高昂的运维成本,需要大量的硬件支持和人员维护,且软件整合和升级困难,限制了其灵活性和扩展性。 点击…...
C++模版(基础)
目录 C泛型编程思想 C模版 模版介绍 模版使用 函数模版 函数模版基础语法 函数模版原理 函数模版实例化 模版参数匹配规则 类模版 类模版基础语法 C泛型编程思想 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。 模板是泛型编程…...
MySQL驱动Add Batch优化实现
MySQL 驱动 Add Batch 优化实现 MySQL 驱动会在 JDBC URL 添加 rewriteBatchedStatements 参数时,对 batch 操作进行优化。本文测试各种参数组合的行为,并结合驱动代码简单分析。 batch参数组合行为 useServerPrepStmts 参数 PreparedStatement psmt…...
手撕算法-数组中的第K个最大元素
描述 分析 使用小根堆,堆元素控制在k个,遍历数组构建堆,最后堆顶就是第K个最大的元素。 代码 class Solution {public int findKthLargest(int[] nums, int k) {// 小根堆PriorityQueue<Integer> queue new PriorityQueue<>…...
【vue】computed和watch的区别和应用场景
Computed 和 Watch 是 Vue.js 中用于监视数据变化的两个不同特性,它们各自有不同的应用场景和功能。 Computed: 计算属性(Computed properties)用于声明基于其他数据属性的计算值。它具有缓存功能,只有在依赖的数…...
ARM.day8
1.自己设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警 2.当湿度比较高时,打开LED1灯,蜂鸣器报警 main.c #include "si7006.h" #include "CH1.h" #include "led.h" // 延时函数in…...
SpringCloud Gateway工作流程
Spring Cloud Gateway的工作流程 具体的流程: 用户发送请求到网关 请求断言,用户请求到达网关后,由Gateway Handler Mapping(网关处理器映射)进行Predicates(断言),看一下哪一个符合…...
西井科技与安通控股签署战略合作协议 共创大物流全新生态
2024年3月21日,西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势,积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用,以及绿色物流链等领域的深度探索、强强联…...
CCCorelib 点云RANSAC拟合球体(CloudCompare内置算法库)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 RANSAC是一种随机参数估计算法。RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时…...
map china not exists. the geojson of the map must be provided.
map china not exists. the geojson of the map must be provided. 场景:引入echarts地图报错map china not exists. the geojson of the map must be provided. 原因: echarts版本过高,ECharts 之前提供下载的矢量地图数据来自第三方&…...
Redis如何删除大key
参考阿里云Redis规范 查找大key: redis-cli --bigkeys 1、String类型: Redis 4.0及以后版本提供了UNLINK命令,该命令与DEL命令类似,但它会在后台异步删除key,不会阻塞当前客户端,也不会阻塞Redis服务器的…...
JRT菜单
上一章搭建了登录界面的雏形和抽取了登录接口。给多组使用登录和菜单功能提供预留,做到不强行入侵别人业务。任何产品只需要按自己表实现登录接口后配置到容器即可共用登录界面和菜单部分。最后自己的用户关联到JRT角色表即可。 登录效果 这次构建菜单体系 首先用…...
《海王2》观后感
前言 我原本计划电影上映之后,去电影院观看的,但时间过得飞快,一眨眼这都快4月份了,查了一下,电影院早就没有排片了,所以只能在B站看了,这里不得不吐槽一下,原来花了4块钱购买观看还…...
[蓝桥杯 2023 省 A] 颜色平衡树:从零开始理解树上莫队 一颗颜色平衡树引发的惨案
十四是一名生物工程的学生,他已经7年没碰过信息学竞赛了,有一天他走在蓝桥上看见了一颗漂亮的颜色平衡树: [蓝桥杯 2023 省 A] 颜色平衡树 - 洛谷 十四想用暴力解决问题,他想枚举每个节点,每个节点代表…...
maya打开bvh脚本
目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本 https://github.com/jhoolmans/mayaImporterBVH/blob/master/bvh_importer.py import os import re from typing impo…...
【JavaSE】数据类型和运算符
前言 从这一篇我们开始Java的学习~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 Java第一个程序 字面常量 字面常量的分类 结合代码理解 类型转换 类型提升 byte与byte的运算 正确写法 字符串类型St…...
Docker 哲学 - ip 的组成规则 与 网关介绍
在 IP 地址中,我们通常将 IP 地址分为两部分:网络部分和主机部分。网络部分用于标识网络,主机部分用于标识该网络中的特定主机。 IP 地址的每个部分(也被称为一个八位组或一个字节)可以是从0到255的任何值。 一个 IPv4…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
