自下而上-存儲全棧(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.pswp.cn/news/207184.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207184.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207184.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習-聚類問題

前言 聚類算法又叫做”無監督分類“,目標是通過對無標記訓練樣本來揭示數據的內在性質及 規律,為進一步的數據分析提供基礎。 Kmeans 作為聚類算法的典型代表,Kmeans可以說是最簡單的聚類算法,沒有之一,那她是怎么完…

MySQL為何偏愛B+樹索引

一、MySQL、B樹概念 MySQL是一種關系型數據庫,它使用SQL語言來操作數據。SQL語言可以實現對數據的增刪改查等操作,但是如果數據量很大,那么這些操作的效率就會很低。為了提高效率,MySQL引入了索引的概念。 索引是一種數據結構&am…

人體關鍵點檢測1:人體姿勢估計數據集

人體關鍵點檢測1:人體姿勢估計數據集 目錄 人體關鍵點檢測1:人體姿勢估計數據集 1.人體姿態估計 2.人體姿勢估計數據集 (1)COCO數據集 (2)MPII數據集 (3)Human3.6M &#xf…

PostgreSQL 主鍵和唯一鍵的區別

主鍵和唯一鍵的區別 主鍵(Primary Key): 主鍵是用于唯一標識表中的每一條記錄的鍵。主鍵必須是唯一的,不允許為空。一個表只能有一個主鍵。主鍵可以由一個或多個字段組成。主鍵的值在整個表中必須是唯一的,用于確保數據…

編譯器:swc 究竟比 babel 快在哪里?

前言 swc 與 babel 都是 JavaScript 編譯器,它們的主要功能是將 ES2015 以及 TypeScript, Flow, JSX 等語法轉換為瀏覽器或環境中的向后兼容的 JavaScript 代碼。 哪里快了? 1. 開發語言的優勢 swc 是用 Rust 語言開發的,而 babel 是用 Java…

MS5228/5248/5268:2.7V 到 5.5V、 12/14/16Bit、內置基準、八通道數模轉換器

MS5228/MS5248/MS5268 是一款 12/14/16bit 八通道輸出的電壓型 DAC ,內部集成上電復位電路、可選內部基準、接口采用四線串口模式, 最高工作頻率可以到 40MHz ,可以兼容 SPI 、 QSPI 、 DSP 接口和 Microwire 串口。輸出接到一個 …

IP地址/16或者/24的意義

IP地址/16或者/24的意義 2023-04-26 16:54 獵手家園 閱讀(533) 評論(0) 編輯 收藏 舉報 當創建VPC專有網絡時,許多人會遇到填寫IPv4地址的情況,通常使用的格式是xxx.xxx.xxx.xxx/16或者xxx.xxx.xxx.xxx/24。那么這個斜杠后面的數字代表什么意思呢&#…

<習題集><LeetCode><鏈表><2/19/21/23/24>

目錄 2. 兩數相加 19. 刪除鏈表的倒數第 N 個結點 21. 合并兩個有序鏈表 23. 合并 K 個升序鏈表 24. 兩兩交換鏈表中的節點 2. 兩數相加 https://leetcode.cn/problems/add-two-numbers/ public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//head是cur鏈表頭節點…

pdf轉png的兩種方法

背景:pdf在一般公司,沒有辦公系統,又不是word/wps/Office系統,讀不出來,識別不了,只能將其轉化為圖片png,因此在小公司或者一般公司就需要pdf轉png的功能。本文將詳細展開。 1、fitz庫(也就是PyMuPDF) 直接pip安裝PyMuPDF即可使用,直接使用fitz操作,無需其他庫。 …

Go語言實現深度學習的正向傳播和反向傳播

文章目錄 開發前言開發理論圖解理論數據類型數學函數數據節點統一抽象變量數據節點常量數據節點單目運算封裝雙目運算封裝算子節點統一抽象基礎算子加法算子減法算子乘法算子除法算子指數算子對數算子正切算子正弦算子余弦算子數據流圖正向傳播反向傳播正向訓練反向訓練運行示例…

我的記事本

url uniform resource locator. 統一資源定位符 請求狀態碼 1XX:信息響應 2XX:成功響應 3XX:重定向消息 4XX:客戶端錯誤響應 5XX:服務器端錯誤響應 IP地址分類 本機回環IP地址:127.0.0.1 ~ 127.255.255.254 局域網IP(私網IP) 192.168.0.0 &am…

船舶機電設備振動數據采集監控系統解決方案

船舶運行中,通常需要通過振動數據采集系統對船舶的各個機電設備運行進行監控,有助于在設備故障時快速預警,進行診斷、分析和維護,保證船舶機電設備正常工作,從而確保工作人員及船舶的安全。 船舶各種機電設備會產生大…

vLLM介紹

簡介 vLLM 工程github地址 Paged attention論文地址 vLLM開發者介紹 Woosuk Kwon vLLM: A high-throughput and memory-efficient inference and serving engine for LLMs. SkyPilot: A framework for easily and cost effectively running machine learning workloads on …

【模型量化】神經網絡量化基礎及代碼學習總結

1 量化的介紹 量化是減少神經網絡計算時間和能耗的最有效的方法之一。在神經網絡量化中,權重和激活張量存儲在比訓練時通常使用的16-bit或32-bit更低的比特精度。當從32-bit降低到8-bit,存儲張量的內存開銷減少了4倍,矩陣乘法的計算成本則二…

ALNS算法中隨機化重要性的評價

文章概述 本研究分析了在海上提貨和交付問題中使用的ALNS元啟發式算法中的隨機化成分。研究者提出了簡單的確定性替代方案,并通過實驗比較了隨機化和確定性成分的性能。結果表明,初始實現的簡單確定性替代方案能夠與隨機化成分的性能相匹配。這項研究為…

IDEA使用git從遠程倉庫獲取項目

將地址填入url中 然后直接clone就行

《Easy3d+Qt+VTK》學習

《Easy3dQtVTK》學習-1、編譯與配置 一、編譯二、配置注 一、編譯 1、 資源下載:easy3d giuhub 2、解壓縮 3、用qt打開CMakeLists.txt即可 4、點擊項目,選擇debug或者release,圖中3處可自行選擇,因為我的qt版本是6&#xff0c…

Java集合大總結——Collections工具類

簡單闡述 參考操作數組的工具類:Arrays,Collections 是一個操作 Set、List 和 Map 等集合的工具類。 常用方法 Collections 中提供了一系列靜態的方法對集合元素進行排序、查詢和修改等操作,還提供了對集合對象設置不可變、對集合對象實現…

jdbc4.MySQLSyntaxErrorException: Query was empty

出現這種異常的原因,有幾個要點 檢查sql語句是否正確檢查你的條件是否真的被sql使用 背景 delete sql在xml中,賦值list對象,計劃進行批量刪除的sql,這時出現了異常,檢查后,發現這個list竟然是空&#xff…

Linux下的軟硬鏈接

Linux下的軟硬鏈接 Linux下的硬鏈接和軟鏈接是一種文件系統級別的鏈接方式,它們允許你在不同的目錄中創建指向同一個文件的引用。硬鏈接和軟鏈接的主要區別在于它們的實現方式和刪除方式。 硬鏈接(Hard Link): 硬鏈接是指向同一…