分布式系统基本设计原理

分布式系统不只是看性能的好坏,还需要看一致性,可用性和可扩展性。

 1.性能的分析

一个分布式系统的产生一定是为了解决一个实际的问题。而解决实际的问题往往会有多套方案。性能就是重要指标之一。

方案设计之初,我们不能预知在正常运转情况下的准确数值。那么我们要做的是什么呢?

首先是设计的目标,只有目标明确了,我们才能明白该怎么取舍,进而如何取舍,如何防止方案的严重失误,还有在整个架构上的大的瓶颈。在设计方案做到能达到的最优之后,我们再去分析单机模块的瓶颈了。单机性能决定于cpu,内存,磁盘和网络,常见的问题如:dns故障,磁盘故障,网络通信故障等。有些故障是无法避免的,我们只有具体到一个故障,再去做相应的预处理方案尽量减少损失。还有一些不可预见的故障,就不详细讨论了。

一个分布式系统的一个集群有一个控节点,其它为工作节点工作节点通过心跳将相关信息发送给总控节点,总控节点根据反馈回的信息来计算出工作节点的负载情况和需要迁移的任务或数据。需要注意的是我们不能把宕掉机子上的任务一次性全部放到生成的迁移队列中,一定要平稳的分配任务,以防负载最低的这台机器一下接受过多的任务降低服务的性能。负载均衡执行迁移操作过程三步:1.把主备副本互换,主副本变成备用的,备副本变成主副本执行数据任务。2.增加一个节点,把原主副本数据复制到新增节点上,并且保持数据的同步性。3.删除原主副本。ok,完成!

再往下数据层面就是数据存储和哈希分布了。一个优秀的设计方案一定要清楚write和read花费的时间,数据分布,哈希分布,顺序分布。

2.一致性

当前我们不能做到保证数据单机不丢失,我们只能尽量减少数据丢失的风险-----把数据多备份同时考虑冗余。

多机备份数据,如何避免数据丢失,保证数据同步?两种方式:强一致性和异步一致。

强同步复制就是client先write到主机,然后主机再write到备份,备份完成后发消息到主机然后主机再反馈client,数据存储完成。

异步复制是client先write到主机,然后主机反馈client数据存储完成,同时主机write到备份。

强同步复制能保证一致性,但是在效率上显而易见不如异步复制性好,而异步复制在备份写入时候存在风险,相较于强同步复制容易丢失数据。

而复制的过程是基于主副本的复制协议(Primary-based protocol),这要求在主副本宕掉之后只能有一个备用副本成为主副本这个过程就是选举。

3.可用性

可用性就是在集群部分机器出现故障时候不影响整个机群的工作,能够自动容错。既然能够自动容错也就意味着一致性和数据write操作的可用性不能同时满足!

在一致性中如果采用强同步复制设计方案,那么如果出现集群内部网络故障或其它通信故障,这意味着我们所有的write操作都将失败,如果用异步复制我们将无法保证数据的强一致性。因此我们需要做出权衡,在哪些场景下需要强同步复制;那些场景下不需要;那些情况需要折中(那些场景下允许丢失数据,那些情况下不允许丢失数据)。

可用性中另外一方面就是容灾容错故障修复。在分布式的场景下,单机故障几率不高,但是在规模足够大的集群中,随时都可能出现故障,我们的分布式系统需要能够自动检测到故障,并且自动处理。检测故障一般通过租约协议(lease)实现,系统需要将故障节点的数据复制或迁移到集群中其它正常工作的节点储存。

故障检测依仗的是心跳机制,需要小心的是如果工作节点过于繁忙导致无法响应主节点,从而使主节点判定该工作节点为故障节点把任务重新分配到了另外一个工作节点从而导致数据不一致的情况。怎么才能确诊为故障节点呢?在我们实际的工作中由于机器之间会进行时间同步,主从节点时间相差是非常小的。因此我们可以通过租约(Lease)机制进行故障检测。需要注意的是实现租约机制是需要一个提前量的,以防主从节点时间间隔出现误判定。

常见的分布式存储系统分为两种:单层结构和双层结构。单层结构的主备副本是通过操作日志进行同步的。只有类Bigtable系统为双层结构(服务层和数据分片)每个服务层只负责固定的数据分片,它的好处在于服务层故障只需要更换节点加载数据分片的索引,不需要把所有数据都加载到内存中,恢复时间较快。

4.可扩展性

主流的分布式系统大多有主控节点,支持大集群规模,而传统的数据库也可以通过增加存储节点来扩容。分布式存储系统的可扩展性更多的体现在节点故障后的修复时间,扩容后的自动化程度和扩容的灵活性等。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值