高可用存储架构的设计与思考

高可用是衡量一个系统架构设计的重要指标,无论是业务系统,还是业务开发中,使用的中间件,在实现的过程中都会将系统的可用性,作为一个重要考量指标。而数据存储系统又是我们在业务开发过程中,最经常使用的一个中间件之一。下面我们就来学习一下,存储系统的高可用架构方案设计。

目前,业界对于存储系统的高可用方案设计都是通过将数据进行冗余备份。冗余备份主要就是降低,当某个节点或者部分节点的故障后,对系统整体的影响。
但是冗余备份的方案在设计和实现中,复杂性主要体现在如何应对多个副本之间数据的不一致。通常情况下,一份数据的多个副本会存放到不同的服务器上,不同服务器的数据同步复制都是采用网路通信来实现,而在网络通信过程中,网路的中断,网络延时等问题都是很难避免的。因此设计一个高可用的存储架构,通常会考虑以下几个方面:
1.数据如何复制
2.各个节点的职责是什么
3.如何应对数据复制过程中,网络延时和中断,导致数据复制的不及时,导致多副本数据不一致。

目前,业界常见的存储高可用设计方案两种:双机主备和集群。

双机架构

双机架构是指用两个服务器来承担一个服务器的的工作,根据两个服务器所扮演的角色不同,又可以分为以下三种架构设计。

主备复制

主备架构比较简单,架构中,备机平时的工作就是从主机同步数据,并不对外提供服务,仅仅起到一个备份作用,当主机宕机后,备机才会升级为主机,通常主备转换的操作,需要人工介入。架构图如下:
在这里插入图片描述

优点:
客户端无需感知,备机的存在,当主备切换后,对于客户端来说,只是会认为主机地址换了而已。主备机之间关系很简单,仅仅进行数据的复制即可,无需进行状态判断。

缺点:
主备机同一时刻只能有一个对外提供服务,会造成资源浪费。

主备复制架构主要适用于,数据量不大,像 学生管理系统,内部的后台管理系统。

主从复制

主从架构中,从机需要为主机承担一些工作,主要就是客户端读请求的处理。从机承担的这些工作,需要主机提供支持:主机需要实时的将最新数据发送给从机,如果数据存在延迟的话,会影响从机的工作。此外客户端需要感知从机的存在,也就是遇到从机可以服务的业务,客户端要将请求发送给从机。架构图如下:

在这里插入图片描述

优点:
减少了资源的浪费,发挥了硬件性能。

缺点:
从机的读请求的处理会收到主从复制延迟的影响,
客户端需要感知存储系统的主从的关系。

主要适用于:写少读多的业务,例如论坛(发帖的少,看帖的多).

主主复制

主主复制架构是指两台机器互为主备,都将各自的数据复制给对方,客户端随便选择一个机器进行读写操作。两台都是主机,不存在切换的概念,客户端无需区分不同角色的主机。架构图如下:
在这里插入图片描述

从架构上来说,主主复制看似简单很多,无需状态信息传递,也无需状态决策和状态切换。不过主主复制的复杂度主要体现在业务数据能够支持这种双向复制。
在使用过程中,要防止双向复制过程中插入数据的重复,更新操作的相互的覆盖,如下两种业务场景就不太适合主主复制:

1.用户注册后生成的用户 ID,如果按照数字增长,那就不能双向复制,否则就会出现 X 用户在主机 A 注册,分配的用户 ID 是 100,同时 Y 用户在主机 B 注册,分配的用户 ID 也是 100,这就出现了冲突。

2.库存不能双向复制。例如,一件商品库存 100 件,主机 A 上减了 1 件变成 99,主机 B 上减了 2 件变成 98,然后主机 A 将库存 99 复制到主机 B,主机 B 原有的库存 98 被覆盖,变成了 99,而实际上此时真正的库存是 97。类似的还有余额数据。

集群方式

集群就是多个机器组合在一起,形成一个统一的系统,根据集群中机器承担的不同角色来划分,集群可以分为两类:数据集中集群,数据分散集群。

数据集中式集群

数据集中式集群与双机架构相似。数据都是只能往主机中写,而读请求发送给集群中其他节点。和双机方案不同的是:集中式集群中,从机的数量会更多一些,不是一主一从,而是一主多从。架构图如下:

在这里插入图片描述

集群中服务器的数据量增多,导致集中式集群方案的实现复杂度也更高,在集中式集群架构设计过程中,需要考虑一下三方面:

主机如何将数据复制给备机

在一主一从架构中,数据复制通道只有一条,而数据集中集群架构中,数据复制通道变多,多条复制通道会增加主机复制的压力,这个压力会影响主机对读写请求的处理。
除此之外,多条复制通道可能会导致多个备机之间数据不一致,

备机如何检测主机状态

在主从架构中,只有一台从机对主机进行状态判断,发现主机出现故障,从机就会切换成主机。但是在一主多从的架构中,多态从机都需要对主机状态进行判断,而不同从机对主机状态的判断可能不一样,如何处理这些不同的判断结果,是一个复杂的问题。

主机故障后,如何决定新的主机

主从架构中,主机故障后,从机直接会切换成主机,而在一主多从的架构中,多个备机都有可能升级为主机,但是主机只能有一个,该选择那个从机作为新主机,也是一个复杂的问题。

数据分散式集群

数据分散集群指多个服务器组成一个集群,每个服务器负载存储一部分数据,同时为了提升硬件利用率,每台服务器又会备份其他服务器上的数据。
数据分散集群的复杂点在于如何将数据分配到不同的服务器上。

均衡性

数据分配算法要保证每个服务器上分区数量基本均衡,不能出现一个服务上分区数量是两一个服务器中数据数据量的几倍。

容错性

当部分服务器出现故障是,算法应该能够感知故障的出现,将故障服务器上的分区,分给其他服务器。

可伸缩性

当集群容量不够,扩充新的服务器后,算法能够自动将部分数据分区迁移到新的服务器,并保证扩容后所有服务器上分区的均衡,而且扩容对客户端无感知。

总结

从以上多种高可用方案中,我们可以看到,任何一种方案,都有自己使用的场景和不足,任何一个方案的选择,都需要做权衡,也应了架构设计中的一句名言:任何脱离业务的架构大都是耍流氓。
redis是一个常用的分布式存储系统,那么他在高可用的设计,是怎么选择的呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值