揭秘全闪|千万级IOPS的超高性能是如何实现的?

2024-01-07 04:40

本文主要是介绍揭秘全闪|千万级IOPS的超高性能是如何实现的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、 概述

1.1. 产品简介
FASS是大道云行面向高IO密集型应用场景,完全自主研发的分布式全闪存存储系统。基于高效的分布式存储软件设计和高性能的全闪存硬件平台,FASS可将多个节点的SSD资源通过高速以太网或Infiniband网络组成一个高性能、高可用、易扩展块存储资源池。通过iSCSI、iSER、NVMeoF存储接口,可广泛应用于如下各类高IO性能要求业务场景。
在这里插入图片描述

  • 强大的性能

FASS采用主流的服务器硬件和全NVMe硬盘配置,通过软件层面先进的体系结构设计、微控制器并行流水线设计、多级元数据索引管理,实现了三节点千万级IOPS、100us级延迟的强大性能。

  • 可靠的架构

FASS采用全对称分布式架构,可实现多节点的IO均衡与叠加,结合多副本、纠删码、快照等冗余与数据备份机制,消除了存储系统的单点故障,也保证了可靠的存储服务输出。

  • 大规模扩展

FASS的分布式集群支持3-512 scale out扩展,单卷可达32PB容量。通过数据分布与元数据管理的自动负载均衡,实现存储与计算的按需扩展,满足业务动态发展的苛刻要求。
在这里插入图片描述
△FASS产品概览

1.2. 设计哲学
性能驱动
定位于下一代全闪存存储产品,FASS的核心理念即性能驱动一切。

由于标准的操作系统并非为高性能IO模式设计,其任务调度、内存管理、系统调用在高并发IO场景下非常低效,成为全闪存储性能的最大瓶颈。

FASS团队很早就意识到了这个问题,开发了独有的XPE加速引擎以取代OS的低效调度,结合高效的微控制器模型,全NVMe软硬件设计,使得在有限硬件条件下,FASS也能发挥出超高的IOPS和延时性能。

软件定义
TaoCloud始终贯彻软件定义存储的理论,通过极致优化的存储软件,搭载配置合理的标准X86硬件,可以做到三节点千万级IOPS的惊人性能。软硬件解耦可以给各类数据中心带来更好的灵活性与经济性,有利于各类高性能云基础设施的建设。

分布式体系
FASS的数据与元数据管理都采用分布式模型设计,带来了极高的可靠性,从磁盘到物理节点到网络,都可以实现有效冗余,在各类故障情况下,保障数据以及元数据的完整性与高可用。

2、 原理架构

FASS基于标准服务器硬件设计了高性能的分布式块存储体系。
在这里插入图片描述

各个节点通过高速网络连接形成存储集群,FASS软件服务将各个节点上的高速SSD介质、CPU、内存等资源抽象整合,对外输出成单一块存储资源池,提供高速块存储服务。

2.1逻辑架构
FASS可以部署在主流的Linux环境,如CentOS、Redhat、Ubuntu、SUSE等,也已适配银河麒麟、深度等国产Linux操作系统。每个物理节点都需要安装FASS的suzaku软件服务。通过对各节点存储资源的管理与整合抽象,以逻辑存储卷的方式为对上层提供iSCSI/iSER、NVMeoF块存储服务和访问接口和统一管理控制。

FASS平台管理层支持提供命令行访问控制接口和REST API,并集成到Web GUI对整个存储集群进行节点管理、用户管理 、访问管理、存储空间管理、缓存管理、快照管理、监控管理等。
在这里插入图片描述
△FASS逻辑架构

FASS通过ETCD模块实现高可用集群管理,主要用于共享配置和服务发现,从而实现在故障情况下的重新选举、自动切换等高可用特性。硬件上,FASS支持部署于X86服务器或国产CPU硬件平台,如飞腾、申威、海光等服务器平台,推荐采用全NVMe SSD硬盘配置,以发挥FASS的最佳性能。集群最低三节点起配,硬件拓扑上包含三层网络:存储网络、业务网络和管理网络。

集群所有节点通过高速网速(推荐100GbE/200GbE RoCE或Infiniband)互联,以实现节点间的协作与数据分布与转移。业务网络提供存储访问,该网络的带宽建议与存储网络带宽一致。管理网络主要负责管理监控、配置维护,采用普通千兆网络即可。
在这里插入图片描述
△FASS硬件组网参考(注:实际部署建议配置冗余网络)

3、 定位与对比

3.1传统分布式存储
传统分布式存储产品受限于底层架构的设计,很多分布式存储无法实现对NVMe、RDMA等技术的有效支持,也未能针对闪存进了有效的软件优化,因而即使采用全闪存配置,也无法发挥硬件真正的性能。

3.2全闪存阵列
全闪存阵列(AFA)仍然属于存储阵列范畴,采用控制器架构并集成存储管理软件,以scale up为主要扩展方式。

AFA虽然一定程度提高了性能,但是成本高昂、灵活性差、扩展性低。随着闪存单盘性能突破100万IOPS,控制器是最大的性能瓶颈,scale up对于闪存性能是一种极大的浪费。

3.3分布式全闪存储
12块NVMe SSD硬盘即可耗尽一颗Intel CPU的全部lane,控制器或存储节点的计算能力,成为了全闪存储的最大瓶颈,Scale out是全闪存储的必然选择。随着高速网络、RDMA技术的成熟应用,us级的外部网络的延时使得跨节点扩展已经不再是全闪存储的瓶颈。

分布式全闪存储系统在标准硬件基础上,通过优秀的软件核心对硬件性能的极致压榨与叠加,可以更好实现高性能的SDS存储系统。
在这里插入图片描述
△对比分析

4、 总结展望

全闪存不只是SSD的堆叠,还需要从根本上去解决中国用户应用全闪存的痛点。高性能、高可用、高扩展、易管理,这些存储需求无法通过传统烟囱式模式以及简单的Scale-up纵向扩展来很好地解决。从全闪阵列到分布式,从分布式到全闪,这是殊途同归的,终极目标是分布式全闪系统,兼取闪存和分布式的长板,根本上解决云计算、大数据、人工智能等应用场景下面临的存储新挑战。

5、 参考资料

FASS技术白皮书(完整版)下载
欢迎乘坐FASS磁悬浮列车,下一站全闪时代
【POC邀请】您的存储集群需要FASS一下

这篇关于揭秘全闪|千万级IOPS的超高性能是如何实现的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/578756

相关文章

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义