目录

一致性(consistency)与共识(consensus)

背景

分布式事务一致性与 raft或paxos协议 解决的共识性问题不是同一回事.

这种歧义源于对英文学术名词的错误翻译。分布式事务一致性中的"一致"对应的英文单词是consistency,而raft或paxos中的"一致"对应的英文单词是consensus。新出版的文献正逐渐把consensus翻译为共识,而consistency继续翻译为一致。

共识问题

raft和paxos论文中所涉及的consensus( /kənˈsensəs/)问题是分布式系统理论中三大基本问题(time、consensus、message model)之一,是元问题;共识问题关注进程容错,通过一种巧妙的算法使得数据和计算得到复制,并协同进行,与共识问题相关的学术名词叫做复制状态机。

事务

事务是用户定义的一个数据库操作序列, 这些操作要么全做, 要么全不做, 是一个不可分割的工作单位.

事务的特性:

  1. 原子性

  2. 一致性

    事务执行的结果必须是使数据库从一个一致性状态(正确状态)变到另一个一致性状态.

  3. 隔离性

  4. 持续性

其中, 当数据库只包含成功事务提交的结果时, 就说数据库处于一致性状态. 如果数据库系统运行中发生故障, 有些事务尚未完成就被迫中断, 这些未完成的事务对数据库所做的修改有一部分已写入物理数据库, 这时数据库就处于一种不正确的状态, 或者说不一致的状态.

分布式事务

上面说的都是单机数据库上的事务. 随着微服务架构的普及,一个大型业务系统往往由若干个子系统构成,这些子系统又拥有各自独立的数据库。往往一个业务流程需要由多个子系统共同完成,而且这些操作可能需要在一个事务中完成。以实现 宏观上的整个数据库系统的一致性(状态正确) .

在微服务系统中,这些业务场景是普遍存在的。此时,我们就需要在多个单机数据库之上通过某种手段,实现支持跨数据库的事务支持,这也就是大家常说的"分布式事务”。

数据(非数据库)的一致性

DB在各个时刻对共享某数据的事务应反映出一致的状态/数据。即任意时刻,多个事务来读同一个数据,多个事务看到的数据应该是一致的才对。数据一致性由事务隔离性来保障。

分布式事务一致性问题与分布式系统共识问题的联系

分布式环境下的事务提交问题本质上是个共识问题.即, 一个业务流程中, 各子系统操作各自数据库后, 就是否提交事务, 各子系统需要达成一致.

References