LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

  • cplus

  • leetcode

  • 存储技术

    • 学习大纲
      • 分布式存储技术点
        • 1. 存储设备层(Storage Device Layer)
        • 2. 数据分布层(Data Distribution Layer)
        • 3. 网络通信层(Network Communication Layer)
        • 4. 一致性与容错层(Consistency and Fault Tolerance Layer)
        • 5. 存储引擎层(Storage Engine Layer)
        • 6. API与接口层(API and Interface Layer)
        • 7. 安全性层(Security Layer)
        • 8. 管理与监控层(Management and Monitoring Layer)
        • 9. 应用层(Application Layer)
      • 存储io栈
        • Linux I/O栈的关键组成部分
        • 1. 系统调用层(System Call Layer)
        • 2. 虚拟文件系统(VFS,Virtual File System)
        • 3. 文件系统层
        • 4. 页面缓存(Page Cache)
        • 5. 通用块层(Block Layer)
        • 6. I/O调度器(I/O Scheduler)
        • 7. 设备驱动程序层
        • 8. 存储设备层(Storage Device Layer)
        • 9. I/O栈的优化与管理
        • Linux I/O栈的学习大纲
        • 1. 系统调用层
        • 2. 虚拟文件系统(VFS)
        • 3. 文件系统层
        • 4. 页面缓存
        • 5. 通用块层
        • 6. I/O调度器
        • 7. 设备驱动程序层
        • 8. 存储设备层
        • 9. I/O栈的优化与管理
        • 10. 高级主题:NVMe和高速存储
    • 命令ls的执行过程
    • mmap && write
    • 命令write的执行过程
    • 块
    • VFS层
    • Ceph

    • Daos

  • 分布式系统

  • 计算机网络

  • Linux操作系统

  • Redis

  • 其他

  • 笔记
  • 存储技术
lisheng
2024-09-10
目录

学习大纲

# 分布式存储技术点

分布式存储开发的工作通常涉及多个层次,涵盖从底层存储设备管理到高层应用服务的广泛范围。以下是主要的几个层次和各自的工作内容:

# 1. 存储设备层(Storage Device Layer)

  • 设备管理: 开发驱动程序和管理软件,支持不同类型的存储设备(如HDD、SSD、NVMe等)。
  • 数据冗余与校验: 实现数据复制、RAID、纠删码(Erasure Coding)等技术,确保数据的可靠性和可用性。
  • 硬件加速: 利用硬件加速技术(如FPGA、RDMA)优化存储性能。

# 2. 数据分布层(Data Distribution Layer)

  • 数据分片与分布: 开发分片算法(如一致性哈希)和策略,确保数据在集群中合理分布,以实现负载均衡和高可用性。
  • 元数据管理: 处理元数据(如文件路径、权限、块位置等)的分布与访问,开发高效的元数据服务。

# 3. 网络通信层(Network Communication Layer)

  • 网络协议设计: 开发或优化网络协议(如TCP/IP、RDMA、iSCSI等),确保分布式存储系统中的节点之间高效通信。
  • 数据传输优化: 优化数据在网络中的传输速度和可靠性,减少延迟并提高带宽利用率。

# 4. 一致性与容错层(Consistency and Fault Tolerance Layer)

  • 数据一致性: 实现强一致性、最终一致性或其他一致性模型,确保集群中数据的一致性。
  • 分布式锁与协调: 开发分布式锁服务、领导者选举(Leader Election)、分布式事务等机制,确保多个节点协同工作。
  • 故障恢复与重建: 开发故障检测、自动恢复、数据重建等功能,以应对节点或网络故障。

# 5. 存储引擎层(Storage Engine Layer)

  • 存储引擎开发: 开发底层存储引擎,负责高效的读写操作、索引管理和数据持久化。
  • 日志管理: 实现日志结构化存储,支持数据恢复和回滚操作。

# 6. API与接口层(API and Interface Layer)

  • API设计与实现: 提供适用于应用程序的API接口(如RESTful、gRPC、POSIX接口),确保分布式存储系统易于集成和使用。
  • 客户端库: 开发和维护客户端库,帮助应用程序与分布式存储系统进行交互。

# 7. 安全性层(Security Layer)

  • 身份验证与授权: 开发基于角色的访问控制(RBAC)、加密与解密、身份验证等机制,确保数据安全。
  • 数据加密与传输安全: 实现数据的静态加密和传输加密,保护数据不被未授权访问。

# 8. 管理与监控层(Management and Monitoring Layer)

  • 集群管理工具: 开发工具和平台用于集群的部署、配置、扩展和管理。
  • 监控与报警: 实现实时监控、日志记录、性能指标分析,以及故障报警机制,确保系统的可视化和可维护性。

# 9. 应用层(Application Layer)

  • 高层应用服务: 开发面向具体应用场景的存储服务,如对象存储(如Amazon S3兼容服务)、文件存储、块存储服务。
  • 应用集成: 将分布式存储系统与其他服务或应用程序集成,如与大数据处理平台、数据库系统、虚拟化平台等的集成。

在实际开发过程中,不同的开发团队可能专注于不同的层次,但这些层次紧密相连,共同构建一个高效、可靠的分布式存储系统。

# 存储io栈

在Linux内核中,I/O栈(Input/Output Stack)是处理从应用程序到存储设备(如磁盘、SSD、网络设备等)之间数据传输的核心机制。I/O栈涉及多个层次和子系统,负责处理不同类型的I/O操作,管理数据的读写,并优化性能。

以下是关于Linux I/O栈的关键组成部分及其学习大纲的完整内容,方便你作为笔记使用:


# Linux I/O栈的关键组成部分

# 1. 系统调用层(System Call Layer)

  • 用户空间应用程序通过系统调用与内核交互。典型的I/O相关系统调用包括:
    • open(), read(), write(), close(): 文件的打开、读取、写入和关闭。
    • ioctl(): 设备控制操作,允许对设备进行特殊的控制操作。
    • mmap(): 将文件或设备映射到进程的内存空间中,以便用户程序直接访问。
    • poll(), select(), epoll(): 用于监控文件描述符的I/O事件。
  • 这些系统调用负责向内核传递I/O请求,并从用户空间传输数据到内核空间,或反之。

# 2. 虚拟文件系统(VFS,Virtual File System)

  • VFS是Linux内核中的一个抽象层,它屏蔽了底层文件系统的实现细节,提供了统一的文件系统接口。所有文件系统的操作(例如文件的打开、关闭、读写等)都通过VFS层处理。
  • 无论是本地文件系统(如Ext4、XFS),还是远程文件系统(如NFS、CIFS),它们都通过VFS进行抽象和管理。

# 3. 文件系统层

  • 文件系统负责将高层的文件操作请求转换为对磁盘块的读写请求。常见的文件系统有Ext4、XFS、Btrfs等。
  • 文件系统通过元数据(如inode)跟踪文件存储位置,并通过VFS提供对上层的抽象。

# 4. 页面缓存(Page Cache)

  • 页面缓存是Linux内核中用于缓存文件系统数据的一部分。每次读写操作,内核会优先访问页面缓存,以减少对磁盘的直接访问,提高I/O操作的性能。
  • 如果数据已经在页面缓存中(即"缓存命中"),I/O操作可以直接在内存中完成,而无需访问慢速存储设备。

# 5. 通用块层(Block Layer)

  • 块层是I/O栈中的核心组件之一,负责管理存储设备上的块设备(如硬盘、SSD等)的读写请求。
  • 块层通过请求队列(Request Queue)来组织读写操作,并优化请求的调度,例如合并相邻的读写操作,以提高磁盘的顺序访问效率。
  • 块设备驱动程序和调度器也在块层中执行。

# 6. I/O调度器(I/O Scheduler)

  • 在块层中,I/O调度器负责排序和优化块设备的读写请求。调度器可以合并相邻的读写操作,以减少磁盘的寻道时间。
  • 常见的I/O调度器包括:
    • CFQ(Completely Fair Queuing):提供公平的I/O调度,适用于桌面和通用服务器场景。
    • Deadline:基于截止时间的调度器,适合实时系统。
    • NOOP:一个简单的调度器,直接按照请求的顺序发送请求,适合SSD等无需优化的设备。

# 7. 设备驱动程序层

  • 设备驱动程序是I/O栈中与硬件直接交互的层。每种存储设备(如HDD、SSD、NVMe等)都有其对应的驱动程序。
  • 驱动程序将块层的请求转换为具体的硬件命令,并通过PCI、SATA、NVMe等总线将命令发送到实际的物理设备上。

# 8. 存储设备层(Storage Device Layer)

  • 这是I/O栈的最底层,由物理存储设备构成。常见的设备包括HDD、SSD、NVMe等。
  • 存储设备是I/O栈的物理实现部分,提供数据存储、读写操作等功能。

# 9. I/O栈的优化与管理

  • 异步I/O(AIO):允许应用程序在I/O操作时继续执行其他任务,提升并发性能。
  • 直接I/O(Direct I/O):绕过页面缓存,直接从用户程序到存储设备进行数据传输,减少不必要的中间缓存。
  • 多队列块层(Multiqueue Block Layer):通过为每个CPU核分配I/O队列,提高I/O的并行处理能力。

# Linux I/O栈的学习大纲

# 1. 系统调用层

  • 基础系统调用:open(), read(), write(), close() 的用法和原理。
  • 设备控制:ioctl() 系统调用的详细用法。
  • 内存映射:mmap() 系统调用的工作机制。
  • I/O多路复用:poll(), select(), epoll() 的原理及应用。

# 2. 虚拟文件系统(VFS)

  • VFS概念:虚拟文件系统的作用和机制。
  • 文件系统接口:如何通过VFS访问不同的文件系统。
  • VFS数据结构:inode、dentry、file等数据结构的作用与实现。

# 3. 文件系统层

  • 文件系统基础:学习Ext4、XFS等文件系统的结构和工作原理。
  • 文件系统操作:如何创建、挂载和管理文件系统。
  • 文件系统调优:优化文件系统的参数以提高性能。

# 4. 页面缓存

  • 缓存的作用:页面缓存如何提高性能。
  • 缓存管理:如何监控、清除缓存,调整内核参数优化页面缓存性能。

# 5. 通用块层

  • 块设备概念:块设备的工作原理。
  • 块设备驱动:块设备驱动程序的实现和调试。
  • 块设备API:blk_queue, bio等关键数据结构和API的使用。
  • I/O调度器:不同调度器的工作机制和调度算法。

# 6. I/O调度器

  • 调度器概念:理解调度器的作用。
  • 调度算法:学习FCFS、SSTF、SCAN等常见调度算法。
  • 调度器优化:如何选择和调优I/O调度器。
  • 多队列块层:了解多队列块层的高并发机制。

# 7. 设备驱动程序层

  • 驱动程序概念:了解Linux设备驱动的工作机制。
  • 块设备驱动开发:如何编写块设备驱动程序。
  • 驱动接口:设备驱动的注册与使用。

# 8. 存储设备层

  • 存储设备基础:了解HDD、SSD、NVMe等设备的工作原理。
  • 存储接口:SATA、SAS、NVMe、PCIe等接口的性能特点。
  • 存储优化:如何通过RAID、TRIM等技术优化存储设备的性能。

# 9. I/O栈的优化与管理

  • I/O性能监控工具:iostat, iotop, blktrace, perf, strace等工具的使用。
  • 异步I/O(AIO):异步I/O的工作原理和实现。
  • 直接I/O(Direct I/O):如何使用Direct I/O优化性能。
  • 多队列块层优化:多队列块层如何提升NVMe等高速存储设备的性能。

# 10. 高级主题:NVMe和高速存储

  • NVMe协议:了解NVMe的协议及其性能优势。
  • NVMe驱动:如何在Linux中优化NVMe设备的使用。
  • SSD优化:SSD特性(如磨损均衡、垃圾回收、TRIM)及其在Linux中的优化。

这份笔记涵盖了Linux I/O栈的各个层次及相关学习内容,为你提供了系统化的学习大纲与内容,方便你逐步掌握Linux内核中的I/O机制。

编辑 (opens new window)
上次更新: 2024/09/13, 11:59:12
图论算法
命令ls的执行过程

← 图论算法 命令ls的执行过程→

最近更新
01
ceph分布式存储-对象存储(RGW)搭建
10-27
02
ceph分布式存储-集群客户端连接
10-27
03
ceph分布式存储-管理crushmap
10-27
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式