SeaweedFS 分布式存储

news2024/9/22 7:37:40

一、简介

SeaweedFS 是一种多功能且高效的存储系统,旨在满足现代系统管理员管理 blob、对象、文件和数据仓库存储需求的需求。无论数据集的大小如何,其架构都能保证快速访问时间,磁盘寻道时间为常数时间 (O(1))。这使其成为速度和效率至关重要的环境的绝佳选择。

SeaweedFS 分为几层,每层都满足不同的存储需求:

Blob Storage:Blob 存储是基础,包括主服务器、卷服务器和云层,可实现无限可扩展性。
File Storage: 以 Blob 存储为基础,通过添加文件服务器来管理类似文件系统的操作。
Object Storage:使用与 S3 兼容的服务器扩展了文件存储,使其与现有 S3 工作流集成变得轻而易举。
Data Warehouse:数据仓库功能集成到文件存储中,通过与 Hadoop 兼容的库提供与 Hadoop、Spark 和 Flink 等大数据框架的兼容性。
FUSE Mount: 允许将文件存储直接安装在客户端的用户空间中,支持 FUSE 安装和 Kubernetes 持久卷等常见用例。

SeaweedFS 以其高性能、可扩展性和灵活性而脱颖而出。它的特点是:

  • 快速的键到文件映射,磁盘寻道时间最短。
  • 可定制的分层存储,可根据活动智能地放置数据,将不太活跃的数据移动到更便宜的云存储。
  • 弹性可扩展性,通过添加卷服务器轻松扩展容量。
  • 一个强大、高性能、与 S3 兼容的对象存储,可以作为 HDFS 的内部替代方案。

该系统专为高可用性和耐用性而设计,具有以下特点:

  • 无单点故障 (SPOF),支持主动-主动异步复制和擦除编码以保护数据。
  • 支持文件校验和以确保数据完整性。
  • 机架和数据中心感知复制以提高可靠性。
  • 灵活的元数据管理,与各种流行的数据库和存储系统兼容。

对于系统管理员来说,SeaweedFS 大大简化了操作。增加容量就像集成更多卷服务器一样简单。该系统的架构允许轻松进行数据迁移和备份,支持各种元数据后端存储。这使得 SeaweedFS 成为管理多样化和苛刻的存储环境的适应性强且可靠的选择。

说明

Seaweedfs 如何存储文件

在 SeaweedFS 集群中,文件存储在位于卷服务器中的卷中,而卷只是一个具有预定义大小的大型空文件,用于存储文件。例如,10 GB 卷可以存储 10,000 个平均大小为 1 MB 的文件。

SeaweedFS 试图解决的问题

文件系统 Inode 磁盘大小限制: 因为每个操作系统中的每个文件都必须有元数据(在 Linux 中也称为 inode),其中包括文件名、路径、权限、创建日期、修改日期以及磁盘中的位置。其中一些存储的元数据至关重要,但其他元数据则浪费磁盘空间。在 XFS 或 EXT4 文件系统中,如果启用CRC ,则默认 inode 大小为 512 字节,这意味着每个文件大小将是文件本身的大小加上 512 字节 inode 大小,这包括空文件。例如,存储 100 万个小文件仅索引节点就需要 512 MB 的额外存储空间。但是,Seaweedfs 通过将多个文件存储在一个较大的文件(卷)中解决了这个问题。此外,在seaweedfs配置中,默认卷大小为30 GB,这意味着所有所需的元数据仅为512字节加上每个文件的16字节(16字节用于卷中的文件元数据,如文件偏移位置和大小)存储在体积。因此,存储100万个小文件只需花费512字节+(100万*16字节),大约等于16MB。对于 Facebook 存储超过 2600 亿张上传图像的情况来说,这种方法很有帮助。

从磁盘读取文件所需的磁盘操作: 在包括 XFS 和 EXT4 在内的典型文件系统中,从磁盘读取单个文件需要 3 次或更多磁盘读取操作,一次用于文件路径到 inode 编号的映射,一次用于 inode 映射从磁盘检索到内存,以及从磁盘检索文件的一次操作。Seaweedfs 可以通过将文件的元数据存储在内存中来克服这个问题,因此只对磁盘进行一次读取操作,因为内存访问时间以纳秒为单位,而 HDD 硬盘驱动器以毫秒为单位。

Seaweedfs 集群组件

典型的 Seaweedfs 集群由以下组件组成:

主服务: 在其他分布式文件系统中,主服务器管理存储在存储服务器(卷服务器)中的文件,但在 SeaweedFS 中,主服务器仅管理存储在卷服务器中的卷,而卷服务器将管理存储在卷中的文件。这意味着主服务器将仅存储有关卷的元数据(例如卷大小、卷存储在哪个卷服务器中等)。但是,存储实际文件元数据是卷服务器的职责,而不是主服务器的职责。此外,主服务器还负责选择哪个卷服务器将用于存储新文件以及我们可以从哪个卷服务器访问存储的文件。此外,一旦卷达到最大大小,主服务器将负责将卷转换为只读。

卷服务: 卷服务器存储一堆卷,每个卷大小为 30GB(可配置)。卷服务负责在卷中有效存储许多对象(文件和文件块)。此外,将每个文件元数据(文件名、大小、卷上的偏移位置等)存储在磁盘上并将它们缓存在内存中,以提供对它们的快速访问并提供 O(1) 磁盘读取操作。当主节点被选为集群中的领导者时,所有卷服务器都会将每个存储卷的元数据发送给新当选的主节点。

Filer 服务: 与主服务器和卷服务器交互以上传和下载文件可能是一项繁琐的任务,因此 Seaweedfs 团队创建了 Filer 服务来提供以下功能:

  • 连接到主服务器以获取最新的卷位置,并在文件写入期间请求卷服务器 IP、卷 ID 和文件 ID。
  • 处理文件和目录操作,例如创建、删除、读取、写入和重命名。
  • 跟踪文件和目录的元数据,例如文件 ID、文件大小、上次修改时间和访问时间等……
  • 与主服务器通信以跟踪集群状态。
  • 记录和审核文件和目录操作。

此外,它还提供了以不同方式访问数据的入口点,其中一些方式是:

  • 用于上传和下载文件的 HTTP 入口点。
  • 通过 FUSE 挂载点直接将文件读写为本地目录。
  • S3 兼容 API。
  • 访问来自 Hadoop/Spark/Flink/等的文件。
  • 网络DAV。
  • Kubernetes CSI 驱动程序。

Filer Store Service: 这是一个重要组件,Filer 服务使用它来存储文件元数据(如卷 ID、文件 ID 等)。此外,文件管理器存储还用于扩展文件管理器服务。有两种类型的文件管理器存储

  • 共享:所有文件管理器都将与共享文件管理器存储(如 MariaDB、Redis、Cassandra 等)通信。因此,此选项将减轻文件管理器服务器的可扩展性,因为所有文件管理器将使用相同的共享数据库。
  • 嵌入式:每个文件管理器都将使用 LevelDB 在本地存储元数据,LevelDB 是 Google 设计的“磁盘中带有内存缓存的键值存储”。在嵌入式文件管理器存储中,所有元数据更改都会传播到所有其他文件管理器(如果存在)。这将确保所有文件管理器都更新为最新的元数据更改。

S3服务: 这是一项可选服务,提供以AWS风格设计的S3存储桶。它可以单独启动或与文件管理器同时启动。
下图将显示集群组件和连接

注意:客户端和卷服务器之间的连接是可选的。但是,当客户端使用 Fuse 挂载来挂载集群时,可以使用它。

SeaweedFS 技术架构

系统由 3 部分组成:

  • Volume Server,用于底层存储文件
  • Master Server,用于管理集群
  • Filer,一个向上提供更多特性的可选组件

SeaweedFS 系统架构
在这里插入图片描述
在这里插入图片描述

Volume Server 与 Master Server 一并构成文件存储服务:

  • Volume Server 专注于数据的写入与读取
  • Master Server 负责管理集群与 Volumes

在读写数据时,SeaweedFS 的实现与 Haystack 相似,用户创建的文件系统(Volume)实际上是一个大磁盘文件,也就是下图的 Superblock。在此 Volume 中,用户写入的所有文件都会被合并到该大磁盘文件中,借用 Haystack 的术语,每一个文件都是“一根针”,needle。

SeaweedFS Superblock

SeaweedFS 中数据写入和读取流程:

  1. 在开始写入数据之前,客户端向 Master Server 发起写入申请。
  2. SeaweedFS 根据当前的数据量返回一个 File ID,这个 ID 由 Volume ID 与该 Volume中可供写入位置的偏移量计算而来。在写入的过程中,一并被写入的还有基础的元数据信息(文件长度与 Chunk 等信息)。
  3. 当写入完成之后,调用者需要在一个外部系统(例如 MySQL)中对该文件与返回的 File ID 进行关联保存。
  4. 在读取数据时,由于 File ID 已经包含了计算文件位置(偏移)的所有信息,因此可以高效地将文件的内容读取出来。

在上述的底层存储服务之上,SeaweedFS 提供了一个名为 Filer 的组件,他对接 Volume Server 与 Master Server,对外提供丰富的功能与特性,如 POSIX 支持、WebDAV、S3 API。与 JuiceFS 相同,Filer 也需要对接一个外部数据库以保存元数据信息。

ref:
https://github.com/seaweedfs/seaweedfs
https://github.com/seaweedfs/seaweedfs/wiki
https://juejin.cn/post/7346079025426808843
https://juicefs.com/docs/zh/community/comparison/juicefs_vs_seaweedfs/

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

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

相关文章

实验设计不好搞?ChatGPT少不了!【附示例】

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 实验设计是确保研究科学性和可靠性的关键环节。然而,许多同学在进行毕业论文实验设计时,常常面临选题、变量确定、实验流程规划等诸多挑战。ChatGPT能够提供全方…

联想小新 Pro 16:AI启航版,定义笔记本性能新高度

联想小新 Pro 16 AI元启版笔记本以其搭载的英特尔酷睿Ultra 9-185H处理器,16核心22线程的豪华配置,成为市场上的性能巨擘。搭配32GB LPDDR5x RAM和1TB PCIe 4.0 SSD,这款笔记本在处理高负载任务时展现出无与伦比的流畅性,无论是图…

基于大数据分析景区消费行为影响因素研究【消费等级预测、携程,去哪网数据抓取】

有需要本项目的可以私信博主,讲解、部署 目录 摘要.... 1 Abstract 2 1引言... 3 1.1 研究背景... 3 1.2 国内外研究现状... 4 1.3 研究目的... 5 1.4 研究意义... 6 2 关键技术理论介绍... 7 2.1 网络爬虫... 7 2.2 Python介绍... 8 2.3 随机森林... 9…

three.js渲染中文的3D字体

下载中文字体 引入下面的代码 点击下载 提取码: lywa <!DOCTYPE html> <html lang"en"><head><title>three.js webgl - modifier - tessellation</title><meta charset"utf-8"><meta name"viewport" c…

哪个牌子的电容笔好用?2024开学季深度测评五款高人气平替电容笔

​随着数字化时代的到来&#xff0c;众多工作和学习活动都转向了线上平台。这一趋势推动了电容笔市场的迅速扩张&#xff0c;吸引了众多新品牌加入竞争。面对市场上琳琅满目的选择&#xff0c;消费者在挑选可能会感到更加困难&#xff0c;不知道到底哪个牌子的电容笔好用。作为…

FL Studio24.1.1.4239无限试用版安装包下载!快来尝鲜吧!

在音乐制作领域&#xff0c;FL Studio一直以其强大的功能和用户友好的界面受到广大音乐制作人的喜爱。最近&#xff0c;它的版本更新到了24.1.1.4239&#xff0c;这次更新带来了许多令人兴奋的新功能和改进&#xff0c;让音乐创作变得更加轻松和有趣。 FL Studio21汉化版下载网…

专利申请下来后每年需要缴纳年费吗

专利申请下来后每年需要缴纳年费吗&#xff1f; 我们首先需要明确的是&#xff0c;根据我国《中华人民共和国专利法》及相关法规&#xff0c;专利权人在获得专利权后&#xff0c;确实需要按照规定缴纳年费以维持其专利权的有效性。 专利年费的法律依据 《中华人民共和国专利法》…

stm32_WS2812B

1结构 实物 内部结构 2引脚与接线 电压特性 引脚意思 脚号符号管脚名功能2DO&#xff08;DOUT&#xff09;数据输出控制信号输出3GND地接地4DI&#xff08;DIN&#xff09;数据输入控制信号输入1VDD电源供电管脚 多个如何接线 3数据传输方法 是如何控制多个的 在硬件连接…

【Qt笔记】Qt中各个布局详解

目录 引言 一、QHBoxLayout&#xff08;水平布局&#xff09; 1.1 基础特性 1.2 代码示例 1.3 效果展示 二、QVBoxLayout&#xff08;垂直布局&#xff09; 2.1 基础特性 2.2 代码示例 2.3 效果展示 三、QGridLayout&#xff08;网格布局&#xff09; 3.1 基础特性…

NC 判断t1树中是否有与t2树完全相同的子树

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给定彼此独立…

深度学习中的一些函数

目录 nn.Embeddingtriu 函数copy.deepcopy nn.Embedding #参数1&#xff1a;词表大小&#xff08;即词表单词个数&#xff09;即只要输入的值在0——n-1之间就可&#xff0c;对于序列长度无影响。 #参数2&#xff1a;词映射的维度n&#xff08;即将每个词映射成一个二维1*n&am…

文字短信怎么利用Python接口发送短信

在信息爆炸的今天&#xff0c;沟通成为了我们日常生活和工作中不可或缺的一部分。无论是企业运营、市场营销&#xff0c;还是个人交流、节日祝福&#xff0c;如何快速、准确地传递信息成为了许多人关注的焦点。群发短信&#xff0c;作为一种高效、经济的沟通方式&#xff0c;正…

一个prolog最简单推理示例

假设现在知道一些年轻人&#xff0c;谁喜欢谁&#xff0c;定义为love(x, y)&#xff1b; 定义了一些这样的关系&#xff1b; 如果x喜欢y&#xff0c;y也喜欢x&#xff0c;则定义他们是一对情侣&#xff1b; 规则表示为&#xff1a; lovers(X,Y) :- love(X,Y), love(Y,X). 输入…

Python | Leetcode Python题解之第376题摆动序列

题目&#xff1a; 题解&#xff1a; class Solution:def wiggleMaxLength(self, nums: List[int]) -> int:n len(nums)if n < 2:return nprevdiff nums[1] - nums[0]ret (2 if prevdiff ! 0 else 1)for i in range(2, n):diff nums[i] - nums[i - 1]if (diff > 0…

Java 5.1 - Spring

Spring 基础 什么是 Spring 框架&#xff1f; 开源的 轻量级的 Java 开发框架&#xff0c;旨在提高开发效率和系统可维护性。 一般我们说 Spring 都是指 Spring FrameWork&#xff0c;它是很多模块的集合&#xff0c;使用这些模块可以很方便地帮助我们进行 Java 开发。例如 …

监控电脑屏幕的软件叫什么?8款好用的监控电脑屏幕的软件推荐!

远程办公和数字化管理的风潮席卷而来&#xff0c;电脑屏幕监控软件已经悄然成为了企业和家庭不可或缺的得力助手。 这些神奇的小工具&#xff0c;不仅能让老板们远程监督员工的工作状态&#xff0c;确保团队高效运转&#xff0c;还能守护企业的信息安全。 接下来&#xff0c;…

JavaEE-传输层协议

目录 一、UDP协议 二、TCP协议 TCP报文结构 TCP十大核心机制 确认应答 超时重传 接收缓冲区 连接管理 建立连接 断开连接 一、UDP协议 学习一个网络协议首先要学习报文结构。 对于UDP协议来说&#xff0c;应用层数据到达UDP后就会给应用层数据加上UDP报头。 &#…

STM32G474的HAL_ADC_Start_DMA()传递指针问题

1、HAL_ADC_Start_DMA()传递指针问题 函数传递参数中若用到指针&#xff0c;则要注意指针的类型和源数据数据类型要保持一致&#xff0c;否则&#xff0c;会导致内存溢出。 STM32G474的ADC值是12位&#xff0c;HAL库用的是32位指针传输数据&#xff0c;因此&#xff0c;在定义保…

深度学习入门-09

基于小土堆学习 1、卷积层 卷积操作涉及到一个称为“卷积核”或“滤波器”的小窗口&#xff0c;在输入数据上滑动&#xff0c;并对每个位置上的数据进行加权求和&#xff0c;可能还会加上一个偏置项。这个加权求和的结果就构成了输出特征图&#xff08;feature map&#xff0…

SS-31;Elamipretide;伊拉米肽;线粒体靶向抗氧化剂SS-31肽;CAS:736992-21-5

【SS-31 简介】 SS-31肽是一种心磷脂过氧化物酶抑制剂和线粒体靶向肽。 它可以改善左心室和线粒体功能。SS-31肽可减轻 人小梁网状细胞中的线粒体功能障碍和氧化损伤。它可以防止iHTM和GTM(3)细胞受到H2O2诱导的持续氧化应激。慢性心力衰竭和线粒体肌病的I期临床试验正在进行中…