学习笔记-架构的演进之k8s的存储生态系统-3月day11

2023-11-03

前言

随着 Kubernetes 的 CSI 规范成为容器业界统一的存储接入标准,现在几乎所有的云计算厂商都支持自家的容器通过 CSI 规范去接入外部存储,能够应用于 CSI 与 FlexVolume 的存储插件更是多达数十上百款,下图就展示了部分容器存储提供商,可以说,容器存储已经算是形成了初步的生态环境。
在这里插入图片描述
目前出现过的存储系统和设备,都可以划分到块存储、文件存储和对象存储这三种存储类型之中,其划分的根本依据不是各种存储是如何储存数据的,而是各种存储会提供什么形式的接口来供外部访问数据,不同的外部访问接口会反过来影响存储的内部结构、性能与功能表现。
虽然块存储、文件存储和对象存储可以彼此协同工作,但它们各自都有自己明确的擅长领域与优缺点。所以,只有理解它们的工作原理,因地制宜地选择最适合的存储,才能让系统达到最佳的工作状态。

块存储

块存储是数据存储最古老的形式,它把数据都储存在一个或多个固定长度的块(Block)中,想要读写访问数据,就必须使用与存储相匹配的协议(SCSI、SATA、SAS、FCP、FCoE、iSCSI……)。

你可以把存储设备中由块构成的信息流,与网络设备中由数据包构成的信息流进行对比。事实上,像 iSCSI 这种协议真的就是建设在 TCP/IP 网络之上,让上层以 SCSI 作为应用层协议对外提供服务的。
硬盘就是最经典的块存储设备,以机械硬盘为例,一个块就是一个扇区,大小通常在 512 Bytes 至 4096 Bytes 之间。老式机械硬盘用柱面 - 磁头 - 扇区号(Cylinder-Head-Sector,CHS)组成的编号进行寻址,现代机械硬盘只用一个逻辑块编号(Logical Block Addressing,LBA)进行寻址。

为了便于管理,硬盘通常会以多个块(这些块甚至可以来自不同的物理设备,比如磁盘阵列的情况)来组成一个逻辑分区(Partition),将分区进行高级格式化之后就形成了卷(Volume)。
块存储由于贴近底层硬件,没有文件、目录、访问权限等的牵绊,所以性能通常都是最优秀的(吞吐量高,延迟低)。

操作系统内核中,许多地方就是直接通过块设备(Block Device)接口来访问硬盘,一些追求 I/O 性能的软件,比如高性能的数据库也会支持直接读写块设备以提升磁盘 I/O。块存储具有排它性,一旦块设备被某个客户端挂载后,其他客户端就无法再访问上面的数据了。因此,Kubernetes 中挂载的块存储,大多的访问模式都要求必须是 RWO(ReadWriteOnce)的。

文件存储

文件存储是最贴近人类用户的数据存储形式,数据存储在长度不固定的文件之中,用户可以针对文件进行新增、写入、追加、移动、复制、删除、重命名等各种操作,通常文件存储还会提供有文件查找、目录管理、权限控制等额外的高级功能。(更像是文件系统)
POSIX接口(Portable Operating System Interface,POSIX)已经成为了文件存储事实标准,被各种商用的存储系统和操作系统共同支持。
绝大多数传统的文件存储都是基于块存储之上去实现的,我们可以近似地认为文件是由块所组成的更高级存储单位,对于固定不会发生变动的文件,直接让每个文件连续占用若干个块,在文件头尾加入标志区分即可,就比如像磁带、CD-ROM、DVD-ROM,就采用了由连续块来构成文件的存储方案。
对于可能发生变动的场景,我们就必须考虑如何跨多个不连续的块来构成为文件。这种需求从数据结构的角度看,只需要在每个块中记录好下一个块的地址,形成链表结构就能满足。但是链表的缺点是只能依次顺序访问,这样访问文件中的任何内容都要从头读取多个块,这显然过于低效了。
被广泛运用的解决方案是把形成链表的指针整合起来统一存放,这就是文件分配表(File Allocation Table,FAT)。既然已经有了专门组织块结构来构成文件的分配表,那在表中再加入其他控制信息,就能很方便地扩展出更多的高级功能。比如除了文件占用的块地址信息外,在表中再加上文件的逻辑位置就形成了目录,加上文件的访问标志就形成了权限,我们还可以再加上文件的名称、创建时间、所有者、修改者等一系列的元数据信息,来构成其他应用形式。

我们把定义文件分配表应该如何实现、储存哪些信息、提供什么功能的标准称为文件系统(File System),FAT32、NTFS、exFAT、ext2/3/4、XFS、BTRFS 等都是很常用的文件系统。而前面提到的对分区进行高级格式化操作,实际上就是在初始化一套空白的文件系统,供后续用户与应用程序访问

文件存储相对于块存储来说是更高层次的存储类型,加入目录、权限等元素后形成的树状结构以及路径访问的方式,方便了人们对它的理解、记忆和访问;文件系统能够提供进程正在打开或正在读写某个文件的信息,这也有利于文件的共享处理。

但在另一方面,计算机需要把路径进行分解,然后逐级向下查找,最后才能查找到需要的文件。而要从文件分配表中确定具体数据存储的位置,就要判断文件的访问权限,并要记录每次修改文件的用户与时间,这些额外操作对于性能产生的负面影响也是无可避免的。因此,如果一个系统选择不采用文件存储的话,那磁盘 I/O 性能一般就是最主要的原因。

对象存储

对象存储是相对较新的数据存储形式,它是一种随着云数据中心的兴起而发展起来的存储,是以非结构化数据为目标的存储方案。

这里的“对象”可以理解为一个元数据及与其配对的一个逻辑数据块的组合,元数据提供了对象所包含的上下文信息,比如数据的类型、大小、权限、创建人、创建时间,等等,数据块则存储了对象的具体内容。你也可以简单地理解为数据和元数据这两样东西共同构成了一个对象。

每个对象都有属于自己的全局唯一标识,这个标识会直接开放给最终用户使用,作为访问该对象的主要凭据,通常会是以 UUID 的形式呈现。对象存储的访问接口就是根据该唯一标识,对逻辑数据块进行的读写删除操作的,通常接口都会十分简单,甚至连修改操作权限都不会提供。

对象存储基本上只会在分布式存储系统之上去实现,由于对象存储天生就有明确的“元数据”概念,不必依靠文件系统来提供数据的描述信息,因此,完全可以将一大批对象的元数据集中存放在某一台(组)服务器上,再辅以多台 OSD(Object Storage Device)服务器来存储对象的数据块部分。

当外部要访问对象时,多台 OSD 能够同时对外发送数据,因此对象存储不仅易于共享、拥有庞大的容量,还能提供非常高的吞吐量。不过,由于需要先经过元数据查询确定 OSD 存放对象的确切位置,这个过程可能涉及多次网络传输,所以在延迟方面就会表现得相对较差。
数据传输的吞吐量和延迟性
由于对象的元数据仅描述对象本身的信息,与其他对象都没有关联,换而言之每个对象都是相互独立的,自然也就不存在目录的概念,可见对象存储天然就是扁平化的,与软件系统中很常见的 K/V 访问相类似。

总结

从目前的存储技术发展来看,其实不会有哪一种存储方案能够包打天下。你要知道,不同业务系统的场景需求不同,对存储的诉求就会不同,那么选择自然也会不同。
以亚马逊销售材料中三种存储的对比为例:
在这里插入图片描述

此文章为3月Day11学习笔记,内容来源于极客时间《周志明的软件架构课

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习笔记-架构的演进之k8s的存储生态系统-3月day11 的相关文章

随机推荐

  • rsync远程同步

    目录 一 概念 二 rsync 同步源的过程 1 下行同步 2 上行同步 三 rsync 的特性 四 rsync同步之下行同步实验演示 五 rsync同步之上行同步 结合inotify监控的实验演示 六 使用rsync来实现快速删除大量文件
  • MyBatis02:MyBatis的CRUD操作及配置解析

    回顾上一章 MyBatis01 第一个程序 namespace 将上面案例中的UserMapper接口改名为 UserDao 将UserMapper xml中的namespace改为为UserDao的路径 再次测试 结论 配置文件中name
  • vcruntime140.dll缺失的解决方法分享,快速修复vcruntime140.dll文件

    当你在运行某些应用程序或游戏时遇到vcruntime140 dll缺失的错误提示 可能会导致应用程序无法启动或执行 vcruntime140 dll是与Microsoft Visual C Redistributable相关的一个重要系统文
  • win10安装破解软件提示病毒并且删除安装软件,暂时关闭安全检查

    1 左击屏幕左下角 找到系统设置 2 点击进入 更新和安全 3 点击 windows 安全 再 点击 病毒和威胁防护 4 点击设置 5 关闭 实时检查 6 安装完毕后一定重新开启 否则后果自负
  • PMOS开关电路

    本次项目上需要实现的功能是利用AO3401 PMOS设计一个开关电路 实现一款设备的开关控制 被控设备12V供电 供电电流小于3A即可 且为了提高响应速度 使流过该设备的电流尽可能的大 该设备内阻大约为6ohm AO3401产品参数 VDS
  • HTTP超详细教程

    1 HTTP协议 1 1 HTTP简述 HTTP全称为超文本传输协议 是一种应用比较广泛的应用层协议 那何为超文本 超文本指的是传输的内容不仅仅是文本 比如 html css javaScript 等数据 还可以是一些其他的资源 比如图片
  • AI修复人像

    一 前言 最近闲来无事 翻了翻以前的老照片 看着多年前的老照片 感慨万千 仿佛又回到了以前的青春岁月 只可惜青春易逝 无法重来 意气风发 头角峥嵘的画面只能永远地留存在相片之中了 只叹当时没有多拍几张照片留作纪念 可惜当时设备也不好 照片效
  • 【Linux】低级IO

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 文件的概念 二 C语言文件操作回顾 三 使用系统调用进
  • 山大网安靶场实验平台项目—个人记录(一)

    系列文章专栏地址 山东大学网络安全靶场实验平台 本期内容 完成项目框架设计 学习vue和element ui 了解基本语法 编写前端页面 组件 学习springboot为写后端作准备 项目框架设计 time 3 days 首先我们这个项目是
  • Vue3功能实战 —— 动态路由、路由签权、动态组件 使用示例

    前期回顾 Vue3 TS Vite 大屏可视化 项目实战 vue3可视化大屏 彩色之外的博客 CSDN博客大屏可视化项目实战 vue3可视化大屏https blog csdn net m0 57904695 article details
  • zabbix6.2.4企业微信群机器人告警

    zabbix6 2 4企业微信群机器人告警 基于https blog csdn net stars moon1024 article details 123042369调试 创建媒介 脚本如下 var Wechat token null t
  • linux 怎么样复制文件夹内所有文件到另一个文件夹?

    cp Rf home user1 root temp 将 home user1目录下的所有东西拷到 root temp 下而不拷贝user1目录本身 即格式为 cp Rf 原路径 目的路径
  • 集成底座双K8S集群扩展升级方案

    集成底座方案是应用于企业信息化建设的集成整合阶段 通过建立统一 标准 柔性 可复用 可扩展的IT架构 解决企业信息化建设过程中缺乏整体规划 集成整合难度大 安全管控不到位等问题 强化企业信息化的架构建设 集成整合 数据治理 安全管控的水平
  • 腾讯测开笔试题

    测开笔试题分享 一个数组里面有混序的正负数 按照以下要求重新排列 1 按照正负间隔的顺序排列 2 同一个符号的数相对顺序不变 3 若某一个符号的数较多 按原顺序放在最后 例如输入 1 2 3 7 9 5 3 4 7 8 11 3 2 期望输
  • .Net WinForm 中关于输入法打开却无法输入中文总结

    根据前面的兄弟们解决方法我做了下总结 希望对以后遇到此问题的同行提供点帮助 大家如果还有好的方法也请回复提供我 共同学习 出现这个问题时我的输入法设置为 注意我这里使用简体中文美式键盘 然后我删除了简体中文美式键盘 添加了英语 美国 美式键
  • Git命令语句

    一 关于Git 1 Git介绍 Git是一个开源的分布式版本控制系统 用于敏捷高效的处理任何或大或小的项目 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件 版本控制 版本控制是一种在开发
  • Android ActionBar的基本用法

    本文翻译了这篇文章 Using the Android action bar ActionBar Tutorial 1 ActionBar的简介 ActionBar位于Activity的顶部 可用来显示activity的标题 Icon Ac
  • 一周AI看点

    本期一周AI看点包括 技术前沿 行业 观点 应用以及投融资等方面 技术前沿 CCAI 2017 香港科技大学计算机系主任杨强 论深度学习的迁移模型在7月22 23日举办的CCAI 2017上 香港科技大学计算机与工程系主任 AAAI Fel
  • 案例:使用seaborn分析泰坦尼克号生还者数据

    目录 一 数据来源 数据的导入 二 主要分析的内容 定义问题 泰坦尼克号乘客基本信息分布情况 乘客的信息与生还数据是否有关联 三 数据清洗 3 1 查看是否有缺失值 3 2 查看数据基本信息 3 3 绘制年龄分布图 通过seaborn的di
  • 学习笔记-架构的演进之k8s的存储生态系统-3月day11

    文章目录 前言 块存储 文件存储 对象存储 总结 附 前言 随着 Kubernetes 的 CSI 规范成为容器业界统一的存储接入标准 现在几乎所有的云计算厂商都支持自家的容器通过 CSI 规范去接入外部存储 能够应用于 CSI 与 Fle