zoukankan      html  css  js  c++  java
  • P2P通信-Gossip传播

    日期:2017.8.15 
    Gossip是p2p通信时候,广泛使用的一种协议。
    具有以下特点:
    最终一致性。
    明确的收敛速度O(n²)和时间复杂度O(logn)
    较强的网络容错性
    依据节点工作方式分为两种类型:
    Anti-Entropy(反熵):以固定的概率传播所有的数据
    Rumor-Mongering(谣言传播):仅传播新到达的数据
     
    Anti-Entropy模式有完全的容错性,但有较大的网络、CPU负载;Rumor-Mongering模式有较小的网络、CPU负载,但必须为数据定义”最新“的边界,并且难以保证完全容错,对失败重启且超过”最新“期限的节点,无法保证最终一致性,或需要引入额外的机制处理不一致性。
     
    协调机制:
        精确协调
            每个数据项维护版本号
        整体协调
            整体维护版本号,依据数据多少进行排序
     
    通信模式:
    Push:  节点 A 将数据 (key,value,version) 及对应的版本号推送给 B 节点,B 节点更新 A 中比自己新的数据
    Pull: A 仅将数据 key, version 推送给 B,B 将本地比 A 新的数据(Key, value, version)推送给 A,A 更新本地
    Push/Pull: 与 Pull 类似,只是多了一步,A 再将本地比 B 新的数据推送给 B,B 则更新本地
     
    网络负载:
    Gossip集群节点中会随机选择几个节点发送消息,其他节点在随机选择几个节点发送,取代了遍历发送。节省了网络负担
    身份验证:
    每个节点都维护一份证书的映射表,同时自己存有证书的私钥。以节点证书的hash为值,叫做PKI-ID
    在节点通信中,验证发送消息时带有证书的hash值和证书,同时对此进行签名,对端节点验证证书的有效性,通过验证签名正确与否来选择相信这个节点。
    节点选举:
    节点启动15秒后,开始选举,总体规则使用PKI-ID字母顺序,选择靠前的节点。
    区块获取:
    1.节点定期检查本地区块的序列号,小,则广播获取,收到的数据和已提交区块序列号连续了,就存入账本
    2.从排序服务获取区块,主节点从排序服务获取一个区块后,广播给其他节点。
     
    Gossip 的缺陷:
    1.消息的延迟 节点只会随机向少数几个节点发送消息,消息最终是通过多个轮次的散播而到达全网的
    2.消息冗余 节点会定期随机选择周围节点发送消息,而收到消息的节点也会重复该步骤,因此就不可避免的存在消息重复发送给同一节点的情况,造成了消息的冗余
     
     
    基于memberlist的gossip实现:http://vearne.cc/archives/584
                            https://blog.csdn.net/u010278923/article/details/79698757
  • 相关阅读:
    凡人修仙登录页面
    proxysql高可用~ keepalived+proxysql
    proxysql 系列 ~ 高可用架构
    mysql 案例 ~timeout相关问题与错误信息
    mysql 案例 ~ mysql字符集与大小写详解
    mysql案例~非常规操作汇总
    mysql原理~创建用户的那些事情
    mysql 案例 ~ 表空间迁移数据与数据导入
    开源统计数据库~行与列的讨论
    mysql 原理 ~ LRU 算法与buffer_pool
  • 原文地址:https://www.cnblogs.com/wanglao/p/11162626.html
Copyright © 2011-2022 走看看