大型分布式系统架构总结!

本文总结了大型分布式系统的关键点,包括数据分布、负载均衡、副本一致性、异常处理和容错机制,以及分布式协议如Paxos和两阶段提交。讨论了哈希分布和顺序分布的优缺点,强调了负载均衡的重要性,介绍了心跳包和租约机制作为故障检测手段。
摘要由CSDN通过智能技术生成

分布式系统,

顾名思义,数据是分布在不同的节点上,那么数据分布就是首先需要考虑的一点。

1、数据如何均匀分布到不同的节点上,涉及到负载均衡

2、为了保证数据的可靠些,需要对数据设置多个副本,那么如何保证副本之间的一致性

3、节点是廉价的pc机,如果节点宕机,那么如何自动检测,并迁移数据

分布式最基础的两个协议,一个是paxos选举协议,一个是两阶段提交协议。

paxos选举协议:用于在多个节点中选举一个总控节点

两阶段提交协议:保证在多个节点中事务操作的原子性,要么完全成功,要么全部失败。

大型分布式系统架构总结!

分布式系统的异常

分布式系统中各个节点都需要认为是可靠的,所以需要有一套机制,来保证不可靠的情况下数据是如何迁移的,如何快速恢复的,那么在分布式系统是如何完成的,诸如这些问题,首先还是要知道分布式的异常来自于哪些?

1、异常:服务器的宕机、网络的异常、磁盘的故障

2、网络超时:网络异常在分布式系统中是一定存在的,所以分布式系统的处理结果存在三态的概念,如果某个节点像另外一个节点发起调用,那么这个调用执行的结果只有三种状态,成功、失败、超时三种状态。处理这种超时的状态也是需要涉及考虑的一部分。

大型分布式系统架构总结!

分布式系统中的一致性

分布式中为了处理容错,发生故障的数据恢复问题,一般容错采用的是多副本策略,即当一个节点出现故障的时候,可以从其他的副本读取数据,保证副本的有效性。

在分布式中如何保证多个副本的一致性呢?这也是需要解决的问题

一致性主要分为以下三个等级:

1、强一致性:某个节点写了数据,其他节点读取操作都一定会返回最新的数据值

2、弱一致性:某个节点写了数据,不能保证其他后续的节点读取操作可以返回最新的值

3、最终一致性:某个节点写了数据,在之后的某一段时间内,其他节点读取操作都一定会返回最新的数据值,超过这段时间可能不会。

大型分布式系统架构总结!

分布式系统中的数据分布

由于数据是分布在不同节点上,那么数据分布是分布式必须要考虑的一点,数据部分主要有两种:

1、哈希分布,例如一致性哈希分布

2、顺序分布:将一个整体顺序的大表,按照顺序划分为各个子表,然后把各个子表分到不同的节点上。

对于数据分布中重要的一点是需要完成自动的负载均衡,就是分布式系统能够自动识别各个节点的负载情况,迁移各个负载之间的数据,保证各个节点之间数据是均衡。

1、哈希分布:

哈希分布的思想很简单,根据数据的某一个特征计算哈希值,哈希值对应了服务器的节点,从而根据映射的不同哈希值分布在不同的服务器上。

优点:

哈希的方式可以很均匀的将数据分散在不同的集群中,而且哈希方式需要记录的原信息也非常小,只需要计算哈希函数的计算方式即可。

缺点:

找到一个很好的哈希函数很难,因为选择什么样的数据特征进行散列是非常难的,例如如果使用主键散列,那么同一个用户的id下的主键就被散列在不同的服务器上,那么同一个用户id下的操作就会涉及到多个服务器的使用,这会变得很困难。同样使用用户id进行散射的话,可能导致某个服务器上数据量很大,出现倾斜。

当服务器出现下线和上线的时候,哈希函数映射将完全的打乱,这个时候几乎所有的数据都需要重新的迁移分布,会带来大量的迁移开销

改进:

上面传统的哈希方法多多少少都会带来两个缺点,那么如何改进呢,下面给出了比较常见的改进措施:

1、不再讲哈希值和服务器直接映射,而且将哈希值和服务器作为元数据进行存储,专门设置一个元数据服务器,当数据访问的时候,首先去元数据服务器上找对应哈希的服务器,那么当集群增加或者减少的时候,可以将部分的映射哈希值分配给新的机器即可,不需要重新动其他的机器上的数据。

2、第二种方式就是一致性哈希算法,该算法将所有的服务器构成一个环,并给这些服务器随机分配token值,通过数据的主键计算哈希值,然后比较这个哈希值和token值,顺时针将该数据放置在大于token值的第一个节点上。当增加或者减少服务器时,影响的只是该节点相邻的节点,不会影响到其他的节点上。

同时引入虚拟节点技术,可以保证数据在哈希环上不会发送倾斜。

2、顺序分布

哈希分布虽然有优点,但是它致命的是不能支持顺序的扫描操作,因为数据是随机分布的,只支持堆积读取操作,需要支持顺序扫描操作的分布式存储系统上,数据的分布使用的一般是顺序分布的操作,这种操作很简单,就是将一个大表装换称为许多个小表。需要额外考虑的时,在分成很多小表的时候,需要定期进行合并小表,特别是那些无效的表,防止系统中出现过多的太小的子表。

大型分布式系统架构总结!

分布式系统中负载均衡

分布式系统中每个集群之间一般存在一个总控节点,这个总控节点负责根据全局的负载信息进行整体的调度管理,当一个节点发生异常的时候,这个时候总控节点负责检测出,并且生成迁移任务放入迁移队列中。

看起来这种总控节点可以解决这个问题,那么如果总控节点本身发送了故障怎么办???

这个时候会采用分布式系统常见的poxia选举协议,从其他的节点中选举一个作为新的总控节点。

负载均衡中还会涉及到复制技术,简单来说,就是多副本复制的技术,节点不能将数据直接复制给多个副本,那么这个时候可能复制多副本的时间长,阻塞了原本的正常写服务,系统的可用性就受到影响。

分布式中存放多个副本,首先选取一个副本为主副本,其他副本为备副本,常见的做法是客户端首先将数据写入到主副本,然后有主副本按照顺序复制到其他的副本上。

分为强同步和异步复制:

强同步

整个流程如下:

1、客户端将写的请求发送给主副本,

2、主副本首先将操作日志同步到各备副本,同步成功后发给主副本

3、主副本成功后发回给客户端。

异步复制:

1、客户端将写的请求发送给主副本,

2、主副本写完即返回给客户端,不关系背副本是否同步成功

大型分布式系统架构总结!

分布式系统中的容错机制

在分布式系统中,每天都可能发送故障,如果去检测这些故障,并且恢复这些故障是很重要的

常见检测故障的方法有以下几种:

1、心跳包,不同的发送心跳包,有回复则是好的,没有回复就是坏的。

2、租约机制,机器A检测B是否发生故障,没有发生故障就给予租期,在租期内可以进行服务,租期到了再次检测并申请租期,申请成功后才能再次服务。如果某个机器发生了故障,那么就不能申请租期,一旦租期到了就不会提供服务,将原本的服务转由其他的服务完成。

分布式协议

分布式系统的基本协议就是上面将的两阶段提交协议和paxos选举协议

两阶段提交协议

这个协议主要解决的是分布式事务的原子性,一般在进行事务处理的时候,有一个协调者和事务的参与者,这个参与者一般是分布式的,包含多个。

主要的执行过程有两个阶段:

1、第一阶段请求阶段,协调者首先告诉各个参与者是否可以提交执行该事务,所有的参与者需要给予回复,是否可以参与这个事务的处理

2、第二阶段提交阶段,协调者根据所有参与者的回答,决定这个事务是否可以执行,或者是取消,这样可以保证事务只有可能是执行,或者是不能执行,两种状态保证了事务的原子性。

存在的两种问题:

1、事务的参与者出现故障,一直不给回复,所有参与者和协调者都等待,解决办法,设置一个超时时间,超时就代表不能执行该事务。

2、协调者出现故障,这个时候需要将协调者的相关事务转移到备协调者上,如果再次出现故障,则再次转移。如果协调者出现了永久性故障,这个时候参与者得不到响应会一直阻塞,是一种阻塞式协议。

paxos选举协议

这个协议主要解决多个节点中一致性的问题,多个节点为了保证一致性,都是通过操作日志 同保护数据,如果只有一个主节点,那么操作日志可以保证是一值的,但是如果主节点出现了故障,这个时候需要选举出一个新的主节点,完成全局的一致性。

选举新主节点的过程主要 如下:

1、批准阶段:提议者发送接受信息给其他的所有节点,告诉他们,我要称为新的主节点

2、确认阶段:如果超过一半的参与者同意提议者是新的主节点,则提议者发送确认的信息,告诉所有的节点,现在我是新的主节点。

如果出现了多个节点都提出自己的新的主节点,这个时候协议会按照提出序号n进行判断,即选取一个序号最大的重新循环的执行选举过程,直到最后有超过一半的同意。

想要学习Dubbo框架、zookeper基本原理、redis分布式缓存、JVM性能优化,Nginx+apache+Tomcat集群部署、大数据hadoop,Hbase实时计算spark、storm、数据分析分词和权重等核心技术;需要的可以关注之后私信哈,记得要点赞转发噢!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值