首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在分布式数据库中确保群集广泛一致性的技术

在分布式数据库中确保群集广泛一致性的技术
EN

Stack Overflow用户
提问于 2017-04-07 14:23:50
回答 1查看 302关注 0票数 0

阅读关于日志在分布式文件系统中的作用的优秀文章日志对我来说似乎是分布式数据库的集群一致性和数据集成问题的唯一答案。

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

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

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

他们是什么意思?其他数据库不为一致性目的使用日志?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 15:46:52

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

示例:

  1. (笑话)如果你只写数据,从来不读,那么/dev/null是一致的,因为根据定义,你不能读取数据,所以你不能以矛盾告终
  2. 分布式版本控制系统(如Git)是一致的,因为它们通过保持两个版本(分支)和将冲突的解决委托给客户端(合并/重基)来避免矛盾。
  3. CRDT +仲裁读/写。源代码有一个复杂的结构,不可能考虑一个通用的自动合并算法。但有了更简单的结构,这是可能的。如果我们需要实现一个琐碎的注释系统,而我们不关心订单和删除/编辑功能,那么我们可以将注释存储在一个集合中,并使用set-union作为自动冲突解决策略。CRDT保护避免冲突,而仲裁读/写则给我们墙时钟顺序:一旦操作完成,其效果对所有后续读取都是可见的。冲突的缺乏和时间的守时保证了矛盾的缺失.
  4. 仲裁读写+单个客户端。如果一个系统只有一个客户端,那么冲突也是不可能的,所以仲裁读写也提供了一致性。

线性化性

人们通常把一致性和线性化混为一谈,但即使我们谈论线性化,也有一些方法可以不用日志使用它。实现线性化的最著名的协议是Paxos。

Paxos是关于构建一个分布式写一次寄存器(Multi-Paxos是关于分布式只附加日志)。看来普通的Paxos (非多Paxos)的应用程序集非常狭窄,但是:

  1. 我们仍然可以在此基础上构建一致的分布式系统。例如,我们可以使用Paxos来克服2PC的缺点(如果协调器失败,2pc会阻塞一个系统):因为协调器只需要决定中止或提交事务一次,所以使用写一次注册来存储该决定是可以的。
  2. 它有一个变体,允许在没有日志的情况下使用它作为可重写的寄存器。我在帕克斯是如何工作的文章中描述了这种方法,并在格里亚卡项目中用500行JavaScript实现了这种方法。另外,它背后的想法是由格雷格·罗杰斯托比亚斯·肖特多夫格雷格·罗杰斯托比亚斯·肖特多夫独立验证的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43280566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档