架构师培训 -06 学习总结 分布式数据库、NOSQL 和 ZK
1.分布式数据库
分布式数据常见的模式有三种,以MYSQL为例:
主从(可多从)复制
主要用于单表数据不是很大(能存下或者查询效率满足要求)且写小读多的情况,主负责写,从负责读,在业务上涨并发数增加的情况下,可以通过增加从库数量来解决读的性能问题。
缺点:主存在单点问题,数据写入能力和存储能力没办法水平扩展。
主主复制
在主从基础的一个升级版本,解决了主单点的问题。通过增加一个主节点,做为备用节点,在主宕机的情况下,系统可以在较短的时间内(几秒或者几分钟)实现恢复主写入功能。
注意点:
1、主主复制的两个库不能并发写入,数据写入能力和存储能力还是没有办法水平扩展。
2、更新表结构会导致巨大的同步延迟,因此在修改表结构时需要先关闭同步功能,然后同时手动在各个节点执行DDL操作,完成后在开启同步功能。
数据分片
当单表无法数据存储满足需求时,就要用到数据分片功能,就不同分片的数据存储到不同的机器上去,解决写能力和存储能力不足的问题。
注意点:
1、使处理逻辑变的复杂,需要大量额外的代码。
2、有些单库能使用的SQL语法不能使用,例如:联合查询,group操作等。
3、无法使用数据库事务。
4、服务器如何水平扩展的问题。
在上面四点中,我觉得第4点在最开始设计的时候非常关键,直接影响到后续扩展机器的时候,如何尽可能的减少对系统的影响。
老师在课程中将的一个策略我觉得很好,在一开始就设计好要分片的数量,并将每个分片的数据进行物理隔离。在扩展的时候直接将某些分片直接迁移到新机器上,数据直接通过文件拷贝的方式进行迁移,这样操作简单且速度块。
常用的分片中间件有:Mycat、 Corbar。
2.NOSQL
NOSQL中老师主要讲到了CAP原理,具体如下(从作业copy过来):
CAP原理是针对分布式数据库而言的,是指在分布式系统中,一致性(Consistency, C)、可用性(Availability, A)、分区耐受性(Partition Tolerance, P)三者不可兼得。
一致性(Consistency, C)
一致性是说,每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期的数据,也就是说,数据是一致的。
可用性(Availability, A)
可用性是说,每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response,without the gurantee that it contains the most recent write), 也就是说系统需要一直可以正常使用的,不会引起调用者的异常,但并不保证响应的数据是最新的。
分区耐受性(Partition Tolerance, P)
分期耐受性是说,即使因为网络原因,部分服务节点之间消息丢失或者延迟了,系统依然应该是可以操作的(The system continus to oprate dispite an arbitrary number of messages being dropped (or delayed) by the network between nodes)
当网络分区失效发生时,我们要么取消操作,这样数据就是一致的,但是系统却不是可用的;要么我们继续写入数据,但是数据的一致性就得不到保证。
在分布式系统中网络失效是一定存在的,也就是说分区受耐性是一定要保证的,那么在一致性和可用性上就必须二选一。所以在CAP中要么选择CA要么就选择CP。
BASE理论
BASE理论是基于CAP定理演化而来,是对CAP中一致性和可用性权衡的结果。核心思想是指即使无法做到强一致性,但每个业务根据自身的特点,采用适当的方式来使系统达到最终一致性。
基本可用(Basically Available):指分布式系统在出现故障的时候,允许损失部分可用性,保证核心可用。但不等价于不可用。
软状态(Soft state):软状态是指允许系统存在中间状态,并且该中间状态不会影响系统整体可用性。即允许系统在不同节点间副本同步的时候存在延时。
最终一致性(Eventually consistent): 系统中的所有数据副本经过一定时间后,最终能够达到一致的状态,不需要实时保证系统数据的强一致性。最终一致性是弱一致性的一种特殊情况。
BASE理论面向的是大型高可用可扩展的分布式系统,通过牺牲强一致性来获得可用性。ACID是传统数据库常用的概念设计,追求强一致性模型。
3.分布式一致性Zookeeper
3.1分布式系统脑裂问题
在一个分布式系统中,不同服务器获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,称为分布式系统脑裂。为了解决这种问题,业界有研究了一套分布式一致性算法Paxos。
Paxos算法中三个角色:
Paxos算法处理过程:
Paxos算法处理的部分规则:
3.2Zookeeper
Zookeeper通过zab协议(Paxos算法的简化版)解决了分布式一致性问题。
Zookeeper架构:
Zab协议:
3.2.1Zookeeper应用场景
配置管理
用于存储配置数据,数据使用者通过watch功能来感知配置信息的变化。
选master
各个节点通过向zookeeper提交创建一个临时目录的方式选举master。
集群管理(负载均衡)
各个节点向ZK创建一个临时目录的方式完成节点注册功能。并通过watch的方式接收节点的变化情况,达到对节点上下线的感知。
评论