【问题标题】:Techniques to ensure cluster wide consistency at distributed databases确保分布式数据库集群范围一致性的技术
【发布时间】:2017-09-02 23:34:54
【问题描述】:

阅读an excellent article about role of the logs in distributed file systems 后,日志记录似乎是分布式数据库的集群范围一致性和数据集成问题的唯一答案。

是否所有分布式系统都将日志用于同步、一致性、复制和恢复目的?还是它们仅在日志的格式/协议上有所不同?

您能否提供一种在分布式数据库中实现集群范围一致性的替代方法?

HBase 和 Bigtable 都给出了现代数据库中日志的另一个示例。

他们是什么意思?其他数据库不使用日志来实现一致性?

【问题讨论】:

    标签: database-design distributed-computing distributed-system distributed-transactions eventual-consistency


    【解决方案1】:

    一致性是一个重载的术语,具有多种含义。但通常,当人们说一个系统是一致的时,他们的意思是该系统没有矛盾并且它的行为符合规范。显然,有很多一致的分布式系统不使用日志。

    例子:

    1. (笑话)如果你只写数据从不读,那么 /dev/null 是一致的,因为根据定义你不能读数据,所以你不能以矛盾告终

    2. 分布式版本控制系统(如 Git)是一致的,因为它们通过保留两个版本(分支)并将冲突的解决委托给客户端(合并/变基)来避免冲突。

    3. CRDT + Quorum 读/写。源代码结构复杂,想不出通用的自动合并算法。但是使用更简单的结构是可能的。如果我们需要实现一个琐碎的评论系统并且我们不关心订单和删除/编辑功能,那么我们可以将 cmets 存储在一个集合中并使用 set-union 作为自动冲突解决策略。 CRDT 可以防止冲突,而 quorum 读/写为我们提供了挂钟顺序:一旦操作完成,其效果对所有后续读取都是可见的。没有冲突和挂钟时间保证了没有矛盾。

    4. Quorum 读/写 + 单个客户端。如果一个系统只有一个客户端,那么冲突也是不可能的,因此仲裁读/写也提供了一致性。

    线性化

    人们通常会将一致性与线性化混淆,但即使我们谈论线性化,也有一些方法可以在没有日志的情况下使用它。实现线性化最著名的协议是 Paxos。

    Paxos 是关于构建一个分布式的一次性写入寄存器(Multi-Paxos 是关于分布式仅附加日志)。似乎常规 Paxos(非 Multi-Paxos)的应用程序集非常有限,但是:

    1. 我们仍然可以在它之上构建一致的分布式系统。例如,我们可以使用 Paxos 来克服 2PC 的缺点(如果协调器失败,2PC 会阻塞系统):因为协调器只需要决定中止或提交事务一次,所以使用一次写入寄存器来存储就可以了这个决定。

    2. 它有一个变体,允许将其用作无需日志的可重写寄存器。我在How Paxos Works 帖子中描述了这种方法,并在Gryadka 项目中用500 行JavaScript 实现了它。此外,Greg RogersTobias Schottdorf 对 TLA+ 进行了独立检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 2012-04-05
      • 2015-01-09
      • 1970-01-01
      相关资源
      最近更新 更多