P2P结构与微信Quorum牛牛h5棋牌源码租售平台搭建机制

    1。无领导机制
    
    一些数据存储系统已经放弃了WebChina牛牛H5棋牌资源租赁平台(地址:H5)。范舒布斯com联系Q1687054422)机制,允许任何拷贝直接接受用户的写操作。(例如,亚马逊的Daynamo,Facebook的Casandra,最终放弃了Cassandra来支持Hbase,但是Uber的强力干预使得Cassandra在开放源码社区中很出色。在接收时,将客户机写请求转换为协调器节点,协调器节点不执行特定的写命令,正是这种设计差异对数据库的使用方式和数据模型具有深远的影响。
    读写多份
    
    无领导机制如何消除领导角色的存在答案也很简单:多个拷贝读写。接下来,让我们来看看板栗:
    
    假设在数据系统中有一个三拷贝结构,如下图所示:用户1234将所有副本并行发送到三个存储节点,两个节点可以接受副本写入,但是一个节点不在线,因此副本写入失败。写入成功:在用户1234接收到两个OK响应之后,用户认为写入成功,忽略了复制写入失败。(当然,修复此数据副本并不容易,无论写入失败)
    
    图像PNG
    
    现在假设用户2345开始读取新写入的数据。因为节点未能写入,所以用户234可能获得过期值作为响应。为了解决这个问题,当用户从数据系统读取数据时,它不仅向一个副本发送请求,而且向多个副本节点发送读取请求。并行地。用户可以从不同的节点获得不同的响应,从其他节点获得最新值,从另一个节点获得过期值。这里版本号用于确定哪个值是更新值。
    复制修复
    
    无领导机制导致数据系统中大量的过期值,因此节点如何修复自己的副本以获得最新值称为副本修复,无领导机制以这种方式实现最终的一致性。
    
    读与修
    当用户并行读取多个节点时,可以得到对其他过期值的响应,因此用户会发现一些节点具有过期值,用户可以主动地将新值写入节点,这种方法称为读修复。
    
    反熵过程实际上是一个物理概念。
    每个数据存储节点将有一个后台进程,不断地比较自己的副本和其他节点副本之间的差异,发现它们已经过期的值,将主动修复自己过期的副本。不像写入顺序日志,这种去熵过程不复制W。RITE操作以任何特定顺序进行,并且在复制数据之前可能会有明显的延迟。
    
    2。法定人数机制
    
    上面提到的示例成功地写入了三个副本中的两个副本,我们认为写入操作是成功的。但是,如果三个副本中只有一个副本被成功写入,情况会怎样写作操作成功吗
    
    答案是否定的。这里实际上是一个简单的鸽子窝原理,这里不做数学证明,我们感兴趣的是自证。
    假设n个副本,每个写操作必须由W节点确认为成功,并且每个读操作读取R节点。(在上面的示例中,n=3,w=2,r=2)。只要w+R>n,如果读和写操作的总数大于n,则读和写操作必须具有至少一个相同的副本,即读操作必须能够读取最新的写操作数据。这就是我们所说的Quorum机制。每次我们读和写,我们都需要达到法定人数。
    
    通常,N、W和R通常是可配置的,可以根据需要修改这些数字。常见的选择是使n为奇数(通常为3或5)并设置w=r=(n+1)/2。如下图所示,如果w<n,如果N-W节点不可用,我们仍然可以处理写操作。<n,如果n个r节点不可用,我们仍然可以处理读取操作。如果所需的w或R节点可用,则写入或读取操作将返回错误。
    
    n=3,w=2,r=2,我们可以容忍一个不可用的节点。
    n=5,w=3,r=3,我们可以容忍两个不可用的节点。
    
    仲裁机制确保必须读取最新的副本。
    高可用性和暗示切换
    
    Quorum机制实现了最终一致性模型,但是在可用性方面仍然有一些极端情况不能很好地处理。例如,当发生网络抖动时,系统中可能仍然存在许多正常工作节点。然而,网络问题出现在复制的N个节点中。应该写入,导致少于w或R的成功读写操作,这些操作由于无法达到法定人数而失败。因此,此时数据库系统设计者面临着权衡,我们能够通过一些机制获得更好的可用性吗
    
    因此,在这种情况下,我们可以使用暗示的切换(原谅我的翻译不好)。写和读操作仍然需要来自W和r的成功响应,但是按照指定编写n个节点不是必须的(这涉及一致性哈希、数据分布的知识,并且如果暂时不能理解,我将有一个特殊的主题要写,所以我可以比如,如果你把自己锁在外面,你可以敲邻居的门,问问是否能在他们的沙发上呆一会儿。一旦找到密钥,就自己回家。所以其他节点可以临时存储本应该放在另一个节点上的副本。一旦网络中断被修复,其他节点将将副本传送到主机节点。
    
    因此,该模式不仅保证了系统不违反Quorm机制,而且极大地提高了系统的可用性,在无领导数据系统中得到了广泛的应用。
    3写冲突与仲裁机制
    
    同样的Quorum机制被设计成允许并发的读写操作,并容忍网络中断和峰值延迟。但是这将不可避免地带来一致性。让我们看看下面的例子:
    
    如图所示,有两个客户机A和B,关键字X是在一个三拷贝的数据存储系统中写入的。节点1接收来自A的写入,但是由于网络中断,从不从B写入。节点2首先接收来自A的写入,然后接收B写入。节点3首先接收来自B的写入,并且然后接收A.节点2的写,认为X的最终值是B,而另一个节点认为最终值是A.。
    并发写作导致复制冲突
    
    如何在这样的场景中仲裁写结果成为一个大问题,思考和我们之前提到的类型:
    
    最后写赢
    我们可以给每个写操作附加一个时间戳,选择最大时间戳作为最新值,丢弃任何带有早期时间戳的写操作。这种冲突解决算法称为.Write Win。我要写遗失,怎样才能保证没有依赖性的写损呢
    合并发生在关系之前
    每当存在两个操作A和B时,有三种可能性:A在B之前发生,B在A、A或B并发之前发生。我们需要一个算法来告诉我们这两个操作是否并发。如果一个操作在另一个操作之前发生,那么后续的操作应该为如果前面的操作是并行的,那么我们需要解决冲突。我们如何捕获和合并在发生关系之前发生的关系可以在服务器节点上维护版本号,每次写入时递增版本号,并将新版本号存储在写入值中。
    顾客
    当客户端读取密钥时,服务节点返回所有未被覆盖的值以及最新的版本号。当客户端需要写入密钥时,它必须包含前一次读取的版本号,并且它必须组合在前一次读取中接收的所有值。
    服务器
    当服务器接收到具有特定版本号的写入时,它可以覆盖该版本号或版本号以下的所有值,因为它知道它们已经被合并到一个新值中,但是必须保留具有更高版本号的所有值。
    
    版本向量
    
    合并之前使用单个版本号来捕获操作之间的依赖关系,但这不足以解决并行写入多个副本的情况。相反,我们需要使用每个副本的版本号和密钥。每个副本在处理时增加其版本号。执行写入并跟踪从其他副本看到的版本号。此信息指示哪些值将被覆盖,以及哪些值被保存为兄弟版本。所有副本的版本号集称为版本向量。版本向量从数据节点发送到客户端,因此版本向量允许我们区分重写和并行写操作。
    4。总结
    
    到目前为止,我们最后总结了分布式系统中的复制机制,从领导者跟随机制到多领导者机制,再到无领导者机制,并详细总结了各个机制的实现细节和优缺点。我希望你能在收获后读书。

猜你喜欢

转载自www.cnblogs.com/h5qipaiyuanma/p/9780157.html
P2P