深入浅出 Kafka(二)磁盘的基本概念


在谈这俩概念前、先来说说大 I/O 与小 I/O。通常,我们把 <=16KB 的 I/O 认为是小 I/O。而 >=32KB 的 I/O 认为是大 I/O。

当前大多系统使用的都是传统的机械磁盘。因此,整个系统设计要尽可能顺序I/O。避免昂贵的寻道时间和旋转延迟的开销。随机小 I/O 消耗比顺序大 I/O 更多的处理资源。随机小 I/O 更在意系统处理 I/O 的数量,即 IOPS,比如 OLTP。而顺序大 I/O 则更在意带宽,即 MB/s,比如 OLAP。因此,如果系统承载了多种不同的应用,必须了解它们各自的需求,是对 IOPS 有要求,还是对带宽有要求。

传统机械磁盘最大的问题在于读写磁头,读写磁头的存在可以让磁盘既能顺序 I/O、也可随机 I/O。但是,随机 I/O 需要花费昂贵的磁头旋转和定位来查找。因此,顺序 I/O 访问的速度远远快于随机 I/O。

顺序读写 = 读取一个大文件

随机读写 = 读取多个小文件

顺序读写比随机读写快的原因:

  1. 顺序读写 主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
    随机读写 需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。
  2. 顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面。
    随机读写 因为数据没有在一起,将预读浪费掉了。
  3. 文件系统的 overhead 读写一个文件之前,得一层层目录找到这个文件,以及做一堆属性、权限之类的检查。写新文件时还要加上寻找磁盘可用空间的耗时。对于小文件,这些时间消耗的占比就非常大了。
分享:

评论