Database design 在分布式数据库中确保集群范围一致性的技术

Database design 在分布式数据库中确保集群范围一致性的技术,database-design,distributed-computing,distributed-system,distributed-transactions,eventual-consistency,Database Design,Distributed Computing,Distributed System,Distributed Transactions,Eventual Consistency,在阅读之后,日志对我来说似乎是解决分布式数据库的集群范围一致性和数据集成问题的唯一答案 是否所有分布式系统都使用日志进行同步、一致性、复制和恢复?或者它们只是在日志的格式/协议上有所不同 能否提供分布式数据库中群集范围一致性的替代方法? HBase和Bigtable都给出了现代数据库中日志的另一个例子 它们是什么意思?其他数据库不使用日志实现一致性?一致性是一个重载术语,有多种含义。但通常,当人们说一个系统是一致的时,他们的意思是该系统没有矛盾,其行为符合规范。显然,有很多一致的分布式系统不使用

在阅读之后,日志对我来说似乎是解决分布式数据库的集群范围一致性和数据集成问题的唯一答案

是否所有分布式系统都使用日志进行同步、一致性、复制和恢复?或者它们只是在日志的格式/协议上有所不同

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

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


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

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

示例:

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

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

  • +仲裁读取/写入。源代码具有复杂的结构,不可能考虑通用的自动合并算法。但如果结构更简单,这是可能的。如果我们需要实现一个简单的注释系统,而不关心顺序和删除/编辑功能,那么我们可以将注释存储在一个集合中,并使用集合联合作为自动冲突解决策略。CRDT可以防止冲突,而quorum读/写则提供了挂钟顺序:一旦操作完成,所有后续读取都可以看到其效果。缺乏冲突和挂钟时间保证了缺乏矛盾

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

  • 线性化 人们通常混淆一致性和线性化能力,但即使我们谈论线性化能力,也有不用日志就能使用它的方法。实现线性化的最著名的协议是Paxos

    Paxos是关于构建分布式一次写入寄存器(Multi-Paxos是关于分布式只附加日志)。常规PaxO(非多PaxO)的应用范围似乎非常狭窄,但:

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

  • 它有一个变体,允许将其用作无日志的可重写寄存器。我在文章中描述了这种方法,并用500行JavaScript在项目中实现了它。此外,它背后的想法由和与TLA+进行了独立检查