本文探讨大数据的分布式架构原理:
一、分布式系统的理论
1、CAP原理
CAP原理指的是,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求 ,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。
其中:
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
2、BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
二、数据分割方式
1、哈希方式
优点:
散列性:好
元信息:只需要函数+服务器总量
缺点:
可扩展性:差。一旦集群规模扩展,大多数数据都需要被迁移并重新分布
数据倾斜:当某个用户id的数据量异常庞大时,容易达到单台服务器处理能力的上限
2、按数据范围分布
将数据按特征值的值域范围划分数据。
优点:
可扩展性:好。灵活根据数据量拆分原有数据区间
缺点:
元信息:大。容易成为瓶颈
3、按数据量分布
与按范围分布数据方式类似,元信息容易成为瓶颈
4、一致性哈希
用一个hash函数计算数据(特征)的hash值,令该hash函数的值域成为一个封闭的环,将节点随机分布在环上。每个节点负责处理从自己开始顺时针到下一节点的值域上的数据
优点:
可扩展性:极好。任意动态添加、删除节点,只影响相邻节点
缺点:
元信息:大而且复杂
随机分布节点容易造成不均匀
动态增加节点后只能缓解相邻节点
一个接点异常时压力全转移到相邻节点
三、副本策略
1、中央化副本控制协议
副本控制协议指按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。副本控制协议可以分为两大类“中心化(centralized)副本控制协议”和“去中心化(decentralized)副本控制协议”。
中心化副本控制协议的基本思路:由一个中心节点协调副本数据的更新、维护副本之间的一致性。所有副本相关的控制交由中心节点完成,并发控制由中心节点完成,从而简化一个分布式并发控制问题为一个单机并发控制问题。而所谓并发控制,即多个节点同时需要修改副本数据时,需要解决“WW”,"RW"等并发冲突。
2、副本的一致性
副本的consistency是针对分布式系统而言的,不是针对某一个副本而言。根据强弱程度分为:
①强一致性:任何时刻任何用户/节点都可以读到最近一次更新成功的副本数据
②单调一致性:任何时刻任何用户一旦读到某个数据某次更新后的值,就不会再读到更旧的值
③会话一致性:任何时刻任何用户在某次会话内一旦读到某个数据某次更新后的值,就不会在这次会话再读到更旧的值
④最终一致性:各个副本的数据最终将达到一致状态,但时间不保证
⑤弱一致性:没有实用价值
3、Primary-secondary协议
Primary-secondary协议是中心化副本控制协议中常常用到的,该协议将副本分为两大类:其中有且仅有一个副本作为primary副本,除primary意外的副本都作为secondary副本。维护primary副本的节点作为中心节点,中心节点负责维护数据的更新、并发控制、协同副本的一致性。
1)Primary-secondary协议数据更新基本流程:
①数据更新都由primary节点协调完成
②外部节点将更新操作发给primary节点
③primary节点进行并发控制即确定并发更新操作的先后顺序
④primary节点将更新操作发送给secondary节点
⑤primary根据secondary节点的完成情况决定更新是否成功并将结果返回外部节点
2)数据读取方式
与数据更新流程类似,读取方式也与一致性高度相关。使用primary-secondary比较困难的是实现强一致性。实现强一致性一般有如下几个思路:
①始终只读primary副本的数据
②由primary控制节点secondary节点的可用性。
③基于Quorum机制
3)Primary副本的确定和切换
primary副本的确定通常由原信息管理,由专门的元数据服务器维护,执行更新操作时,首先查询元数据服务器获取副本的primary信息,从而进一步执行数据更新流程。
primary副本的切换通常可以使用lease机制来完成。
4)数据同步
数据同步是因为primary副本可能会存在于secondary副本不一致的问题。通常有如下三种形式:
①由于网络分化等异常,secondary上的数据落后于primary上的数据。—— redo primary副本上的操作日志。
②在某些协议下,secondary上的数据有可能是脏数据,需要被丢弃。—— undo日志的方法删除脏数据
③secondary是一个新增加的副本,完全没有数据,需要从其他副本上拷贝数据。—— 使用primary副本的snapshot(快照)功能
4、Paxos协议
多个节点直接通过操作日志同步数据,如果只有一个节点称为主节点,就很容易在多个节点之间维护数据一致性。然后主节点可能出现故障,那么就需要选出主节点。Paxos协议就是用于解决多个节点之间的一致性问题。
在paxos算法中,分为4种角色:
Proposer :提议者
Acceptor:决策者
Client:产生议题者
Learner:最终决策学习者
最终决策的paxos算法行为
①Proposer提出议题
②Acceptor初步接受 或者 Acceptor初步不接受
③如果上一步Acceptor初步接受则Proposer再次
④向Acceptor确认是否最终接受
⑤Acceptor 最终接受 或者Acceptor 最终不接受