
为什么说性能优化是技术路上的 拦路虎? 因为很多人一上来就只会三板斧:加缓存、异步、分库分表 这就像程咬金打仗,不管对面是谁,上来就这三招
如果不先分析具体瓶颈、不量化优化效果,那就是头痛医头、脚痛医脚 不仅效果有限,还可能埋下新坑。
首先下一个定义,本文 性能优化是针对,有状态的服务,
在谷歌的 Transaction Across DataCenter 视频中,我们可以看到下面这样的图,服务状态描述

这也是三板斧,本文上来说这些
相对于无状态服务,服务挂了马上来起来重启,不需要考虑
我是主节点还是从节点,主节点本地加载数据,从节点从主节点获取数据
我是缓存节点,需要从数据库/kvdb加载数据,或者日志中回放记录。
我是集群节点,如何保证数据一致性,顺序一致性,线性一致性
哪怕是单节点,考虑MVCC,
目的:写一篇文章 关于
文件系统中存储池,卷,快照 vs 数据库系统中 kv存储,MVCC可变部分,MVCC不可变部分
相同点对同一个行记录多次修改 都是快照链方式,都是新增代替修改
如果相关疑问 可留言讨论
本文聚焦
1、文件系统的存储池(镜像,快照,快照链)机制 vs KV存储MVCC(全局时间戳, 动态可变部分快照链,静态不可变部分)
2、文件系统ID分配器 vs 数据库全局时间戳
3、中心化存储 vs 非中心化存储
4、Ceph VS TIDB VS OceanBase
一句话解释:对同一个记录/位置多次修改,新增记录代替原地修改
Ceph Pool作为Ceph存储系统中的核心概念
Ceph文件系统举例,经常提到 pool0,pool1,用pool 来存储对象,
遇到一个新概念,这就是抽象,它因此 在磁盘怎么数据的,更隐藏了 数据怎么不同节点磁盘分布的
专业定义:
在Ceph文件系统(CephFS)的上下文中,池的应用尤为具体。一个典型的CephFS会使用两个池
元数据池(Metadata Pool):专门用于存储由元数据服务器(MDS) 管理的元数据,例如文件的索引节点(inode)信息,包括文件名、目录结构、权限、时间戳等
数据池(Data Pool):用于存储文件的实际数据内容。文件数据被切分成一个或多个对象存储在此池中 Ceph Pool是Ceph存储数据时的逻辑分区。 它起到namespace的作用,可以将数据组织成不同的组。 每个Pool包含一定数量的Placement Group(PG), 而PG是Ceph存储数据的基本单位,也是Ceph实现数据冗余和可靠性的基本单位。
如果这样描述,根本无法理解存储池特点。
想想一下,对用户来说就是一篇连续空间, 用户感觉2个变量是连续存储,
真是情况 根本不是这回事,
类别:深入理解计算机系统(CSAPP) 第九章 提到虚拟内存

虚拟内存的核心抽象之一,正是将磁盘 抽象为一个巨大、连续、私有且一致的地址空间,
而物理主存(DRAM)则被抽象为这个巨大地址空间的高速缓存
虚拟内存既不是磁盘也不是物理内存,而是一种抽象的内存管理机制,它结合了物理内存、磁盘存储和操作系统软件,为每个进程提供了一个连续且私有的地址空间。
Linux虚拟内存的组织方法是将虚拟地址空间划分为多个具有特定属性的连续区域(代码段,数据端,堆)

画外音:
用户只需指定将数据存入某个命名的池(如 cephfs_data),
而无需关心数据最终被存放在集群中的哪台服务器的哪个硬盘上。
极大地简化了存储管理和使用。
思考一个问题: 池是连续存储空间 假如是2T, 如何提高2T 空间读写效率,肯定不能让一个线程来处理吧,肯定

LVM(Logical Volume Manager,逻辑卷管理器 ) 提到 池,Volume, LUN 区别
在存储技术中,池(Pool)、卷(Volume)和LUN(Logical Unit Number) 是三个核心且易混淆的概念。它们分别代表了不同层次、不同架构下的存储资源抽象和组织方式。理解其区别,是掌握现代存储架构的关键。
这三个概念可以被清晰地划分在不同的抽象层级上,从物理到逻辑,从共享到专用。
1、池(Pool):资源抽象与组织层
•定义:池是对底层物理存储资源(如多个硬盘、SSD)进行聚合、虚拟化后形成的逻辑存储资源集合。它是存储系统管理资源的基本单位。
2、卷(Volume):逻辑存储设备层
•定义:卷是从池(或直接物理磁盘阵列)中划分出来的、具有独立标识和空间的一块逻辑存储区域。它是呈现给操作系统或主机,能够被识别、格式化和挂载的“虚拟磁盘”。
核心思想:“逻辑隔离,独立使用”。一个池可以创建多个卷,每个卷在主机看来就像一块独立的硬盘。卷是连接底层存储资源和上层文件系统/应用的桥梁。
3、LUN(Logical Unit Number):SAN(存储区域网络)协议标识层
•定义:LUN是在SAN(如FC-SAN, iSCSI)环境中,对存储阵列提供给主机访问的逻辑单元(通常就是一个卷)进行编号和寻址的标识符。
•核心思想:“网络寻址,远程访问”。在SAN架构中,主机通过HBA卡连接到存储网络。存储阵列将其内部的多个卷(Volume)呈现给网络,每个卷对应一个唯一的LUN ID(如LUN 0, LUN 1)。主机端通过发起SCSI命令,并指定目标LUN ID,来访问远程的存储空间。
•关键点:LUN是SAN协议栈中的概念,特指通过SCSI协议在网络上暴露的逻辑单元。一个Volume一旦通过SAN协议提供给主机,在主机端看来,它就是某个Target下的一个LUN。
物理硬盘 -> 存储池(Pool)-> 卷(Volume)-> LUN(在SAN中)-> 主机识别为磁盘 -> 格式化为文件系统 -> 应用使用
特性 | 池(Pool) | 卷(Volume) | LUN |
|---|---|---|---|
本质 | 资源的逻辑集合与抽象。 | 从池中分配出的逻辑存储设备。 | 卷在SAN网络中的标识符和访问入口。 |
层级 | 最底层,直接管理物理介质。属于存储系统内部管理概念。 | 中间层,是池的“产出物”,是供给主机的“产品”。 | 协议层,是Volume在特定(SAN)网络环境下的“门牌号”。 |
功能 | 定义数据冗余策略(副本/纠删码)、性能策略、故障域等。提供资源隔离和QoS基础。 | 定义大小、特性(如精简配置、快照)。是数据承载和读写的基本单位。 | 实现网络存储的寻址和多路径访问。是主机识别远程存储的凭据。 |
可见性 | 对主机/应用不可见。由存储管理员在存储系统后台配置和管理。 | 对主机可见。主机可将其识别为一块磁盘。 | 对主机可见。主机通过扫描SAN网络发现Target和LUN。 |
类比 | 云资源池(如vSphere集群资源池)。 | 虚拟机(从资源池中创建出的独立计算实例)。 | 虚拟机的IP地址(虚拟机在网络中的访问标识)。 |
典型场景 | Ceph存储池、vSAN磁盘组、存储阵列的RAID组/存储池。 | Ceph RBD Image、VMware VMDK文件、存储阵列上划分的Volume。 | 挂在FC或iSCSI SAN环境中的主机HBA卡下的磁盘。 |
简单来说:池是“原料仓库”,卷是从仓库里取出来加工好的“成品”,而LUN是这个成品在特定超市(SAN网络)里的“货架标签”。 主机拿着标签(LUN ID)去超市(SAN)里,就能找到并取走成品(Volume)。
•一个 LUN的来源是来自存储池,存储池是由若干个硬盘组成的硬盘域例子
•对于服务器来说,一个LUN可以被看作是一块可以使用的硬盘,如在/dev/dsk目录下有相应的设备名称
•为什么要划分LUN
•什么是IO接口
IO接口就是负责协调主机和外部设备的数据传输的部件,又叫做IO控制器

SCSI总线可以连接16个设备(32位的SCSI可以连接32个),每个设备有一个SCSI ID号,也叫Target ID。但是对于大型磁盘阵列,可以生成几百甚至上千个虚拟磁盘,为每个虚拟磁盘分配一个Target ID是远远不够的。于是将每个Target ID下再划分更多的 LUN ID(视ID字段长度而定),即LUN是一个次级寻址ID,虚拟磁盘也就变成了Target x LUN y,所以LUN ID的作用是扩充了Target ID。
LUN是SCSI协议中的名字,后面人们把硬件层次生成的虚拟磁盘统一称为”LUN“,不管是不是在SCSI环境下。而由软件生成的虚拟磁盘
啥意思: LUN:硬件/控制器层面的逻辑设备标识 LUN的全称是Logical Unit Number,即逻辑单元号。它最初是SCSI协议体系中的一个寻址概念。
在SCSI总线上,一个Target(目标设备,如一台磁盘阵列)可以包含多个逻辑单元,为了区分它们,就为每个逻辑单元分配一个LUN ID。 因此,LUN的本质是一个编号,用于在特定的总线(BUS)和目标设备(Target)下唯一标识一个逻辑存储单元。
随着存储技术的发展,这个概念被泛化。
如今,无论底层是SCSI、SAS还是通过iSCSI、FC等网络协议,只要是存储设备(如磁盘阵列、SAN)控制器划分出来、呈现给主机的逻辑磁盘单元,通常都被称为LUN
对主机操作系统而言,一个LUN看起来就是一块“物理硬盘
•LUN 是对存储设备而言的,volume 是对主机而言的
•LUN不是卷,但卷通常建立在LUN之上。 LUN是存储设备交付给主机的“原始存储块”,而卷是主机操作系统对这些原始块进行加工、管理后形成的“可用存储空间”
•常见的是一个volume对应一个分区,类似 windows的C盘或者D盘
•Volume是一个逻辑概念,Partition 分区是物理概念
一个生动的类比是:
**存储设备就像一个房地产开发商,它把土地(物理硬盘)建成了一栋栋毛坯房(RAID组),然后将每套毛坯房划分成一个个具有独立门牌号(LUN ID)的“空房间”(LUN),卖给业主(主机)。
业主(主机)拿到“空房间”(LUN)后,会根据自家需求进行装修——砌墙隔断(分区)、铺地板装灯(创建卷并格式化),最终形成可以使用的客厅、卧室(卷)。
LVM逻辑卷基本 https://www.bilibili.com/video/BV1FE411i7mM
LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
LVM的设计主要解决了传统分区管理方式的诸多痛点,其优势体现在以下几个方面
1、灵活的存储容量管理:这是LVM最突出的优点。在传统分区模式下,一旦分区创建,其大小就很难调整。而使用LVM,可以在线、动态地扩展或缩小逻辑卷的大小,而无需重启系统或移动数据。当LV空间不足时,只需从VG中分配更多空间给它;如果VG空间不足,可以随时向VG中添加新的物理卷(PV)来扩容
2、高效的存储空间利用:LVM可以将多块大小、型号各异的物理磁盘整合到一个统一的VG中,然后从这个大池子里划分LV。这避免了传统分区方式中,因单块磁盘空间过大而利用率低,或因分区大小预估错误导致空间浪费的问题,大大提高了存储空间的利用率
3、支持高级存储功能:LVM支持快照(Snapshot),可以瞬间创建一个逻辑卷在某一时间点的只读或可写副本,用于数据备份或测试,而无需中断服务。此外,它还支持LV的条带化(提高I/O性能)和镜像(提高数据可靠性
物理硬盘 -> RAID组 -> LUN -> (主机识别为物理磁盘) -> LVM物理卷(PV) -> LVM卷组(VG) -> LVM逻辑卷(LV) -> 格式化并挂载为“卷”(Volume)
**卷是逻辑存储单元,而磁盘是物理存储设备。
一个磁盘可以包含一个或多个卷,一个卷也可以跨越多个磁盘**
Volume的核心价值在于其灵活性和高级功能,、 它是对底层块设备(可能是LUN)的进一步抽象和管理。
Volume是操作系统或软件层面的逻辑存储单元,它建立在物理磁盘、RAID组或LUN之上,是用户和应用程序最终交互的“成品”存储空间
1、操作系统本地磁盘管理:这是最普遍的场景。在Windows中,C盘、D盘就是卷;在Linux中,挂载到 /home、/ 的文件系统也是卷。它们可能直接建立在物理硬盘的分区上,也可能建立在由多个硬盘通过软件RAID或LVM(逻辑卷管理) 聚合而成的更复杂的逻辑设备上。LVM允许管理员动态扩展、缩小卷,或创建快照,提供了远超传统固定分区的灵活性。
2、文件共享服务(NAS):在NAS设备或文件服务器上,管理员创建并导出(export)的“共享文件夹”,其底层就是一个或多个Volume。这些Volume被格式化为NFS、SMB/CIFS等网络文件系统协议,供网络上的用户访问。
3、现代容器与云原生环境:在Kubernetes(K8s)中,Volume是一个核心抽象,用于解决容器数据持久化的问题。
4、存储虚拟化与软件定义存储(SDS):在vSAN、Ceph、Windows Storage Spaces等SDS解决方案中,“卷”是最终呈现给用户或虚拟机的存储服务单元。这些系统将集群内所有服务器的本地硬盘聚合成为一个巨大的存储池,然后从这个池中创建出具有不同性能、冗余策略的Volume,提供给上层应用使用。
LUN是存储设备(硬件)层面的逻辑单元,主要应用于存储区域网络(SAN) 环境,是存储资源交付给主机的“标准件”。
核心场景:为物理服务器或虚拟机提供“原始”块存储 这是LUN最经典和最主要的应用。
存储管理员在磁盘阵列或SAN存储上,将物理硬盘组成RAID组,
•然后从RAID组中划分出多个LUN。
•这些LUN通过光纤通道(FC)、iSCSI等SAN协议映射(Mapping)给特定的服务器。
•服务器上的HBA卡识别到这些LUN后,操作系统会将其视为一块或多块独立的“物理硬盘”。
1、数据库服务器存储:高性能数据库(如Oracle, SQL Server)通常需要直接访问块设备以获得最低的I/O延迟和最高的控制权。数据库的整个数据文件通常就存放在一个或多个专用的LUN上。
2、虚拟化平台的数据存储:在VMware vSphere、Microsoft Hyper-V等虚拟化环境中,LUN被格式化为VMFS(VMware文件系统)或CSV(群集共享卷)等集群文件系统后,成为数据存储(Datastore)。这个数据存储用于存放所有虚拟机的虚拟磁盘文件(VMDK/VHDX)、配置文件等。一个LUN(数据存储)可以被整个集群中的多个主机同时访问,是实现虚拟机高可用(HA)和动态迁移(vMotion/Live Migration)的基础。
3、高性能计算(HPC)与关键业务应用:任何对存储I/O性能、稳定性和控制粒度要求极高的应用,都可能直接使用LUN。应用或操作系统可以直接在LUN上创建文件系统,避免额外的抽象层带来的开销。
4、构建容灾和备份体系:LUN是许多高级存储功能的基础对象。例如,存储阵列可以在LUN级别创建快照(Snapshot) 和克隆(Clone)。
5、快照用于瞬间创建LUN的时间点副本,用于快速恢复或测试;克隆则创建一份完整的、可独立读写的副本,常用于应用测试、数据分析或升级演练,避免影响生产数据。
6、此外,LUN也是远程复制(Remote Replication) 的基本单位,用于实现跨数据中心的容灾。
特性维度 | LUN (Logical Unit Number) | Volume (卷) |
|---|---|---|
创建与管理者 | 存储硬件设备(磁盘阵列控制器)或存储管理软件。 | 操作系统(如Windows磁盘管理、Linux LVM)或应用平台(如K8s、虚拟化平台)。 |
核心应用场景 | 1. SAN环境中为服务器/虚拟机提供原始块存储。 2. 作为虚拟化数据存储(Datastore)的基础。 3. 存储硬件级快照、克隆、远程复制的对象。 | 1. 操作系统本地文件系统的载体(C盘、D盘)。 2. NAS文件共享的底层存储单元。 3. 容器(K8s)数据持久化、配置注入的核心机制。 4. **软件定义存储(SDS)**交付的最终服务。 |
面向对象 | 系统管理员、存储管理员。关注性能、可靠性、RAID级别、LUN映射和屏蔽(LUN Masking)。 | 最终用户、应用开发者、DevOps工程师。关注容量、文件系统、挂载点、访问权限。 |
灵活性 | 大小通常在创建时固定,调整需在存储端操作,可能影响较大。 | 高度灵活。支持在线扩容、缩容(如LVM)、快照、精简配置等,调整相对便捷。 |
典型技术栈 | FC-SAN, iSCSI-SAN, FCoE, 磁盘阵列管理界面。 | ext4/xfs/NTFS文件系统,LVM,K8s PV/PVC,NAS协议(NFS/SMB)。 |
在实际架构中,它们常常协同工作:
例如,一个SAN存储划分出一个1TB的LUN,提供给一台ESXi主机;
ESXi将其格式化为VMFS数据存储;
管理员在此数据存储上创建一个500GB的虚拟磁盘(VMDK),并分配给一个虚拟机;
该虚拟机操作系统将这个VMDK识别为一块新“硬盘”,
并在其上创建一个NTFS格式的Volume,最终作为D盘供用户使用。
这个链条完美展示了从LUN到Volume的完整价值传递