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

news2025/5/15 23:28:35

点击蓝字 关注我们

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

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

图片

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

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

相关文章

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

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

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

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

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

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

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

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

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

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

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

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

三餐四季、灯火阑珊

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

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

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

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

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

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

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

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

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

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.…

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

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

网络原理 - 4(TCP - 1)

目录 TCP 协议 TCP 协议段格式 可靠传输 几个 TCP 协议中的机制 1. 确认应答 2. 超时重传 完! TCP 协议 TCP 全称为 “传输控制协议”(Transmission Control Protocol),要对数据的传输进行一个详细的控制。 TCP 协议段格…

强化学习框架:OpenRLHF源码解读,模型处理

本文主要介绍 强化学习框架:OpenRLHF源码解读,模型处理 models框架设计 了解一下 OpenRLHF的模型框架设计范式: From:https://arxiv.org/pdf/2405.11143 可以知道一个大概的流程:输入Pormpt通过Actor model输出回复 Response&am…

STL常用算法——C++

1.概述 2.常用遍历算法 1.简介 2.for_each 方式一&#xff1a;传入普通函数&#xff08;printf1&#xff09; #include<stdio.h> using namespace std; #include<string> #include<vector> #include<functional> #include<algorithm> #include…

UofTCTF-2025-web-复现

感兴趣朋友可以去我博客里看&#xff0c;画风更好看 UofTCTF-2025-web-复现 文章目录 scavenger-huntprismatic-blogscode-dbprepared-1prepared-2timeless scavenger-hunt 国外的一些ctf简单题就喜欢把flag藏在注释里&#xff0c;开源代码找到第一部分的flag 抓个包返回数据…

[密码学基础]GB与GM国密标准深度解析:定位、差异与协同发展

[密码学基础]GB与GM国密标准深度解析&#xff1a;定位、差异与协同发展 导语 在国产密码技术自主可控的浪潮下&#xff0c;GB&#xff08;国家标准&#xff09;与GM&#xff08;密码行业标准&#xff09;共同构建了我国商用密码的技术规范体系。二者在制定主体、法律效力、技术…

15.第二阶段x64游戏实战-分析怪物血量(遍历周围)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;14.第二阶段x64游戏实战-分析人物的名字 如果想实现自动打怪&#xff0c;那肯定…

HarmonyOS 基础语法概述 UI范式

ArkUI框架 - UI范式 ArkTS的基本组成 装饰器&#xff1a; 用于装饰类、结构、方法以及变量&#xff0c;并赋予其特殊的含义。如上述示例中Entry、Component和State都是装饰器&#xff0c;Component表示自定义组件&#xff0c;Entry表示该自定义组件为入口组件&#xff0c;Stat…