1 Distribution
一致性hash最主要是为了避免增加节点时数据的重分布
分布式事务:二阶段提交协议,最主要的问题在于维护失败故障恢复,以及悬挂事务的处,Oracle由主节点记录事务的最终提交日志。
多主集群主要涉及几个关键方面:
- 数据的partition和replica策略:
- 副本一致性或读写一致性
- 故障恢复速度(HA方案)
- 分布式事务处理:
- 多主写的并发控制
- 分布式读写的一致性
- 分布式查询处理:减少网络代价
- SQL的元数据同步
- 算子下推
- 分布式系统的运维、监控和管理
分布式数据库按照数据存储架构分:
- l Share disk:rac
- l Share nothing:bigtable,postgresql-xc
- l Share nothing+多副本:megastore,spanner
2 F1+Spanner
- 数据的partition和replica策略
- 以范围进行分区
- 以directory为迁移单元
- 以tablet为复制单元,包含多个directory,每个table上都有一个paxos状态机,同时Each state machine stores its metadata and log in its corresponding tablet,由paxos状态机来实现副本的一致性,只能在leader副本上进行写操作,读可以在任意一个up-to-date的副本上。所有副本的集合成为paxos group。
- 多副本读写:在leader paxos group上进行更新,由paxos协议来保证副本间读写的一致性
- 事务:支持分布式事务,二阶段提交
- 读写冲突:支持mvcc
- 写写冲突:由paxos group全局锁,在
- 分布式读写一致性:由gps+原子钟来保证全局时序
- 分布式事务协调器:在多个paxos group中选择一个paxos group作为事务管理器,事务管理器的状态也在paxos group内部进行复制
- 故障恢复:热启动
3 Bigtable
- l 日志:tabletserver记录日志
- l 多副本读写:无
- l 事务:单行数据库的ACID,hbase在单个region server上可支持事务
- l 读写冲突:支持mvcc
- l 增量存储方式:内存b+tree或物理b+tree
- l 基线数据格式:物理b+tree
- l 数据partition策略:range
- l 故障恢复:冷启动,实例恢复
- l 数据迁移:为了减少log日志的apply,进行两次minor compaction。其次将日志进行排序后分发,避免日志读取次数过多。
- l Chubby:master选主、root tablet位置、tablet server状态维护、schema信息
- l 缺点:
- u 不支持分布式事务
- u 故障恢复为冷启动
4 megastore
- l 事务:同一entity group内采用单阶段ACID事务,跨entity group的更新事务采用两阶段提交协议或异步消息实现。
- l 日志:按照entity group记录日志
- l 多副本:多个副本均可写,每次写的日志位置由一个Paxos实例来保证多副本日志的一致性,由副本的coordinator跟踪当前entity group的日志同步状态和数据状态,必要时在读取时apply 日志
- l 读写冲突:支持mvcc,支持current读、snapshot读和inconsistent读
- l 数据partition策略:range
- l 副本迁移:
- l 缺点:
- u 在bigtable之上,通信代价过大
- u 多副本均可写,导致写冲突严重,写性能不高
5 其他
postgresql-xc:支持全局锁和2pc,但没有副本
rac:多节点同时写,加global lock,cache fusion保证缓存一致性,MVCC保证分布式读写的一致性,半热半冷启动
Galera:本地采用乐观策略,之后广播到所有节点再做冲突检测
Oceanbase:b+树不支持range scan