当前位置:网站首页>云存储硬核技术内幕——(13) 抓手,组合拳与闭环
云存储硬核技术内幕——(13) 抓手,组合拳与闭环
2022-08-04 15:37:00 【用户8289326】
在上期,我们提到了,Ceph存在一些经济性和可用性方面的缺陷:
- 物理硬盘损坏的时候,只能自动恢复到指定的单一物理硬盘,或手工替换新盘才能启动恢复;
- 单个物理磁盘空间耗尽的时候会引起整个集群停止工作;
- 集群规模过大时,集群分裂导致业务不可用的可能性大大增加;
因此,业界也出现了一系列其他分布式存储系统,最常见的是HDFS、GlusterFS和Openstack Swift。
HDFS是Hadoop生态的一部分,最初的设计用于hadoop处理的海量数据的持久化存储。
我们在前期提过,所有分布式存储系统都需要解决三个问题:
1、如何把整块的数据切分成小块?
2、应该把切分好的数据存到哪几个物理节点上的哪几块盘,当磁盘或节点故障的时候应当怎么办?
3、海量计算节点如何访问数据,访问的时候如何能够找到数据所在的目的节点和磁盘?
HDFS的解答是:
1、默认切成128MB的大块;
2、默认使用三副本保存,使用一致性哈希算法实现负载均衡(一致性哈希我们以后会介绍);
3、计算节点通过在节点上部署客户端,通过Posix接口(可以理解为NFS)进行访问。客户端需要去namenode获取到目标文件所在的节点和磁盘,再读取数据;
我们可以分析出HDFS的长处和缺陷:
擅长存储海量数据;支持数据冷-温-热分层;存取大文件时吞吐量可以随节点数线性扩展;
对大量中小文件(10MB以下)不友好,空间浪费严重;Namenode限制大量小文件存取的性能;
GlusterFS与HDFS有类似的地方,由于舍弃了namenode的设计,在一定程度上提升了小文件存取效率,但可能有一致性的问题。
对HDFS和GlusterFS有一定了解的同学可能会发现,HDFS/GlusterFS对计算节点提供的访问方式,与Ceph提供的挂载RBD块的访问方式有非常大的区别:
Ceph提供三种访问方式:块存储,文件存储,对象存储。
块存储我们在前面有了较为详细的拆解,Linux操作系统可以在块存储上自行建立文件系统,可以按逻辑块(扇区)方式对块进行访问。对于某些数据库(大家猜猜看有哪些),甚至可以绕过操作系统,直接访问块存储的扇区。
文件存储的访问方式为Posix接口。
什么是Posix接口呢?
我们知道,所有的Linux或Unix操作系统,对文件的操作有以下几种:
open(),返回的是文件fd(文件句柄,又称“抓手”);
read(),通过文件fd读取指定长度的内容;
write(),通过文件fd写入指定长度的内容;
ioctl(),通过文件fd对文件进行其他操作,如物理设备控制;
以上read/write/ioctl三个函数可以称为“组合拳”。
close(),调用文件fd关闭文件,此时才能保证写入的内容真正落盘,称为“闭环”。
有了这几个函数,就可以不需要关注存储底层逻辑,使用简单易懂的接口访问文件了。
因此,Linux对文件的读写,可以用一句话概括:
获取抓手,应用组合拳,抽离底层逻辑,形成闭环。
在NAS中,最小的资源分配单位是文件,而不是块。那么,如果需要在NAS存储上跑数据库,每次对数据库的写入,为了保证写入操作能落盘,都需要重复一次“获取抓手,应用组合拳,形成闭环”的过程,其开销是可想而知的。
HDFS和GlusterFS提供的都是NAS存储,可想而知地,用于数据库场合就不合适了。
因此,无论是私有云还是公有云,如果想把分布式存储应用到生产环境,需要满足下面几个条件:
1、提供高可靠的块存储,可分为高性能与低成本等不同种类;
2、块存储的扩容对整个集群的可用性不造成影响,性能可随着扩容线性扩展;
3、可以提供云盘快照等增强数据安全性的功能;
在下期,我们将用一个栗子来看看,生产与运营级别的分布式存储是如何满足这些条件的。
边栏推荐
猜你喜欢
FTP协议抓包-工具wireshark与filezilla
##ansible自动化运维架构与简介
Legal education combined with VR panorama, intuitively feel and learn the spirit of the rule of law
【云原生 | 从零开始学Kubernetes】kubernetes之StatefulSet详解
从-99打造Sentinel高可用集群限流中间件
RepVGG学习笔记
GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
界面组件DevExpress ASP.NET Core v22.1 - 增强数据导出功能
实战:10 种实现延迟任务的方法,附代码!
如何防止重复下单?
随机推荐
Online Excel based on Next.js
Nuget 通过 dotnet 命令行发布
李沐的深度学习笔记来了!
GPS satellite synchronization clock, NTP network synchronization clock, Beidou clock server (Jingzhun)
西安纵横资讯×JNPF:适配中国企业特色,全面集成费用管控体系
Jupyter常用操作总结(强烈建议收藏,持续更新实用操作)
多商户商城系统功能拆解24讲-平台端分销会员
剑指Offer 63.股票的最大利润
How to monitor code cyclomatic complexity by refactoring indicators
Xi'an Zongheng Information × JNPF: Adapt to the characteristics of Chinese enterprises, fully integrate the cost management and control system
Redis-主从复制
GET 和 POST 请求的区别
AIX7.1安装Oracle11g补丁33829709(PSU+OJVM)
攻防视角下,初创企业安全实战经验分享
SublimeText 粘贴图片保存到本地
tif转mat
Http-Sumggling缓存漏洞分析
Redis-哨兵模式
DocuWare平台——用于文档管理的内容服务和工作流自动化的平台(上)
C端折戟,转战B端,联想的元宇宙梦能成吗?