您的位置  > 互联网

分布式存储系统2.1需要解决的典型问题及解决办法!

1、独立存储系统

单机存储系统提供的最基本的功能是存储数据并检索数据;

为了更好的用户体验,提出可用性、可靠性、性能等扩展需求;

可用:随时可用,想存就取,想取就取;

可靠性:取出的数据是之前存储的数据;

性能:越快越好,一般指延迟;

随着业务量的增长,单机存储系统将受到容量、网络、计算、内存等物理限制。 我们可以通过扩展来提高存储能力;

随着业务量不断增长,扩展单机的能力已经不能解决当前的问题,需要横向扩展,这就催生了分布式存储系统的引入;

2.分布式存储系统

2.1 需要解决的典型问题

使用简单的IO流程,用户第一天写入数据,第二天需要读取。 在此时间窗口内发生存储节点故障,分析分布式存储系统需要解决的典型问题:

首先,用户写入的数据存储在哪里? 资料整理; 那么,如何查找故障节点呢? 集群状态管理; 其次,节点故障概率增大(数量大/质量差),需要通过多副本/EC保证冗余来保证可用性/可靠性; 分布式一致性; 最后,如何快速部署/更改大批量节点/问题定位是一个非常困难的问题; 分布式运维;

这里不会讨论可扩展性要求。 需要根据外部业务模型/系统架构/代码实现进行具体分析。 每个系统的要求/GAP不同;

2.1.1 数据排列(路由)

集中式:中心节点/集群负责存储空间的分配

优点:从上帝的角度来看,写入时可以实现容量/负载均衡,故障复制流程控制也简单,写入可用性高(写入时分配空间,分配给故障节点的可能性低),背景影响小;

缺点:元数据相对较多,写入前后/读取前需要与中心节点交互。 中心节点容易成为瓶颈,水平扩展能力比较差;

分布式:使用()通过一定的规则将key映射到虚拟节点,然后记录虚拟节点与节点之间的映射关系,如(一致性hash/range/CRUSH);

优点:元数据少,水平扩展能力强;

缺点:前后流控制难以控制;

综上所述,一般采用集中式数据排列的系统,在系统规模/并发上会存在明显瓶颈,例如HDFS/盘古,但也可以通过嵌套多层集中式数据排列来解决问题,例如分布式存储系统数据排列可以更好地支持大规模业务,复杂度更高,例如使用hash的DFV Layer/Azure、使用range的各种kv数据库、使用CRUSH的ceph等;

一般为了减少数据布局中的元数据量,会采用取值较大的解决方案来减少key的数量,如大blob/plog/file等;

2.1.2 集群状态管理

分布式存储系统中某个节点的不可用将会影响整个系统的外部可用性。 因此,节点健康状态检测时间窗口(一般称为心跳)的大小对分布式存储系统影响很大;

因此,需要根据业务需求和规模进行妥协;

另外,除了节点软硬件造成的心跳丢失之外,一个好的系统还需要监控亚健康,包括但不限于:网络亚健康/IO亚健康/磁盘亚健康(慢盘/热盘/故障前)(盘),一般采用大小周期进行检测。 例如,如果在一个小周期内达到了某个标准,则判断该小周期已达到标准。 如果大周期中的小周期数量达到一定标准,则判断大周期已达标;

2.1.3 分布式一致性

分布式一致性主要解决不同节点对同一份数据有相同理解的问题,即副本/EC一致;

一般分为端到端一致性和端到端一致性:

根据复制发生点的不同,端一致性分为端路由和端路由:

一般来说,端路由包括几种典型的复制方式:

实际一致性的选择是一种妥协,因为CAP理论是不可逾越的,我们只能在C/A之间妥协,或者在C一定的情况下,在读写可用性之间妥协,或者在前后端之间妥协;

2.1.4 分布式运维

很多人忽视了运维的重要性,这确实是一个遗憾。 分布式运维是一套系统工程,简直太重要了。 还有可以复制的套路。 平台建设主要分为五个阶段:

1个平台:

运维平台,包括运营(SLA/成本/容量/数据展示)、运维(监控/报警/部署/变更/机器管理/版本/检测/日志分析)、接入系统(工单申请/生态系统建设) ) )

5个阶段:

2.2 系统架构

任何存储系统,从架构上看,都包含三层:访问层、数据存储层、元数据存储层; 如果分布式存储系统注重性能,一般还包括独立的存储引擎;

2.2.1 接入层

主要负责语义、负载均衡、租户隔离、生态建设。 它可以将分布式一致性相关逻辑下沉到数据存储/元数据存储层。 接入层可以基于单副本语义更加灵活,构建更丰富、更通用的业务。 类型,提高业务粘性;

2.2.2 数据存储

主要负责分布式一致性相关数据和逻辑的共享存储;

2.2.3 元数据存储

主要负责元数据和交易相关逻辑的共享存储,通常是小型KV数据库(结构化/半结构化/非机构),半结构化更适合新业务;

2.2.4 独立存储引擎

主要负责介质上的单机业务模型, ////vdb/fs等,根据不同介质(内存/HDD/SSD/SCM/SRM等)以及外部读写业务差异,来适应不同的业务场景;

通过以上分析,结合外部实际业务场景,我们可以构建不同的存储系统,如数据库/HDFS/文件/对象/块/消息队列/缓存等;