首发 | FOSS分布式全闪对象存储系统白皮书

一、 产品概述

1. 当前存储的挑战  

随着云计算、物联网、5G、大数据、人工智能等新技术的飞速发展,数据呈现爆发式增长,预计到2025年中国数据量将增长到48.6ZB,超过80%为非结构化数据。

同时,数字经济正在成为我国经济发展的新引擎,数据已经成为企业的核心生产要素,数据即价值。新技术新应用不断产生急剧增长的海量数据,数据的价值越来越高,对存储系统的可靠性、安全性、可用性、性能、成本、运维的要求也越来越高,给存储系统提出了巨大的挑战:

图片

以上挑战和刚需说明,新一代存储系统不光要面向传统的数据可靠性、服务可用性、性能等维度,超大存储量、长期存储经济性、系统水平线性扩展性、可交付的运维等维度成为新的重点。

这驱使新一代存储系统必然走向规模化、集成化、存算分离的分布式scale-out云存储架构,提供可交付的简洁易用的运维平台,让客户自己负责运维,安心使用。

2. FOSS的特点  

大道云行对象存储FOSS,是采用先进的分布式全闪架构的信创云存储系统,设计为超大规模数据长期、可靠、绿色节能、高性能存取。

FOSS适用于包括广电媒资、备份归档、远程容灾、视频监控、人工智能、大数据分析、数据湖等大规模非结构化数据存取应用场景,特别是数据量大、吞吐高,成本敏感的需求。

FOSS特点详解

Share Everything架构 

存储后端网络share everything架构,支持NVMe-oF,支持分布式无状态微服务安全访问存储。

信创存储 

全自主知识产权国产分布式全闪存储软件和国产闪存的结合。

全闪架构,超高性能,数据量,性能的水平线性扩展 

亚毫秒级延迟,单zone-百PB级空间,百GB级吞吐,百万级IOPS。

绿色节能 

节能调度算法使得多数SSD的大部分时间处于低功耗状态(单片SSD<0.5w)。

全闪优化设计使得SSD使用时间长,成本低 

数据按时间聚合,采用全域GC和磨损平衡等设计,极大降低SSD写放大,提高SSD使用寿命。实现大尺度QLC SSD的高密度使用,降低单位成本。

长期可靠

数据静默错误保护;智能化的介质和数据的巡检、健康扫描、Rebuild恢复。

对数据和介质长期可靠做了慎密的数据保护、监测、扫描、恢复、迁移等运维规划。

3. FOSS的核心能力  

在线数据的性能和延迟,离线数据的规模和成本。

使用FOSS,意味着客户可以将大部分数据以离线数据的成本保存到在线系统,数据长久在线。

二、 产品架构

1. 网络架构  

图片

系统采用扁平的二层网络,易于部署和管理,支持对存储集群节点进行分组,支持跨组数据互访。

  • 业务网

业务网可以是IP/IB/RoCE;

每组业务网的计算节点都互通。

  • 存储后端网

存储后端网可以是IP/IB/RoCE;

存储后端网支持按分组进行扩展,不同分组之间存储网不通,可以通过业务网进行转发;

分组设计有利于存储网络简单的水平扩展,而不增加组网的复杂度。

一个zone规模的上限,取决于业务网的规模,即计算节点总数;存储网可任意水平扩展,但总规模会受限于连接存储网的计算节点总数。

一般的,一个zone支持100GB的业务网,200个计算节点,20个存储网分组(每分组10P存储空间);则整个zone支持100GB带宽,200PB存储空间。

2. 软件架构  

图片

协议层

对外提供s3服务和nas服务。

缓存层 

数据分片通过读缓存层降低延迟,满足低读延迟的场景需求。

开放介质存储层 

-- volume

开放介质存储(OpenMediaStorage - OMS)层将块设备(disk)的trunk封装为跨节点的、冗余算法(纠删/副本)保护的volume,提供volume的装配、分配和读写接口。

OMS层开放式的直接存取disk,支持:主机Local_disk、SAS/NVMe-oF enclosure disk、块存储系统的LUN(FC/iSCSI/NVMe-oF)。

-- volume_group

volume按分组进行管理、调度和使用。分组用于支持多租户。

volume_group由调度器和node集群组成。

-- node

node代表了挂载的disk的集合,对应实体存储节点主机disk组,或NVMe-oF 盘柜disk组,或块存储划分的Lun组。

node作为disk的IO控制器,提供发现、挂载、访问disk的接口。

-- 调度器负责volume装配和分配

装配:

- 按node类型树进行类型分组

- 按空间平衡+擦写次数平衡选择node

分配:

- 按类型聚合

- 数据分片MVCC+基于租约的volume_range保护机制

元数据 

mds集群提供分布式元数据服务,支持最终一致性事务,在线线性扩展。

任务层 

包含GC、Disk_Rebuild、数据迁移、数据均衡、数据/介质健康扫描、生命周期、配额、计量归并等任务。

任务通过管理器Task_mgr,分发到Task_agent分布式并行执行。

task_mgr进行任务策略配置、调度、资源使用控制。

Service_mgr 

服务部署、升级、配置,单例服务故障转移,集群服务扩展等。

三、产品特性

1. 分布式元数据  

很多存储系统采用无元数据服务架构,比如一致性Hash。无元数据服务架构在超大规模分布式系统中存在许多缺点:

  • 无法在统一的逻辑上管理元数据,不支持事务,会导致很多一致性问题。

  • 没有元数据的范围查询能力,查询范围会放大到整个集群,导致海量对象场景下元数据列举开销大性能差。

  • rebalance过程复杂,要扫描所有需rebalance的数据进行处理并完成状态转换,且网络故障、节点临时离线和永久离线等会进一步增加rebalance复杂度。

FOSS采用分布式元数据服务架构:

  • 元数据服务线性平滑,网络故障和节点故障不影响服务的可用性

  • 元数据三副本冗余

  • 支持热点消除(主键单调递增的元数据,采用shard_bit打散)

  • 支持高性能的事务聚合批处理(batch和scan)

  • 低延迟(亚毫秒级)

依靠分布式元数据服务,FOSS简洁高效的实现了单桶无限数量对象、快速对象列举、volume调度、全域GC和磨损平衡等高级功能。

2. 存储冷热分层  

FOSS存储分层设计的主旨,是为了同时满足超高性能和超大容量需求。FOSS的数据存储包括2层:

(热)高性能层 

- 热volume_group

- 读缓存集群

高性能层满足要求极低延迟的高性能场景。高并发写入通过写请求聚合提高IOPS;小文件的低延迟读取,通过热数据读缓存优化。

通常,变冷的数据会迁移到大容量层。只需要高性能层的特例客户,也可以独立使用高性能层,不部署大容量层。

(冷)大容量层

- 冷volume_group

大容量层必须依赖高性能层存在。tier_migrate任务将高性能层的数据批量迁移到冷volume 。

批量迁移采用顺序大IO写入,使大尺度SSD可以得到优化使用。

3. 资源多租户  

S3服务资源多租户 

通过service_mgr配置租户独占的S3服务资源,为特定租户建立专属的s3_serv_group 。

通过service_mgr配置s3_serv_group和volume_group的映射关系。

存储资源多租户

bucket可以代表租户的分类存储空间,多租户的空间管理通过bucket的存储策略进行。

支持设置bucket的数据放置策略(对应的volume_group),比如可指定bucket放置到特定性能分类(SSD|HDD)的volume 。

4. 优秀的扩展性  

FOSS支持容量和性能的横向线性扩展,元数据的横向线性扩展,通过分布式元数据服务mds实现:

  • mds_kv集群的扩展

    mds_kv采用全局字典序range方式进行key的sharding;支持在线增加kv节点,IOPS随kv节点个数线性增长。

  • mds事务服务集群的扩展

    mds事务服务集群,采用配置订阅方式扩展;支持在线增加事务服务,IOPS随事务服务个数线性增长。

数据存储的横向线性扩展,通过开放介质存储(OpenMediaStorage-OMS)层实现:

  • 存算分离的架构下,数据存储的横向扩展简化为存储后端网的横向扩展。

  • 存储后端网按分组进行水平扩展,每个分组后端网独立组网,扩展简单。

    增加volume_group中node,即增加了分组的存储量和IOPS;当volume_group内的扩展到达上限后,可以通过新建volume_group进行扩展。

5. 绿色节能  

FOSS通过数据写入volume分配算法和分类聚合算法,实现(冷)数据层的disk节能。

 volume分配算法

数据写入分配volume时,在满足性能吞吐需求的条件下,一段时间内分配的volume使用尽量少的同一批disk。(其他disk这段时间处于节能状态,存储规模越大,节能比例越高)

 分类聚合算法

应用按时间批量读取数据的时候,因为应用写入数据按时间聚合,读关联的disk和写入时是相同的,同样只是少数的一批disk。

四、产品愿景

以全闪绿色节能信创存储的创新技术:

为客户提供自运维的私有云存储,应存尽存;

在企业存储领域促进国产SSD对进口HDD的替代;

作为智能云平台的存储底座,助力数据处理的智能化,发掘数据的真正价值。

《FOSS全闪对象存储技术白皮书》详见官网大道云行 TaoCloud - 新一代全闪软件定义存储领导者 (taocloudx.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mathematica(42)-计算N个数值的和

比如&#xff0c;我们要用Mathematica求得到下面的式子&#xff1a; 这就需要用到一个函数&#xff1a;Sum 具体地&#xff0c;Sum函数的使用形式如下&#xff1a; 因此&#xff0c;按照公式就可以得到下面的结果&#xff1a; 如果&#xff0c;我们想要将求和号也加进去&#…

广州华锐互动:3D数字孪生开发编辑器助力企业高效开发数字孪生应用

3D数字孪生开发编辑器是一种新兴的技术&#xff0c;它可以帮助企业更好地管理和维护其物联网设备。这些工具可以帮助企业实现对设备的实时监控、故障排除和优化&#xff0c;从而提高生产效率和降低成本。 数字孪生系统是一种将物理世界与数字世界相结合的技术&#xff0c;它可以…

未来公文的智能化进程

随着技术的飞速发展&#xff0c;公文——这个有着悠久历史的官方沟通方式&#xff0c;也正逐步走向智能化的未来。自动化、人工智能、区块链...这些现代科技正重塑我们的公文制度&#xff0c;让其变得更加高效、安全和智慧。 1.语义理解与自动生成 通过深度学习和NLP&#xff…

04_15页表缓存(TLB)和巨型页

前言 linux里面每个物理内存(RAM)页的一般大小都是4kb(32位就是4kb),为了使管理虚拟地址数变少 加快从虚拟地址到物理地址的映射 建议配值并使用HugePage巨型页特性 cpu和mmu和页表缓存(TLB)和cache和ram的关系 CPU看到的都是虚拟地址&#xff0c;需要经过MMU的转化&#xf…

vue3 injection报错 injection“xxx“ not found.

在封装CheckboxGroup组件的的时候&#xff0c;需要通过provide&#xff0c;代码如下&#xff1a; //父组件 <template><div class"envCheckBoxGroup"><slot></slot></div> </template> <script setup> import { provide …

使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地

本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook&#xff0c;并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件&#xff1a; jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…

大数据Flink(六十四):Flink运行时架构介绍

文章目录 Flink运行时架构介绍 一、系统架构 二、​​​​​​​​​​​​​​整体构成 三、作业管理器&#xff08;JobManager&#xff09; 四、任务管理器&#xff08;TaskManager&#xff09; Flink运行时架构介绍 我们已经对 Flink 的主要特性和部署提交有了基本的了…

AI绘画 | 一文学会Midjourney绘画,创作自己的AI作品(快速入门+参数介绍)

一、生成第一个AI图片 首先&#xff0c;生成将中文描述词翻译成英文 然后在输入端输入&#xff1a;/imagine prompt:Bravely running boy in Q version, cute head portrait 最后&#xff0c;稍等一会即可输出效果 说明&#xff1a; 下面的U1、U2、U3、U4代表的第一张、第二张…

HCIP第五节------------------------------------------ospf

一、OSPF基础 1、动态路由分类 2、距离矢量协议 运行距离矢量路由协议的路由器周期性地泛洪自己的路由表。通过路由的交互&#xff0c;每台路由器都从相邻的路由器学习到路由&#xff0c;并且加载进自己的路由表中&#xff0c;然后再通告给其他相邻路由器。 对于网络中的所有…

模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)

模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充 四、修改异常值4.1 删除4.2 替换 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况&#xff08;二分类&#xff09; 5.2 柱状图5.2.1 单特征与目标特征之间的…

《Java极简设计模式》第03章:工厂方法模式(FactoryMethod)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

【路由协议】使用按需路由协议和数据包注入的即时网络模拟传递率(PDR)、总消耗能量和节点消耗能量以及延迟研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

opencv直方图与模板匹配

import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 直方图 cv2.calcHist(images,channels,mask,histSize,ran…

『C语言』数据在内存中的存储规则

前言 小羊近期已经将C语言初阶学习内容与铁汁们分享完成&#xff0c;接下来小羊会继续追更C语言进阶相关知识&#xff0c;小伙伴们坐好板凳&#xff0c;拿起笔开始上课啦~ 一、数据类型的介绍 我们目前已经学了基本的内置类型&#xff1a; char //字符数据类型 short …

如何使用Redis实现附近商家查询

导读 在日常生活中&#xff0c;我们经常能看见查询附近商家的功能。 常见的场景有&#xff0c;比如你在点外卖的时候&#xff0c;就可能需要按照距离查询附近几百米或者几公里的商家。 本文将介绍如何使用Redis实现按照距离查询附近商户的功能&#xff0c;并以SpringBoot项目…

面试之快速学习STL- vector

1. vector底层实现机制刨析&#xff1a; 简述&#xff1a;使用三个迭代器表示的&#xff1a; &#xfffc; 这也就解释了&#xff0c;为什么 vector 容器在进行扩容后&#xff0c;与其相关的指针、引用以及迭代器可能会失效的原因。 insert 整体向后移 erase 整体向前移…

科技云报道:算力之战,英伟达再度释放AI“炸弹”

科技云报道原创。 近日&#xff0c;在计算机图形学顶会SIGGRAPH 2023现场&#xff0c;英伟达再度释放深夜“炸弹”&#xff0c;大模型专用芯片迎来升级版本。 英伟达在会上发布了新一代GH200 Grace Hopper平台&#xff0c;该平台依托于搭载全球首款搭载HBM3e处理器的新型Grac…

优于立方复杂度的 Rust 中矩阵乘法

优于立方复杂度的 Rust 中矩阵乘法 迈克克维特 跟随 发表于 更好的编程 6 分钟阅读 7月 <> 143 中途&#xff1a;三次矩阵乘法 一、说明 几年前&#xff0c;我在 C 年编写了 Strassen 矩阵乘法算法的实现&#xff0c;最近在 Rust 中重新实现了它&#xff0c;因为我继续…

16、可重入锁+设计模式

可重入锁设计模式 while判断并自旋重试获取锁setnx含自然过期时间Lua脚本官网删除锁命令但不能保证可重如 问题&#xff0c;如何兼顾锁的可重入性问题&#xff1f; 可重入锁 可重入锁又名递归锁 是指在同一个线程在外层方法获取锁的时候&#xff0c;再进入该线程的内层方法…

【JVM】对String::intern()方法深入详解(JDK7及以上)

文章目录 1、什么是intern&#xff1f;2、经典例题解释例1例2例3 1、什么是intern&#xff1f; String::intern()是一个本地方法&#xff0c;它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串&#xff0c;则返回代表池中这个字符串的String对象的引用&#…