当前位置: 首页 > article >正文

数据重构如何兼顾效率与性能稳定?zStorage 全闪存分布式存储的技术实践与实测数据

点击蓝字 关注我们

zStorage 作为数据库场景下的全闪存分布式存储,除了性能要好,更重要的是要在各种情况下都能保持“稳定”的好。一个高并发的交易型业务数据库,如果出现轻微的IO抖动,就可能造成数据库并发事务提交的排队,从而导致事务积压甚至交易超时。

zStorage 的故障重构速率可以达到1GB/s,这意味着 zStorage 在15分钟内就可以完成900GB~1TB的数据重构。对于市面上常见的3.84TB的NVMe SSD盘,如果磁盘故障或损坏,该磁盘涉及的数据分片,将3副本降级为2副本,或者是2副本降级为1副本;然后 zStorage 自动利用空闲的空间进行重构,在1小时后即可重构完成,重新将降级的数据分片恢复到2副本或3副本的健康状态。

我们强调了 zStorage 的数据重构速率,这可以为数据库的高可用和安全运行提供保障。但是用户仍可能存在顾虑,担心重构会导致较大的性能影响:这会不会导致IO平均延迟变长?或者IO平均延迟变化不大,但是出现较大波动,从而导致数据库出现较大的或经常性的抖动?

但同时,用户又希望在某些场景下磁盘的重构速率更快,比如在主动维护期间,此时的业务负载较低,用户往往会期望重构能更快完成。

所以对于磁盘故障后的数据重构,至少应满足如下与性能相关的几点需求:

  1. 速率要足够快,这样降级的数据分片才能尽快恢复到健康状态,数据更安全。

  2. 性能影响要足够低,IOPS下降不要太多,应该控制在10%以内;IO延迟要保持稳定,不要出现波动,即IO的P90、P95和P99这些延迟指标不要有大的增加。

  3. 在用户觉得有必要的时候,可以调整重构速率,以更慢或更快的速度进行重构。

关于上述第3点,我们用一个可在线修改的存储参数来调节。这个参数我们用1-32的数值来控制速率,有点像车的变速器,用不同的挡位来调节速率。参数值为1时,重构速率最慢;而值为32的时候,是最高速率。该参数的默认值我们选定为8,即大约在1GB/s的重构速率。在不同的磁盘、网络和CPU配置下,速率会有些许差异。

而针对上述第1和第2点的重构需求,本文用实测数据来验证 zStorage 在磁盘故障后数据重构的性能表现,尤其是时延的变化和稳定性。

测试数据与结论

3个存储节点,NVMe SSD磁盘数分别为4、4、6个。这里有1个节点用6个SSD是模拟磁盘故障后,会出现某个节点的盘数减少而导致IOPS降低,这是由于在分布式存储中,通常会出现有短板的木桶成了影响整个系统上限的情况。我们要测试的是单纯的因重构所导致的IOPS和时延变化,而需要避免其他干扰。

存储池划分了6个卷并挂载到1个计算节点上,在计算节点上用fio进行测试。我们统一使用4KB块大小(读写比例7:3)进行随机IO测试。 

通过实测,结果如下(注:本文主要验证重构的性能影响的相对值,由于磁盘数量较少,没有达到典型配置需要的每节点8个磁盘,所以性能数据比正式的产品性能值低):

1. 重构时IOPS的影响

从上表可以得到如下结论:

  1. 在默认配置下,即重构速率“挡位”为8时,重构速率达到1GB/s,而IOPS下降幅度(即IO影响)仅7.9%。

  2. 在重构速率“挡位”为16时,重构速率达到1808MB/s,比挡位8时提升了77.6%,而IOPS下降幅度仅11.6%。

  3. 全速重构时,重构速率接近7GB/s,即1小时接近25TB的重构量;也就是说,即使是15.36TB的NVMe SSD盘在使用率达到90%,即数据量13.82TB时,磁盘故障后也只需要33分钟左右就能完成重构。

2. 重构对读IO延迟的影响

3. 重构对写IO延迟的影响

可能有细心的朋友注意到,在重构速率“挡位”为8时,重构时写IO的99分位延迟(即P99)比没有重构时还低。这是因为发生了长尾延迟,是由SSD盘的写抖动引起,所以这说明测试中,重构时SSD盘的写抖动导致的延迟刚好比没有重构时小。

从上面的2个表可以得到如下结论:

  1. 在默认配置下,即重构速率“挡位”为8时,IO平均延迟增加8%~11.4%,P99延迟也只增加6.8%。

  2. 在重构速率“挡位”为16时,IO平均延迟增加12.2%~16.8%(实际上读IO平均延迟与“8挡”时一致),P99延迟也只增加2.2%~5.7%。

  3. 在全速重构时,读IO平均时延也仅为0.4ms,写IO平均时间0.58ms;而P99略高,写IO的P99时延达到了3.26ms。在系统负载不高或业务低谷时期,进行全速重构也能确保业务系统正常运行。

  4. 从上述的P90-P99时延数据可以看到,重构期间,没有出现非常大的IO波动;在非全速重构期间,P99时延只有很小的增加。这说明IO的延迟相当稳定。

从实测数据不难看出,zStorage 一直是以匀速的方式在重构;而不是采用处理一批IO后,又重构一部分数据(比如以Chunk为单位进行重构)的方式,因为这样会出现大IO影响或阻塞业务IO,导致部分IO的时延变得很长。

总结

磁盘故障导致的数据重构,一方面要有足够的速率,让重构尽可能快地完成;另一方面也要保证重构对IO的影响足够小,这包括要保证IO时延的稳定,避免部分IO时延过长。而 zStorage 在磁盘故障后的数据重构功能,很好地满足了这两方面的要求,同时还兼顾了可以人为地根据不同场景调整重构速率的需求。

附件

本文实测的fio输出数据(篇幅有限,只输出2个不同挡位重构速率的数据)。

1. “挡位8”,无重构时性能和重构时fio性能输出

无重构时性能输出:

重构时性能输出:

2. “挡位16”,无重构时性能和重构时fio性能输出

无重构时性能输出:

重构时性能输出:

图片

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,是业界领先的“智能的数据技术提供商”。公司以“数据驱动,成就未来”为使命,致力于将创新的数据技术产品和解决方案带给全球的企业和组织,帮助客户构建安全、高效、敏捷且经济的数据环境,持续增强客户在数据洞察和决策上的竞争优势,实现数据驱动的业务创新和升级发展。

自成立以来,云和恩墨专注于数据技术领域,根据不断变化的市场需求,创新研发了系列软件产品,涵盖数据库、数据库存储、数据库管理和数据智能等领域。这些产品已经在集团型、大中型、高成长型客户以及行业云场景中得到广泛应用,证明了我们的技术和商业竞争力,展现了公司在数据技术端到端解决方案方面的优势。

图片

相关文章:

数据重构如何兼顾效率与性能稳定?zStorage 全闪存分布式存储的技术实践与实测数据

点击蓝字 关注我们 zStorage 作为数据库场景下的全闪存分布式存储,除了性能要好,更重要的是要在各种情况下都能保持“稳定”的好。一个高并发的交易型业务数据库,如果出现轻微的IO抖动,就可能造成数据库并发事务提交的排队&#x…...

linux下内存地址数学运算

如下代码计算地址并16字节对齐: char* buffer (char*)malloc(a3 0x1000);unsigned long long tmp (((unsigned long long)buffer 0x10) & 0xffffffffffffff00);char* buf (char*)tmp;假如把地址当作整数,加减程序运算,直接转换是不行…...

A2A + MCP:构建实用人工智能系统的超强组合

构建真正有效的连接型人工智能系统的挑战 如果你正在构建人工智能应用,这种情况可能听起来很熟悉: 你需要特定的人工智能能力来解决业务问题。你找到了完成每个单独任务的出色工具。但把所有东西连接在一起却占据了大部分开发时间,还创建了…...

力扣每日打卡17 49. 字母异位词分组 (中等)

力扣 49. 字母异位词分组 中等 前言一、题目内容二、解题方法1. 哈希函数2.官方题解2.1 前言2.2 方法一:排序2.2 方法二:计数 前言 这是刷算法题的第十七天,用到的语言是JS 题目:力扣 49. 字母异位词分组 (中等) 一、题目内容 给…...

Word处理控件Spire.Doc系列教程:C# 为 Word 文档设置背景颜色或背景图片

在 Word 文档中,白色是默认的背景设置。一般情况下,简洁的白色背景足以满足绝大多数场景的使用需求。但是,如果您需要创建简历、宣传册或其他创意文档,设置独特的背景颜色或图片能够极大地增强文档的视觉冲击力。本文将演示如何使…...

ecovadis评级范围,如何拿到ecovadis评级高分

EcoVadis评级范围及高分策略详解 一、EcoVadis评级范围(四大核心主题) EcoVadis从以下4大维度对企业进行评分,权重因行业而异(如制造业更侧重环境,IT业更关注商业道德): 评估维度具体评估内容…...

掌握 Altium Designer:轻松定制“交换器件”工具栏

在PCB设计过程中,快速交换器件(如电阻、电容、IC等)是提高效率的关键。Altium Designer提供了灵活的工具栏定制功能,让用户可以创建专属的"交换器件"工具栏,将常用操作集中管理,减少菜单切换时间…...

JavaScript的JSON处理Map的弊端

直接使用 Map 会遇到的问题及解决方案 直接使用 Map 会导致数据丢失,因为 JSON.stringify 无法序列化 Map。以下是详细分析及解决方法: 问题复现 // 示例代码 const myMap new Map(); myMap.set(user1, { name: Alice }); myMap.set(user2, { name: B…...

【C++ Qt】信号和槽(内配思维导图 图文并茂 通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章是Qt中的第三章,也是我们理解Qt中必备的点 信号槽,它本质由信号和槽两个来实现,其中将细致的讲述如何自定义信号…...

突破AI检测边界:对抗技术与学术伦理的终极博弈

随着GPT-4、Claude等大模型的文本生成能力突破人类写作水平,AI检测工具与对抗技术的博弈已进入白热化阶段。本文深入解析基于对抗训练的文本风格混淆网络如何突破GPTZero最新防御体系,探讨OpenAI多模态内容溯源系统引发的技术升级,并针对学术…...

从零开始构建微博爬虫:实现自动获取并保存微博内容

从零开始构建微博爬虫:实现自动获取并保存微博内容 前言 在信息爆炸的时代,社交媒体平台已经成为信息传播的重要渠道,其中微博作为中国最大的社交媒体平台之一,包含了大量有价值的信息和数据。对于研究人员、数据分析师或者只是…...

Git -> Git 所有提交阶段的回滚操作

已经修改但没有暂存的回滚 修改状态单个文件所有文件说明已修改未暂存git checkout -- 文件路径git checkout -- .丢弃工作区修改 已经暂存但没有提交的回滚 修改状态单个文件所有文件说明已暂存未提交git reset HEAD 文件路径 -> git checkout -- 文件路径git reset HEA…...

三餐四季、灯火阑珊

2025年4月22日,15~28℃,挺好的 待办: 教学技能大赛教案(2025年4月24日,校赛,小组合作,其他成员给力,暂不影响校赛进度,搁置) 教学技能大赛PPT(202…...

【Java面试笔记:基础】8.对比Vector、ArrayList、LinkedList有何区别?

在Java中,Vector、ArrayList和LinkedList均实现了List接口,但它们在线程安全、数据结构、性能特性及应用场景上存在显著差异。 1. Vector、ArrayList 和 LinkedList 的区别 Vector: 线程安全:Vector 是线程安全的动态数组&#…...

麒麟V10安装MySQL8.4

1、下载安装包 wget https://cdn.mysql.com//Downloads/MySQL-8.4/mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar2、解压 mkdir -p /opt/mysql tar -xvf mysql-8.4.5-1.el7.x86_64.rpm-bundle.tar -C /opt/mysql3、安装MySQL 3.1、卸载mariadb rpm -qa | grep mariadb rpm -e m…...

基于javaweb的SSM+Maven教材管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

C语言教程(十二):C 语言数组详解

一、引言数组的基本概念 数组是一组具有相同数据类型的元素的集合,这些元素在内存中连续存储。通过一个统一的数组名和下标来访问数组中的每个元素。使用数组可以方便地处理大量相同类型的数据,避免为每个数据单独定义变量。 二、一维数组 2.1 数组的…...

osxcross 搭建 macOS 交叉编译环境

1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...

Zookeeper 概述

Zookeeper 概述 Zookeeper 概述与使用指南什么是Zookeeper?Zookeeper的主要作用使用Zookeeper的框架典型使用场景1. 配置管理2. 分布式锁3. 服务注册与发现 Zookeeper的缺陷与其他协调服务的比较实际案例:Kafka使用Zookeeper最佳实践 Zookeeper 概述与使…...

智能座舱测试内容与步骤

智能座舱的测试步骤通常包括以下环节: 1.测试环境搭建与准备 • 硬件需求分析:准备测试车辆、服务器与工作站、网络设备以及传感器和执行器模拟器等硬件设备。 • 软件需求分析:选择测试管理软件、自动化测试工具、模拟软件和开发调试工具等。…...

NineData 与飞书深度集成,企业级数据管理审批流程全面自动化

NineData 正式推出与飞书审批系统的深度集成功能,企业用户在 NineData 平台发起的审批工单,将自动推送至审批人的飞书中,审批人可以直接在飞书进行审批并通过/拒绝。该功能实现跨系统协作,带来巨大的审批效率提升,为各…...

mockMvc构建web单元测试学习笔记

web应用本来需要依靠tomcat这个环境运行 现在用mockMvc是为了模拟这个web环境,简化测试 什么是mock(模拟) 模拟对象---mock object是以可控方式模拟真实对象行为的假对象,通过模拟输入数据,验证程序达到预期结果 为什么使用mock对象 因为…...

【白雪讲堂】[特殊字符]内容战略地图|GEO优化框架下的内容全景布局

📍内容战略地图|GEO优化框架下的内容全景布局 1️⃣ 顶层目标:GEO优化战略 目标关键词: 被AI理解(AEO) 被AI优先推荐(GEO) 在关键场景中被AI复读引用 2️⃣ 三大引擎逻辑&#x…...

Windows7升级Windows10,无法在此驱动器上安装Windows

一、现象描述 台式机工作站,从Windows7升级Windows10,采用MediaCreationTool_22H2制作U盘启动盘,安装系统遇到问题如下: 二、原因分析 是由于硬盘格式不是GPT硬盘,而Windows系统只能安装到GPT硬盘上,所以…...

Element Plus表格组件深度解析:构建高性能企业级数据视图

一、架构设计与核心能力 Element Plus的表格组件(el-table)基于Vue 3的响应式系统构建,通过声明式配置实现复杂数据渲染。其核心设计理念体现在三个层级: 数据驱动:通过data属性绑定数据源,支持动态更新与…...

Idea创建项目的搭建

1、普通java项目 如果没有project SDK去new,默认在C:\Program Files\Java\jdk1.8.0_261 输入项目名称和项目路径 点击完成,即创建好一个普通的Java项目。 2、普通JavaWEB项目 目录中没有WEB-INF文件可以直接从tomcat中粘贴过来 D:\apache-tomcat-8.5.…...

drupal7可以从测试环境一键部署到生产环境吗

Drupal 7 本身并没有“内建的一键部署功能”,所以“从测试环境一键部署到生产环境”不能完全自动化完成,尤其是涉及数据库、配置和文件系统时。但你可以通过一些工具和方法实现接近“一键部署”的效果 ✅ 🚧 为什么不能直接一键部署&#xff…...

Springboot 集成 RBAC 模型实战指南

RBAC 模型核心原理 详情可参考之前的笔记:https://blog.csdn.net/qq_35201802/article/details/146036789?spm1011.2415.3001.5331 RBAC 定义与优势 RBAC(Role-Based Access Control,基于角色的访问控制)** 是一种通过角色关联…...

KWDB 创作者计划 KWDB(KaiwuDB)系列专题 (四) KWDB核心概念解析:多模、时序与分布式

KWDB核心概念解析:多模、时序与分布式 1. 引言 KWDB(KaiwuDB)作为一款面向AIoT(人工智能物联网)的分布式多模数据库,以其独特的多模融合设计、高效时序处理能力和灵活的分布式架构,满足了物联网场景下复杂数据管理的需求。要深入掌握KWDB,理解其三大核心概念——多模…...

GpuGeek:以弹性算力与全栈服务赋能产业智能升级

在人工智能技术快速融入各领域的趋势下,企业对高效、低成本的AI基础设施需求日益迫切。GpuGeek作为一站式AI基础设施平台,凭借其弹性算力调度、全流程开发支持、全球化资源覆盖以及国产化技术适配四大核心优势,为产业智能化升级提供了坚实的技…...