昨天读了paxos算法,心里对分布式一致性有一些想法:如果是我,应该怎么实现数据库集群的一致性呢?

paxos算法本身并没有提到其应用,所以实际使用情况应该较复杂。而我平时接触到使用分布式一致性算法的就是mongodb replicaset。它和zookeeper相似,只是它的data model不只包括集群配置,还有其庞大复杂的数据库。

paxos为何需要两阶段?也许是在learn的时候方便直接使用?也许是

印象中mongodb选master只需要一次请求就行(貌似slideshare上的mongo讲义上看的),只要提出请求等待被accept就行,如果它得到多数回应接受,它就成为新的master(如果多数都回应了acceptance,但是它不知道,那么它就不是master,是master的条件是它已经知道,如果它不知道它就一直询问直到得到多数回应),它向所有node发出通知自己是master。对于每个数据写请求,通过master发送给所有node之后,收到大多数的acceptance后master才认为写入成功,它发出通知最新版本是oplogid,没有更新到最新的node就从server拿数据。如果发现master挂了(或者连接超时)而能连上多数节点,就发出一个选举自己当master的提议,收到多数acceptance(acceptor只有在连不上原来master的情况下才同意)才认为自己已经是master,它发出通知它已经是master了,得到多数节点"知道了"的回应(这些节点就停止接收旧master的数据),然后它向集群中的节点查询最新版本,根据多数回应决定它需要同步多少数据,选择一个它认为的包含最新版本的节点,同步好这些数据之后它就开始处理新的写请求了。

需要特别说明的是,对于数据写,master可能不知道大多数是否已经写成功,如果无法确知它会一直询问,直到得到多数回应。只有样它才进行后面的写操作。注意还有一个majority的问题,要等待数据写成功的majority应该要设置得比集群一半大一些,比如21个节点的集群,11个就已经超过一半,但写成功的等待比如超过15台才觉得合适。因为如果只是设成11,这11台当时写成功了,但过了一会有一台挂了等于没构成多数,还是没写成功。因此等majority写成功不意味着一定写成功了,但是这个majority设得高一些,成功率可以接近100%。而查询状态的majority只要超过1半就行。

上述系统由于需要很多通信完成同步,要求节点之间延迟较低,在master选择之后,写操作全由master发起,写性能比较差,节点越多写得越慢(扩展性不好),读操作象zookeeper那样从本地读取。zookeeper中切换server节点,不允许切到更低版本的server,这点在web上很有用。你总是要看更新的状态,不能刷新一下回到过去的状态。mongodb的java driver似乎没有做这个工作。

对Primary-backup分布式数据库分布式一致性的猜想的更多相关文章

  1. ****** 二十八 ******、软设笔记【数据库】-分布式数据库、特点、数据存储、DBMS组成

    分布式数据库    一.分布式数据库        分布式数据库由一组数据组成,这些数据物理上分布在计算机网络的不同结点(场地)上,逻辑上是属于同一个系统.每个结点可以执行局部应用,也能通过网络通信子 ...

  2. 全球分布式数据库:Google Spanner(论文翻译)

    本文由厦门大学计算机系教师林子雨翻译,翻译质量很高,本人只对极少数翻译得不太恰当的地方进行了修改. [摘要]:Spanner 是谷歌公司研发的.可扩展的.多版本.全球分布式.同步复制数据库.它是第一个 ...

  3. 从NoSQL到NewSQL,谈交易型分布式数据库建设要点

    在上一篇文章<从架构特点到功能缺陷,重新认识分析型分布式数据库>中,我们完成了对不同"分布式数据库"的横向分析,本文Ivan将讲述拆解的第二部分,会结合NoSQL与Ne ...

  4. 分布式数据库对比评测(Es,mongodb,redis)基础知识篇

    前言 我建议大家看下这个,否则后面你不知道我在说什么. 1.ES数据库相关概念 啥是Es,说白了就是支持文档搜索的分布式数据库,专门方便搜索的,GITHUB京东现在都在用. 1.ES的数据库存放在哪里 ...

  5. 分布式数据库中间件 MyCat | 分库分表实践

    MyCat 简介 MyCat 是一个功能强大的分布式数据库中间件,是一个实现了 MySQL 协议的 Server,前端人员可以把它看做是一个数据库代理中间件,用 MySQL 客户端工具和命令行访问:而 ...

  6. 分布式数据库的四分结构设计 BCDE

    首先,对关系型数据库的表进行四种分类定义: Basis 根基,Content 内容, Description 说明, Extension 扩展. Basis:Baisis 表是唯一的,为了实现标准而得 ...

  7. 分布式数据库中的Paxos 算法

    分布式数据库中的Paxos 算法 http://baike.baidu.com/link?url=ChmfvtXRZQl7X1VmRU6ypsmZ4b4MbQX1pelw_VenRLnFpq7rMvY ...

  8. Distributed4:SQL Server 分布式数据库性能测试

    我使用三台SQL Server 2012 搭建分布式数据库,将一年的1.4亿条数据大致均匀存储在这三台Server中,每台Server 存储4个月的数据,Physical Server的配置基本相同, ...

  9. 云时代的分布式数据库:阿里分布式数据库服务DRDS

    发表于2015-07-15 21:47| 10943次阅读| 来源<程序员>杂志| 27 条评论| 作者王晶昱 <程序员>杂志数据库DRDS分布式沈询 摘要:伴随着系统性能.成 ...

随机推荐

  1. php-redis扩展模块安装记录

    redis的安装可以参考:centos下部署redis服务环境的操作记录 下面记录下php-redis扩展模块的安装过程:php的安装目录是/Data/app/php5.6.26 下载phpredis ...

  2. ndroid调用平台功能具体技巧分享

    Android操作系统那个可以通过调用手机平台来实现一些特定的功能,诸如网页的显示,邮件的发送等等.那么今天就为大家总结了几个Android调用平台功能的应用技巧,帮助大家增加编程经验. Androi ...

  3. Cobar是提供关系型数据库(MySQL)分布式服务的中间件

    简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+ ...

  4. ViewPager 详解(一)---基本入门

    前言:这两天研究研究ViewPager滚动功能,现在很多的app都有用到这个功能,我们的大虾米也有这个模块.要研究就彻底的研究研究,我从不满足于一个功能只是简单的应用,要学就学的彻底,所以我打算将Vi ...

  5. STL中的find_if函数

      上一篇文章也讲过,find()函数只能处理简单类型的内容,也就是缺省类型,如果你想用一个自定义类型的数据作为查找依据则会出错!这里将讲述另外一个函数find_if()的用法 这是find()的一个 ...

  6. 5 Java学习之 泛型

    1. 基本概念          泛型是Java SE 1.5的新特性,泛型的本质是 参数化类型 ,也就是说所操作的 数据类型 被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为 ...

  7. Android EditText的使用及值得注意的地方

    Android上有很多输入法应用,每种输入法都有各自的特点,输入法多数时候是和EditText配合使用,结合我自己的亲身实践分享一下使用EditText过程中遇到的一些问题及解决方法. 设置默认输入法 ...

  8. HTTPS 详解

    1) HTTPS是什么 https 是超文本传输安全协议的缩写.HTTPS主要思想是在不安全的网络上创建一种安全的信道,并且可以在使用适当的加密包和服务器证书可被验证且可被信任时候,对窃听和中间人攻击 ...

  9. SQL存储过程+游标 循环批量()操作数据

    本人收集的,挺有用的 1. 利用游标循环更新.删除MemberAccount表中的数据 DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT * FROM dbo.M ...

  10. asp.net 连接oracle,报错误“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

    1.http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 下载对用版本的Instan ...