分布式数据库含义:用分布式架构实现的关系型数据库,是服务于写多读少(写入能力需要可水平扩展)、低延时、海量并发 OLTP (联机交易)场景的,具有海量数据存储能力和高可靠性的关系型数据库
需要达成的目标:存储、事务、查询、复制、其他
分布式数据库的强一致性包括数据一致性和事务一致性,是两者的融合;
数据一致性关注的是单对象、单操作在多副本上的一致性;
事务一致性则是关注多对象、多操作在单副本上的一致性
数据一致性:首先是状态视角,数据只有两种状态:所有副本一致或者不一致,不一致的状态是暂时,还会转换到一致的状态,而那些永远不一致的情况几乎不会去讨论,所以把不一致称为“弱一致”。相对的,一致就叫做“强一 致”,强一致会导致性能略差、可用性也降低,因此会采用最终一致性,此时可以从操作视角来分析,分为常见的五种最终一致性:写后读一致性、单调读一致性、前缀一致性、线性一致性、因果一致性
事务一致性:使用ACID,最核心的就是隔离级别,可以分为五个级别:
数据一致性和事务一致性的关系:不同颜色分别代表了不同的一致性级别所需付出的性能代价
注意:Paxos等一致性协议算法(其实是共识算法,翻译为Consensus)本质上是一种复制协议,约定了副本之间的同步策略,比如最终一致性,同样也只是描述了副本之间同步情况;
而 5 个数据一致性(翻译为Consistency)模型都在多副本的基础上又约定了读写策略;
这两点都是一致性模型 (Consistency Model)必不可少的内容
分布式数据库有两种架构风格,在单体数据库客户端通讯管理器、进程管理器、查询处理器、事务存储管理器和共享组件与工具的基础上添加了分片信息管理、分布式事务管理、跨节点查询、全局时钟;
一种由分库分表的代理发展而来:
一种由nosql、分布式思想发展而来:
时间:在分布式数据库中与时间有关的功能主要体现在事务并发控制,比如 MVCC、读写冲突等,主要是关注三要素
时间源:单个还是多个
使用的时钟类型:物理时钟还是混合逻辑时钟
授时点:一个还是多个
多授时点是指当前集群有多个可以获取时间的服务器
多时间源是说多个独立提供时间的实例
方案典型有TSO、HLC
复制协议的选择:和数据副本数量有很大关系;
如果副本少,参与节点少,可以采用广播方式,也就是 Paxos、Raft 等协议;
如果副本多,节点多,那就更适合采用 Gossip 协议,Paxos等成本太高,虽然达到一致性的速度会更快些
分片存储方案:
首先要看元数据会不会变更,
1 如果不会变更,比如静态分片,那么就可以把它复制多份部署在所有工作节点上;
2 如果会变更,那就要考虑变更带来的多副本一致性问题;
2.1 如果是少数节点集中存储元数据,那么可以采用 Paxos 协议保证一致性;(Raft也可以,比如用etcd来存储)
2.2 如果是 P2P 架构,因为节点规模太大,那就适合采用 Gossip 协议
2.3 设计的权衡点主要是在于节点规模大小对传播效率的影响。
存储也是会有容量上限的,这个限制是由元数据的存储方式决定的



