分布式文件系统选型参考
SeaweedFS是 Minio
分布式文件系统有:GFS、HDFS、Ceph、Lustre、MogileFS、MooseFS、FastDFS、TFS、GridFS
适合做通用文件系统的有:Ceph,Lustre,MooseFS,GlusterFS;
适合做小文件存储的文件系统有:Ceph,MooseFS,MogileFS,FastDFS,TFS;
适合做大文件存储的文件系统有:HDFS,Ceph,Lustre,GlusterFS,GridFS;
轻量级文件系统有:MooseFS,FastDFS;
简单易用,用户数量活跃的文件系统有:MooseFS,MogileFS,FastDFS,GlusterFS;
支持FUSE挂载的文件系统有:HDFS,Ceph,Lustre,MooseFS,GlusterFS。
JuiceFS 是一个分布式文件系统
JuiceFS:云原生时代的分布式文件系统
HDFS 并不适合存储小文件
对象存储
对象存储是能够承载百亿规模文件的,
缺少原生目录支持、缺少完整 POSIX 语义支持、元数据性能弱这三方面的问题让对象存储并不适合海量小文件训练场景。
IDC 机房里设置一个缓存集群,起到缓存数据加速训练的效果,相比每次从对象存储访问数据,既能节省专线带宽,还能节省对象存储 API 调用费用
对象存储解决方案Minio
存储协议
POSIX、HDFS、S3 三大主流访问协议
浪潮AS13000-H并行存储系统 是专门针对高性能计算开发和优化的并行文件存储系统。它基于BeeGFS文件系统商业版本开发
网络硬件
DAS (Direct Attached Storage) ,即“直连存储”
SAN(Storage Attached Network),就是存储区域网络
NAS为Network Attached Storage
跨平台数据同步工具
rclone
GoodSync 是一款老牌的数据同步工具
Syncthing
Krita/Xmind/Keepass/WPS/Obsdian/RIME/Joplin + Syncthing 就实现了安卓设备、桌面设备的无缝协同
###个人备份
电脑本机一份,NAS一份,云盘一份
1、冷数据和热数据
2、重要数据和普通数据
3、多媒体数据和其它
备份工具
同步的时候,就帮你校验的工具,这里推荐:
1、rsync
2、freefilesync
3、syncthing
迁移和备份方案
传输方式--pull push
cp 在本机复制文件,
scp可以跨机器复制文件是加密传输
-r: 递归传输整个目录 (如果传输的是文件则不需要整个参数) -v: 传输详情 (调试可以使用)
-l: limit限制传输带宽 kb/s,(-l 1)表示限制每秒1kb的传输效率
rsync 默认是只拷贝有变动的文件,不是加密传输-增量备份-rsync 全称remote synchronize,即"远程同步"
传输的双方都必须安装 rsync
1、使用scp命令实现minio数据的迁移
使用场景:网络通畅,不同服务器间迁移、支持分布式存储(但需要考虑分布式存储节点的配置,存在局限性)
特性 :基于Linux本身Secure Copy实现;安全,便捷,简单易用
2、使用Rclone实现数据的迁移
使用场景:网络通畅,不同服务器间迁移、云存储系统迁移、支持分布式存储
特性 :使用需要安装rclone程序;安全,便捷;可维护性高
rclone 是一个开源的命令行程序,用来同步文件和目录进或者出云存储系统。它旨在成为"云存储的rsync"
###不同操作系统
移动端: Android、iOS、Harmony
PC端 : Windows、Mac、Linux上同步使用
FreeFileSync SyncToy SyncBackPro(仅限win)
Time Machine(时光机器),它是 Mac OS X 内置的备份工具
###商业
百度网盘 腾讯微云 天翼云盘 坚果云 115
nextcloud iCloud,googleDrive,yandex,mega,onedrive Dropbox
###
版本控制系统–Git
word生成的docx是二进制文件,只能监听到改动却无法对改动进行恢复对比
md文件是普通文本文件
文件共享
NFS和Samba,
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,
它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务
调度系统
cron 定时任务crond服务
dolphinschedule
监控系统和文件对比工具
inotifywait
Beyond Compare
UltraCompare是一款文件内容比较工具
DiffPDF
叮当文件比较器(DD-compare)
winMerge Diffuse Altova DiffDog AptDiff Code Compare
协同工具
BoardMix博思白板
Time Doctor是一款时间跟踪软件
Evernote印象笔记
Miro 是一个在线白板工具
主动协同--触发协同
存储等处理工作
块存储(EBS),文件存储(NAS,CPFS,DBFS)和对象存储(OSS)三种
algolia algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库搜索服务,并且其服务能以 API 的形式方便地布局到网页、客户端、APP 等多种场景
代码生成
Codex(OpenAI)-OpenAI大规模代码预训练生成模型 Codex为底座的 AI辅助编程工具 Github Copilot
在解答 OJ 题(Online Judge,在线编程练习系统)
PanGu-Coder- Huawei基于PanGu-Alpha研制 PanGu-Coder智能化编程助手Snap
AlphaCode(Google Deep Mind)、
CodeGen(Saleforce)、
INCoder(Meta)
CodeGeeX 清华大学知识工程实验室(KEG) https://github.com/THUDM/CodeGeeX
自动生成的代码能良好地工作有个大前提——
能精确且具体地描述目标函数要实现的功能
难度在于协作和沟通
代码中本身包含有很多重复的片段或者逻辑,这类工具肯定是可以加快你完成代码的速度
数据工程
数据采集: 数据采集工作,包括文本、图片、视频等多种类型数据,持续更新和扩大数据集规模
数据存储:对数据进行清洗、过滤、存储等处理工作
数据预处理:
数据管理:
数据分析:需求整理和分析 数据监测和分析
https://github.com/Jackpopc/CS-Books-Store
可视化
零编程类产品: SovitChart 专业图表类:数据地图 金融图表
软件类 : Tableau
开发工具类 Echarts Highcharts D3.js Plotly
ECharts,一个使用 JavaScript 实现的开源可视化库
标准类:WebGL和OpenGL
WebGL缩写为Web Graphics Library。它主要用于渲染二维图形和交互式三维图形。它是可以与HTML5一起使用的Javascript API
OpenGL被称为Open Graphics Library。它被称为跨语言和平台应用程序编程接口,用于渲染二维和三维矢量图形
语言开发:
python
R ggplot2 rCharts recharts plotly包。它是一个基于浏览器的交互式图表库,它建立在开源的JavaScript图表库plotly.js之上
数据和特征决定了效果上限,模型和算法决定了逼近这个上限的程度
https://admin.sovitjs.com/ 数维图
客观世界与存储
行为包括数据访问特征和数据访问模式。
完整读取和部分读取 访问规律
写入模式,包括一次性写入、追加写入、随机写入。
读取模式,包括一次性完整的读取,也包括顺序读取、流式读取、随机读取等。
复合模式,比如说批量读写、原子读写和事务性读写等。I/O Size 是连续的
分布式环境带来挑战 :不可靠的网络,第二个是不可靠的时钟
资源带来的挑战: 资源管理和存储介质的局限
故障处理和数据修复
存储设备
SSD固态硬盘技术
HDD机械硬盘
全闪存储(全闪阵列AFA和全闪SDS)
相关技术:存储颗粒芯片、主控芯片到主控软件
存储介质
磁介质(硬盘,磁带),半导体(内存,固态硬盘,闪存卡等),光介质(光盘
常见的外存设备包括硬盘,固态硬盘
固态硬盘 (SDD, Solid-state Drive/Solid-state Disk) 固态硬盘长期不通电会损失数据
物理接口(SATA, PCIE等)所限制。
磁盘格式化
磁盘有两种分区方式:MBR格式与GPT格式
linux 系统目录结构
windows:以多根的方式组织文件,系统目录与磁盘是强对应的
Linux:以单根的方式组织文件
硬件设备
dev/loop俗称伪设备、使文件达到和块设备一样被访问 用一个分区的时候如果不想从磁盘中再进行分区,这个时候就可以通过/dev/loop来进行管理操作
但是这种伪设备只能像访问普通文件
文件系统指文件存在的物理空间
支持多种文件系统-文件系统类型
ext4
devtmpfs 文件系统(一个由内核填充的自动化设备节点)
tmpfs (驻留在内存和/或交换分区中的临时文件系统)—Linux的一种虚拟内存文件系统
squashfs(只读压缩文件系统的文件系统,用于快照包)
proc 文件系统,用于存储正在运行的进程的信息
overlay 一种堆叠文件系统,它依赖并建立在其它的文件系统之上
文件系统包含两个文件系统,一个 upper 文件系统和一个 lower 文件系统,是一种新型的联合文件系统
Linux系统核心可以支持十多种文件系统类型:Minix 是Linux支持的第一个文件系统
JFS、 ReiserFS、ext、ext2、ext3、ISO9660、XFS、
Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、
NFS、 SMB、SysV、PROC等
日志式文件系统 日志的字节级文件系统
传统的Unix文件系统是按磁盘块来进行空间分配的,对于目录和文件等的查找使用了简单的线性查找
Linux也可以支持基于Windows和Netware的文件系统,例如UMSDOS、 MSDOS、VFAT、HPFS、SMB和NCPFS等
网络文件系统作为远程文件访问协议的客户端,提供服务器上文件的存取服务
Windows 自带的网络协议,macOS 自带了 SMB 支持, Linux 可使用包 cifs-utils 和 samba 来使用该协议
Windows
WSL2(Windows Subsystem for Linux 2) 就使用了9P(Plan 9 File System Protocol) 轻量级的远程文件系统协议
与 Linux 文件系统交互。 9P 通常使用 TCP 端口 564
磁盘文件系统 (Disk file system)
exFAT 是在 FAT32 的基础上,专门为闪存设备设计的文件系统,通常用于移动存储,移动设备或嵌入式系统
WebDAV(Web Distributed Authoring and Versioning) 是 HTTP 的扩展,允许客户端执行远程文件编辑操作。
它在标准的 HTTP 方法(GET, POST, PUT, DELETE 等)外,添加了新的方法:COPY, LOCK, UNLOCK, MKCOL, MOVE, PROPFIND, PROPPATCH。
主流 HTTP 服务器(Nginx, Apache, IIS 等)都有内置或第三方的 WebDAV 支持,
部分私人云软件(ownCloud, Nextcloud等)也支持 WebDAV 访问方式。
Windows 集成了 WebDAV 客户端。WebDAV 和 HTTP/HTTPS 使用相同的端口,默认为 80 和 443
开源存储软件
文件存储
SDS(Software Defined Storage)即软件定义存储
GFS,FastDFS,Ceph Ceph、Gluster、Beegfs
BeeGFS,开源高性能分布式文件系统-HPC高性能计算场景(尤其是中小型)
文件存储(POSIX/NFS/CIFS)、对象存储(S3)和块存储(iSCSI/iSER/NVMeoF)
实现 s3的挂载
s3fs、goofys、juicefs
S3FS 尽管名为文件系统,但实际上更接近于用文件系统视图管理 S3 bucket 中对象的一种方
S3FS 是一个 C++ 开发的开源工具,可以将 S3 对象存储通过 FUSE 挂载到本地,像本地磁盘一样进行读写访问
goofys 使用fuse用户空间文件系统实现, 可以将 S3 存储 bucket 挂载为文件系统, 使用go语言编写
JuiceFS 是分布式文件系统 -JuiceFS 主要实现一个 libjfs 库和 FUSE 客户端程序。Go语言开发
JuiceFS 能通过 FUSE 将对象存储 Bucket 挂载到本地并以 POSIX 接口使用
Go 1.15+ JDK 8+ Maven 3.3+ Git make GCC 5.4+
背景
fuse 是一个用户态的文件系统, 实现了 VFS 接口, 用于将 POSIX 的文件系统调用转发给用户态的程序,
FUSE 的配置文件,通常是 /etc/fuse.conf
虚拟文件系统-Juicefs
提供完备的 POSIX 兼容性 HDFS 兼容:完整兼容 HDFS API,S3 兼容:提供 S3 网关 实现 S3 协议兼容的访问接口
JuiceFS 客户端 数据存储 元数据引擎
JuiceFS 客户端:协调对象存储和元数据存储引擎,以及 POSIX、Hadoop、Kubernetes CSI Driver、S3 Gateway 等文件系统接口的实现;
数据存储:存储数据本身,支持本地磁盘、公有云或私有云对象存储、HDFS 等介质;
元数据引擎:存储数据对应的元数据(metadata)包含文件名、文件大小、权限组、创建修改时间和目录结构,支持 Redis、MySQL、TiKV 等多种引擎;
源码解读
JuiceFS,文件最终会被拆分成 Chunks、Slices 和 Blocks 存储在对象存储-
存储桶中只有一个 chunks 目录和一堆数字编号的目录和文件- blocks 的命名规则定义,也就是最终存储在对象存储系统中的对象key名称
整个JuiceFS文件系统实现主要拆分为VFS抽象实现和相关的config配置管理两大部分
数据处理相关的DataReader和DataWriter两个抽象接口
数据读写操作都要和本地缓存进行交互(Chunk->Slice->block(page)三个层级进行管理
缓存目前主要实现了基于本地文件系统diskStore和基于内存缓存cacheStore(堆空间)两种类型
数据写入和读取最终都是由对应的缓存模块同步到远程的ObjectSotrage。
JuiceFS 会将文件分块存储到底层的对象存储中,不能直接使用底层对象存储的接口和界面来直接访问文件,S3 网关提供了类似底层对象存储的访问能力
format是使用juicefs对接具体文件业务前的初始化阶段,其包括初始化数据和元数据引擎,可以根据format参数进行适配
juicefs format --storage minio
/sbin/mount.juicefs
JuiceFS 的 sync 子命令是功能完整的数据同步实用工具
juicefs sync [command options] SRC DST
# 挂载 JuiceFS
juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
JuiceFS bench 命令可以帮助你快速完成单机性能测试
S3对象存储
MinIO,一款极简风格的开源高性能分布式对象存储系统
MinIO 提供高性能、与S3 兼容的对象存储系统,让你自己能够构建自己的云储存服务
交互方式
MinIO 控制台
图形用户界面(GUI),命令行界面(CLI)和应用程序编程接口(API)
MinIO-SDK
MinIO 客户端 mc 命令行工具提供了一种现代的替代 UNIX 命令-将 mc 命令行工具安装到主机上
mc admin info myminio
mc alias
数据中心
RDMA的核心思想就是远程直接内存访问
网卡硬件收发包并进行协议栈封装和解析,然后将数据存放到指定内存地址,而不需要CPU干预
协议栈卸载到硬件(协议栈硬件offload)
DPDK是网络层,硬件终端->放弃中断流程
DPDK是用户层通过设备映射获取数据包->进入用户层协议栈->逻辑层->业务层;
平台:①海量数据 -> ②数据流转 -> ③资源调度 -> ④计算加速
数据湖存储不能满足训练时的性能要求,所以训练数据需要转移到一个速度更快的加速层中
shuffle、读 batch、checkpoint
硬件方面,我们可以在组网的时候让计算节点和存储节点在物理上靠得更近
软件方面,可以做的一点是让需要访问的数据能够尽可能的搬到计算节点本地,或者和计算节点比较近的地方。这就是缓存的思路
将数据缓存到计算节点或者距离计算节点比较近的节点
并行文件系统-实现私有的客户端协议- Lustre、BeeGFS、GPFS,和百度智能云 PFS
NAS--文件系统
并行文件系统和缓存两大类软件解决方案
缓存解决方案分为两大类。
一类是 Alluxio 这类相对比较纯粹的缓存系统,不改变数据的格式,忠实地做一个数据的搬运工
一类是 JuiceFS,这类系统在对象存储之上重新定义了一层数据结构,数据只能通过系统本身访问
监控是非常重要的,系统一定要为监控提供便利性-监控后面对应的是报警,报警一定要精准有效
关注一些潜在的未知问题
一个趋势,即研发和运维等角色,其边界是在逐步模糊的
s3协议客户端
mc是minio实现的客户端
s3cmd s3cmd 也是一个 S3 客户端工具,命令行式,python 语言开发的
s3curl 是 perl 写的逻辑脚本, 本质上,就是帮你构造一个合法的 S3 请求,通过 curl 工具发出去
CloudBerry
s3 brower
传统NAS向对象存储迁移及方案
迁移-上传
对象存储神器-rclone--rclone是一个golang写的开源远程数据同步工具
rclone -后端支持文件系统以及多种类型的对象存储产品,是一个跨平台的数据同步工具,
支持sync数据同步等功能实现差异数据的跨存储后台同步
linux上基本上操作完全相同。windows上安装更加简单
自动同步到NAS,以NAS为跳板可以自动同步到云盘
rsync
freefilesync 不用搭建服务,直接同步,任何盘,无论nas还是什么,只要能挂载到电脑它都能同步,能挂载的工具那就多了如rclone等。
绿色的FreeFileSync和红色的RealTimeSync
而syncthing需要搭建服务,适合nas,相比于freefilesync有点门槛
s3cmd
s3cmd、AWS CLI、MinIO Client(mc)等工具管理 JuiceFS 上存储的文件
S3 网关,这是一个通过 MinIO S3 网关实现的功能。它为 JuiceFS 中的文件提供跟 S3 兼容的 RESTful API
很多涉及文件编辑和同步的工具、macOS Finder 以及一些 Linux 发行版的文件管理器都内置了 WebDAV 客户端支持
Rclone多种文件传输协议,支持SFTP,HTTP,WebDAV,FTP和DLNA。Rclone是一个成熟的开源软件,最初受rsync的启发并采用Golang编写
参考
智慧物流 https://blog.csdn.net/weixin_47134119/article/details/120340231
minio存储类型 归档管理页面_软件定义存储,看这一篇就够了 https://blog.csdn.net/wade1010/article/details/128978157
s3fs、goofys、juicefs对比 https://blog.csdn.net/wade1010/article/details/128978028
https://www.infoq.cn/video/TIyuf3Xc9F7UjYa32UoY
AI 应用的全流程存储加速方案技术解析和实践分享 https://zhuanlan.zhihu.com/p/574453048
https://zhuanlan.zhihu.com/p/587758798
参考
AICodeGeneration https://github.com/llq20133100095/AICodeGeneration