分布式梳理(二)

一、中心化


   

优缺点

1.优点:控制简单

2.典型:svn

缺点: primary故障的问题

(1).脑裂

定义:

当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。

  1. 首先我们需要是个集群。

  2. 其次当中有业务是Master-Backup模式或双星模式。也就是说当主节点挂掉了,备用节点需要接管业务或者是两个节点直接有数据同步。

脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。

当sync出现故障(网络Or其他节点等),两部分各自认为自己是active的,于是各自跑程序,出现了脑裂现象

b.防止HA脑裂一般采用2个方法

    1.仲裁  当两个节点出现分歧时,由第3方的仲裁者决定听谁的。这个仲裁者,可能是一个锁服务,一个共享盘或者其它什么东西。

    2.fencing  当不能确定某个节点的状态时,通过fencing把对方干掉,确保共享资源被完全释放,前提是必须要有可靠的fence设备。

注意仲裁和fencing都需要存在

    3.预防措施:

 解决通讯问题, 修改两个节点的系统时间

添加冗余的心跳线,例如双线条线。

尽量减少“裂脑”发生机会。

启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。

(2).failover时的不可用

failover故障转移

集群要提供高可用性就必须要有某种机制去保证,常用的机制为failover(故障转移),简单说就是通过一定的heartbeat检测是否有故障,一旦故障发生备份节点则接管故障节点的工作。

常见的failover

mysql 主从 failover,redis sentinel主从切换 failover,tomcat 集群 failover,kafka failover.

注意启动的时候权限问题。

3.22节点更新策略
3.221 同步

GFS(Google file system),低可用,低性能(吞吐与延迟)

3.222异步

mongodb w.1 弱一致,高可用,高性能

3.33数据流向

链式:

pri压力小,充分利用网络,延迟大

主从模式:

pri压力大,延迟小

3.23部分节点写入异常

事务:

best effort 1PC(一阶段提交)

一阶段提交非常直白,就是从应用程序向数据库发出提交请求到数据库完成提交或回滚之后将结果返回给应用程序的过程。一阶段提交不需要“协调者”角色,各结点之间不存在协调操作,因此其事务执行时间比两阶段提交要短,但是提交的“危险期”是每一个事务的实际提交时间,相比于两阶段提交,一阶段提交出现在“不一致”的概率就变大了。但是我们必须注意到:只有当基础设施出现问题的时候(如网络中断,当机等),一阶段提交才可能会出现“不一致”的情况,相比它的性能优势,很多团队都会选择这一方案。

best efforts 1PC这种模式,前提是应用程序能获取所有的数据源,然后使用同一个事务管理器(这里指是的spring的事务管理器)管理事务。这种模式最典型的应用场景非数据库sharding莫属。但是对于那些基于web service/rpc/jms等构建的高度自治(autonomy)的分布式系统接口,best efforts 1PC模式是无能为力的,此类场景下,还有最后一种方法可以帮助我们实现“最终一致性”,那就是事务补偿机制。

两阶段提交:

两阶段提交主要保证了分布式事务的原子性:即所有结点要么全做要么全不做)。所谓的两个阶段是指:第一阶段:准备阶段和第二阶段:提交阶段。

三阶段提交协议(2PC:Three-Phrase Commit)

  针对两阶段提交存在的问题,三阶段提交协议通过引入一个“预询盘”阶段,以及超时策略来减少整个集群的阻塞时间,提升系统性能。三阶段提交的三个阶段分别为:can_commit,pre_commit,do_commit。

1.自动重试

eg:gfs

2.业务重试

3.24primary选举

自治系统

本质:去中心化

代表:mongdb,zookeeper,tfs

依赖其他组件

1.redis sentinel

2.hdfs元数据 zookeeper

3.GFS primary mater(元数据服务器)

3.25Secondary(backup)是否对外提供服务

  1. replica (提供)

    mogodb为例 一致性问题CAP

  2. no active-standby (不提供)

    1. 无状态:nginx

    2. hdfs

      共享存储 单点写

      zookeeper 选择master (注意是否存在脑裂现象)

3.3去中心化

3.31概念

在一个分布有众多节点的系统中,每个节点都具有高度自治的特征。节点之间彼此可以自由连接,形成新的连接单元。任何一个节点都可能成为阶段性的中心,但不具备强制性的中心控制功能。节点与节点之间的影响,会通过网络而形成非线性因果关系。这种开放式、扁平化、平等性的系统现象或结构,我们称之为去中心化。

3.32本质

去中心化,不是不要中心,而是由节点来自由选择中心、自由决定中心。简单地说,中心化的意思,是中心决定节点。节点必须依赖中心,节点离开了中心就无法生存。在去中心化系统中,任何人都是一个节点,任何人也都可以成为一个中心。任何中心都不是永久的,而是阶段性的,任何中心对节点都不具有强制性。

3.33优缺点

优点:高可用

缺点:协议复杂,一致性难

实例:dynamo quorum&vector clock

一致性算法Paxos & raft & zab

paxos 算法与 raft 算法的差异

  1. raft强调是唯一leader的协议,此leader至高无上

  2. raft:新选举出来的leader拥有全部提交的日志,而 paxos 需要额外的流程从其他节点获取已经被提交的日志,它允许日志有空洞。

    相同点:得到大多数的赞成,这个 entries 就会定下来,最终所有节点都会赞成

    ZAB 协议 ( Zookeeper Atomic Broadcast) 原子广播协议:保证了发给各副本的消息顺序相同

3.34 粒度

3.341 以机器为单位

mongodb

DockerLXC

3.342 以数据为单位

数据切片



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值