數字化時代的到來帶來了大規模數據的產生,各行各業都面臨著數據爆炸的挑戰。 隨著云計算、物聯網、人工智能等新興技術的發展,對存儲技術的需求也越來越多樣化。不同應用場景對存儲的容量、性能、可靠性和成本等方面都有不同的要求。具備存儲技術知識和技能的人才更具有競爭力。
存儲技術專家成長路線
技術點主要運用在存儲庫架構設計、企業級存儲系統、分布式存儲系統、云存儲系統、分布式數據庫、高性能存儲引擎、文件系統等領域。
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開發工程師
- 存儲引擎研發工程師