自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)存储技术专家成长路线

数字化时代的到来带来了大规模数据的产生,各行各业都面临着数据爆炸的挑战。 随着云计算、物联网、人工智能等新兴技术的发展,对存储技术的需求也越来越多样化。不同应用场景对存储的容量、性能、可靠性和成本等方面都有不同的要求。具备存储技术知识和技能的人才更具有竞争力。

在这里插入图片描述

存储技术专家成长路线

技术点主要运用在存储库架构设计、企业级存储系统、分布式存储系统、云存储系统、分布式数据库、高性能存储引擎、文件系统等领域。

1.接口驱动层

在存储开发中,接口驱动层是指用于访问和操作底层存储系统的软件层。它提供了标准化的接口规范,使应用程序能够对存储设备进行读取、写入、管理和配置等操作。

  • NVMe(Non-Volatile Memory Express 是一种高性能、低延迟的存储接口协议,专门为固态硬盘(SSD)设计而开发的。)
  • SATA(Serial Advanced Technology Attachment 是一种串行的计算机总线接口,广泛应用于存储设备、光驱、显卡等各种计算机硬件中。在存储开发中的作用是提供基本的存储接口、提供高带宽传输、兼容性强和价格低廉。)
  • SCSi(Small Computer System Interface 是一种用于计算机和外部设备间进行数据传输的接口标准。提供高性能数据传输,支持多设备连接,提供高可靠性和冗余性,并具有高度灵活性。)
  • RDMA(Remote Direct Memory Access 是一种数据传输机制,允许两个计算机在不使用CPU的情况下直接从彼此的内存中读取和写入数据。在存储开发中的作用是降低延迟、提高吞吐量,提升存储性能,增强可靠性和数据完整性,并简化存储网络架构。)

2.内核层

内核层通常指的是存储软件的核心组成部分,即负责实现存储系统的基本功能和服务的程序模块。内核层通常包含多个子模块,例如文件系统、卷管理、快照、克隆、数据保护和恢复等,这些子模块共同构成了存储系统的核心。

  • ext4(第四扩展文件系统,是Linux操作系统中常用的一种文件系统。学习ext4文件系统可以帮助存储开发人员更好地理解和应用文件系统相关的技术和原理,从而提升存储系统的性能、可靠性和扩展性。)
  • xfs(XFS是一种高性能的文件系统,学习XFS可以帮助理解和应用高性能、大规模数据管理、可靠性和扩展性等方面的知识)
  • btrfs(Btrfs是一种先进的Linux文件系统,它的全称是B-tree file system。Btrfs采用了许多先进的技术,如快照、校验和、多设备支持等,可以提供出色的性能、可靠性和灵活性。学习Btrfs可以帮助掌握先进的存储技术、理解大规模数据管理、实现快照和备份、保护数据完整性等方面的知识。这些都是构建高效、可靠的存储系统所必需的技能和知识。)
  • procfs(procfs是一个虚拟的文件系统,用于提供有关系统和进程状态的动态信息。学习procfs可以更好地理解和管理存储系统。)
  • tracefs(tracefs是一个用于跟踪和调试内核的文件系统。它提供了一种方便的机制来跟踪和调试内核函数的执行流程和性能数据,可以帮助存储开发人员解决内核相关的问题、优化存储系统的性能,并验证功能的正确性。)
  • 项目:无存储文件系统Kingfs
  • 项目: nvme文件系统zerofs

3.vfs

VFS(Virtual File System,虚拟文件系统)是一个抽象层,用于在操作系统中统一管理不同的文件系统类型和访问方式。它是操作系统内核中的一部分,提供了对文件和文件系统的抽象接口,使得应用程序可以通过统一的方式来访问各种不同类型的文件系统。

学习VFS可以帮助理解和支持多种文件系统类型,简化文件系统与存储系统的交互方式,优化文件系统的性能,以及调试和开发文件系统。

io_uring

io_uring 是一个 Linux 内核提供的异步 I/O 框架,它旨在提供高性能和低延迟的 I/O 操作。io_uring 的设计目标是为用户空间程序提供一种高效的异步 I/O 接口,以取代传统的阻塞式 I/O 和其他异步 I/O 接口的局限性。

通过使用 io_uring,开发人员可以利用其高性能、低延迟和异步并行的特性来优化应用程序的 I/O 操作。它适用于需要处理大量 I/O 的场景,例如数据库、文件服务器、网络服务器等。同时,io_uring 的设计和接口相对简洁,易于使用和理解,使开发人员能够更容易地编写高效的异步 I/O 程序。

  • io_uring异步io
  • cq与sq的运行原理
  • 无锁队列
  • io_uring的setup/enter/register
  • liburing的开发库
  • liburing接口与psync接口的关系
  • 内存映射IO (mmap)
  • 零拷贝
  • psync与io_uring的iops性能对比
  • io_uring与epoll的qps对比
  • 项目:实现tcp+io_uring

fuse

FUSE(Filesystem in Userspace)是一个在用户空间实现文件系统的框架。它允许开发人员通过编写用户空间程序来创建自定义的文件系统,而无需修改操作系统内核。

帮助理解实现灵活的存储系统、定制化的数据管理逻辑,掌握文件系统操作和性能优化的技巧,并具备跨平台开发的能力。

  • fuse的运行原理
  • fuse内核模块
  • libfuse的开发库
  • fuse_operation结构体分析
  • 实现fuse文件系统
  • 项目:fuse与opencv实现图片加水印

4.SPDK

SPDK(Storage Performance Development Kit)是一个用于构建高性能存储应用程序的开源软件开发工具包。它专注于利用现代硬件和存储技术的特性,以最大化存储应用程序的性能。

SPDK 提供了一组库、驱动程序和工具,帮助开发人员构建低延迟、高吞吐量的存储应用程序。

SPDK 主要用于构建高性能存储应用程序,如存储控制器、分布式存储系统、虚拟化存储、数据库存储引擎等。

学习SPDK帮助你构建高性能存储应用程序,理解和应用用户空间驱动程序开发、零拷贝数据传输、事件驱动架构等关键技术,提高存储系统的性能和响应速度。

项目:文件系统

  • spdk blob文件系统设计分析
  • 文件系统引入线程与json配置解析
  • blobstore与blob的关系
  • 4层结构设计vfs
  • 从bIob读写到文件系统的原语操作实现
  • spdk的异步改造posix同步api
  • open/write/read/close的实现
  • LD_PRELOAD更好mysq|系统调用实现
  • iodepth讲解
  • 随机读,随机写,顺序读,顺序写

项目:NVMe的kv存储

  • KV存储拆解Set,Get,Mod,Del
  • bdev与blob对于kv存储的选择
  • kv service接口 set,get,modify,delete
  • pagechunk的get与put
  • btree/hash/map/radixtree/rbtree之间的选择
  • slab分配slot与释放slot
  • 为kv存储加上conf文件
  • kv存储测试用例与性能测试

5.应用层

项目:图床存储引擎 fastdfs

FastDFS是一个开源的分布式文件系统,它旨在解决大规模文件存储问题。FastDFS具有高性能、高可靠性和可扩展性,适用于需要存储大量小文件的场景,如图片存储、视频存储等。

学习FastDFS可以帮助你构建高性能、可扩展和可靠的分布式文件存储系统,满足大规模文件存储和检索的需求。此外,FastDFS的轻量级部署和易用性也使其成为存储开发的一种理想选择。

  • fastdfs架构分析和配置
  • 快速配置fastdfs
  • 上传文件逻辑分析
  • 下载文件逻辑分析
  • tracker,storage分 析
  • 存储机制
  • 支持断点续传
  • 相同文件内容只保存一份
  • 同步机制
  • 线性扩容
  • 如何实现高可用
  • 负载均衡
  • fastdfs-nginx-module模块分析
  • fastcgi请求与响应
  • nginx与fastcgi如何通信
  • nginx-fastcgi-fastdfs如何实现上传下载
  • http接口设计
  • 图床数据库设计
  • 图床文件上传,下载,分享功能实现
  • 业务流程实现

ceph

Ceph是一个开源的分布式存储系统,旨在提供可扩展性、高性能和高可靠性的存储解决方案。Ceph的设计理念是通过将存储和计算资源整合在一起,构建一个统一的分布式存储平台,能够同时支持对象存储、块存储和文件系统存储。

通过学习和使用Ceph可以构建高可靠性、高性能和可扩展的分布式存储解决方案,满足不同应用对存储的需求。

  • ceph的Docker集群部署
  • librados写入
  • 后端存储 ObjectStore
  • 存储池
  • 数据操作流程
  • RBDCache具体实现
  • Ceph加密和压缩
  • CRUSH算法
  • dmClock客户端
  • Ceph性能测试与分析

RockDB

RockDB是一个高性能、可靠性强且易于使用的嵌入式键值存储引擎。它适用于需要快速、持久化存储和检索大量数据的应用程序,并提供了灵活的数据模型选择。

学习RockDB可以帮助你掌握嵌入式高性能存储引擎的集成和应用,以满足应用程序对数据存储的高性能、持久化和可靠性等需求。这对于构建高效的数据存储系统和提供良好的用户体验至关重要。

  • LSM-Tree对于磁盘访问速度
  • Memtable落盘策略
  • SST文件格式
  • 预写式日志 Write-Ahead Log
  • BlockCache LRU缓存
  • Clock缓存机制
  • 写入流程
  • 读取流程
  • LSM-Tree的三大问 题
  • In-Memory Write Buffer

TiDB

TiDB是一个具有分布式架构、强一致性、ACID事务支持和水平扩展能力的开源关系型数据库。

学习TiDB可以帮助你掌握分布式关系型数据库的设计、部署和优化技术,满足应用程序对高可用性、扩展性和性能的要求,从而更好地应对大规模数据存储和处理的挑战。

  • 分布式关系型数据库 兼容MySQL5.7
  • TiDB分布式数据库整体架构
  • 水平扩展 redis-cluster
  • HTAP的OLTP与OLAP
  • TiDB本地部署
  • 集群测试
  • TiDB Server的模块分析
  • Physical与Logical Opt iomizer
  • 存储节点与数据映射关系
  • PD Server调度
  • TiKV Server数据存储
  • 分布式事务与MPP
  • WriteStall写停顿
  • raft运行机制
  • 两阶段提交
  • 隔离级别
  • MVCC
  • TiFlash的列式存储
  • raft列、lock列、write列、default列

系统性视频教程

详情 自下而上-存储全栈(TiDB/RockDB/SPDK/fuse/ceph/NVMe/ext4)

20+存储领域必备技术点

5个手写实现项目

1W+行代码

参考资料

  • ext4 Data Struct And Algorithms
  • NVM-Express-Base- Specification-2.0c-2022
  • A Remote Direct Memory Access Protocol Specificati on(rfc5040)
  • SCSl Commands Reference Manual
  • Serial ATA International Organization
  • Supplement to InfiniBand Architecture Specification
  • XFS FileSystem Structure
  • BTRFS: The Linux B-Tree FileSystem

对标岗位

  • 存储开发工程师
  • 分布式存储工程师
  • 云存储开发工程师
  • KV存储技术专家
  • SPDK开发工程师
  • 存储引擎研发工程师

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

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

相关文章

HarmonyOS应用开发-闪屏启动页

这是鸿蒙开发者网站的一个应用《溪村小镇》示例代码,把闪屏启动页单拿出来,分析一下代码。 一、先上效果图 这是应用打开时的一个启动页,启动页会根据三个时间段(白天、傍晚、晚上)来分别展示溪村小镇不同的景色。 二…

RocketMQ-RocketMQ高性能核心原理与源码剖析(下)

融汇贯通阶段 ​ 开始梳理一些比较完整,比较复杂的完整业务线。 8、消息持久化设计 1、RocketMQ的持久化文件结构 ​ 消息持久化也就是将内存中的消息写入到本地磁盘的过程。而磁盘IO操作通常是一个很耗性能,很慢的操作,所以,…

MyBatis--07--启动过程分析、SqlSession安全问题、拦截器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 谈谈MyBatis的启动过程具体的操作过程如下:实现测试类,并测试SqlSessionFactorySqlSession SqlSession有数据安全问题?在MyBatis中,SqlSess…

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值

App备案、ios备案Bundle ID查询、公钥信息、SHA-1值 Bundle ID这个就不说了,都知道是啥,主要说公钥信息和SHA-1值的获取 打开钥匙串访问,找到当前需要备案App的dis证书,如下: #####右键点击显示简介 #####可以看…

ThinkPHP生活用品商城系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP生活用品商城系统 一 介绍 此生活用品商城系统基于ThinkPHP框架开发,数据库mysql,前端bootstrap。系统分为用户和管理员。(附带配套设计文档) 技术栈:ThinkPHPmysqlbootstrapphpstudyvscode 二 …

小米手机锁屏时间设置为永不休眠_手机不息屏_保持亮屏

环境:打开手机自带的锁屏时间设置发现没有 永不息屏的选项 原因:采用了三星OLED屏幕,所以根据OLED屏幕特性,这个是为了防止烧屏而特意设计的。非OLED机型支持设置“永不” 解决方案1:原生系统是支持永不锁屏的&#…

【自定义Source、Sink】Flink自定义Source、Sink对redis进行读写操作

使用ParameterTool读取配置文件 Flink读取参数的对象 Commons-cli: Apache提供的,需要引入依赖ParameterTool:Flink内置 ParameterTool 比 Commons-cli 使用上简便; ParameterTool能避免Jar包的依赖冲突 建议使用第二种 使用Par…

STL(七)(map篇)

### 这里重点学习map ### 在实际做题过程中,multimap几乎用不到### unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的,unordered_map一般用不到,要做一个了解 1.map map是一种关联容器,用于存储一组键值对(key-value pairs),其中每…

鸿蒙开发组件之Slider

一、Slider控件是鸿蒙开发中的滑动条组建,初始化方式 Slider({min:0, //最小值max:100,//最大值value:30,//默认值step:10,//步长,每次滑动的差值style:SliderStyle.OutSet, //滑块的样式,默认outsetdirection:Axis.Horizontal, //水平方式的…

Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制,能够处理输入序列中的每个元素,并能计算其与序列中其他元素的交互关系的方法,从而能够更…

【自定义Source、Sink】Flink自定义Source、Sink对ClickHouse进行读和批量写操作

ClickHouse官网文档 Flink 读取 ClickHouse 数据两种驱动 ClickHouse 官方提供Clickhouse JDBC.【建议使用】第3方提供的Clickhouse JDBC. ru.yandex.clickhouse.ClickHouseDriver ru.yandex.clickhouse.ClickHouseDriver.现在是没有维护 ClickHouse 官方提供Clickhouse JDBC…

【小沐学Python】Python实现语音识别(SpeechRecognition)

文章目录 1、简介2、安装和测试2.1 安装python2.2 安装SpeechRecognition2.3 安装pyaudio2.4 安装pocketsphinx(offline)2.5 安装Vosk (offline)2.6 安装Whisper(offline) 3 测试3.1 命令3.2 fastapi3.3 go…

【数据结构】——排序篇(上)

前言:前面我们已经学过了许许多多的排序方法,如冒泡排序,选择排序,堆排序等等,那么我们就来将排序的方法总结一下。 我们的排序方法包括以下几种,而快速排序和归并排序我们后面进行详细的讲解。 直接插入…

C#注册表技术及操作

目录 一、注册表基础 1.Registry和RegistryKey类 (1)Registry类 (2)RegistryKey类 二、在C#中操作注册表 1.读取注册表中的信息 (1)OpenSubKey()方法 (2)GetSubKeyNames()…

2-Spring

2-Spring 文章目录 2-Spring项目源码地址Spring概述Spring特点(优点)Spring相关学习网站基于Maven的Spring框架导入Spring的组成及拓展 Spring-IOC--原型理解IOC-原型--示例开发示例-常规开发示例-Set函数(IOC原型)开发示例-对比思…

Python-pdf工具自制(合并、拆分、删除)

pdf工具,之前写的合并工具有点麻烦,使用PyQt5库重写合并拆分和删除指定页面的程序 实现如图: 代码: import sysimport osfrom PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QFileDia…

新版Android Studio 正则表达式匹配代码注释,删除注释,删除全部注释,IntelliJ IDEA 正则表达式匹配代码注释

正则表达式匹配代码注释 完整表达式拼接Android Studio 搜索匹配【IntelliJ IDEA 也是一样的】 完整表达式拼接 (/*{1,2}[\s\S]?*/)|(//[\x{4e00}-\x{9fa5}].)|(<!-[\s\S]?–>)|(^\s\n)|(System.out.println.*) 表达式拆解&#xff0c;可以根据自己需求自由组合&#x…

【Dubbo3云原生微服务开发实战】「Dubbo前奏导学」 RPC服务的底层原理和实现

RPC服务 RPC服务介绍RPC通信模式RPC架构组成RPC技术要点RPC通信技术选项分析RPC实战开发6大基础组件基础组件之Guava基础组件之Hutools基础组件之ReflectionASM基础组件之FastJSON/FastJSON2基础组件之FST相比FastJSON的优势 基础组件之Commons-Codec RPC框架层面选项分析RPC组…

Cocos Creator:创建棋盘

Cocos Creator&#xff1a;创建棋盘 创建地图三部曲&#xff1a;1. 创建layout组件2. 创建预制体Prefab&#xff0c;做好精灵贴图&#xff1a;3. 创建脚本LayoutSprite.ts收尾工作&#xff1a; 创建地图三部曲&#xff1a; 1. 创建layout组件 使用layout进行布局&#xff0c;…

sensitive word 敏感词(脏词) 如何忽略无意义的字符?达到更好的过滤效果?

忽略字符 说明 我们的敏感词一般都是比较连续的&#xff0c;比如 傻帽 那就有大聪明发现&#xff0c;可以在中间加一些字符&#xff0c;比如【傻!#$帽】跳过检测&#xff0c;但是骂人等攻击力不减。 那么&#xff0c;如何应对这些类似的场景呢&#xff1f; 我们可以指定特…
最新文章