博客
关于我
常见的分布式协议与算法
阅读量:445 次
发布时间:2019-03-06

本文共 994 字,大约阅读时间需要 3 分钟。

一致性哈希、Gossip协议、一致性共识算法及其他分布式系统关键技术解析

一致性哈希

一致性哈希是一种用于分布式系统中数据存储和路由的高效算法,通过减少数据迁移量解决节点增减带来的高负载问题。

不带虚拟节点的一致性哈希

传统哈希算法采用模运算进行路由寻址,但其迁移成本较高。一致性哈希通过将节点映射到哈希环(Hash Ring)上,实现低迁移成本。

  • 工作原理:将节点映射到哈希环上,读取目标键值时沿环定位目标节点。
  • 优势:仅需迁移部分数据,提升容灾能力和故障恢复效率。

带虚拟节点的一致性哈希

虚拟节点技术解决数据分布不均问题,通过为每个节点生成多个虚拟节点,均衡数据访问压力。

  • 实现方式:为每个节点生成若干虚拟节点,映射到实际节点上,提升数据分布均匀性。
  • 优势:减少热点节点压力,提升系统吞吐量。

Gossip协议

Gossip协议通过随机传播机制,确保系统在极端情况下的数据一致性。

数据传播方式

  • 直接邮寄:直接发送更新数据,可能导致数据丢失。
  • 反熵:定期交换数据,消除差异。
  • 谣言传播:周期性发送新数据,确保数据传播。

优势

  • 容灾性:适用于单节点运行。
  • 高效性:减少数据复制量。

Quorum NWR算法

Quorum NWR通过副本数、写一致性级别和读一致性级别实现一致性。

核心要素

  • N:副本数。

  • W:写一致性级别。

  • R:读一致性级别。

  • 一致性效果

    • 强一致性:W + R > N。
    • 最终一致性:W + R < N。

PBFT算法

PBFT通过三阶段协议实现拜占庭容错共识。

三阶段协议

  • 预准备阶段:构造预准备消息广播。
  • 准备阶段:广播准备消息,验证接收情况。
  • 提交阶段:广播提交消息,验证版本。
  • 优势

    • 容错能力:容忍至多 1/3 的恶意节点。
    • 效率:消息复杂度 O(n²),适合中小型系统。

    PoW算法

    PoW通过哈希函数证明工作量,应用于区块链。

    工作原理

    • 哈希函数:计算字符串哈希值。
    • 验证:哈希值需满足特定条件。

    区块链应用

    • 区块头:包含随机数(nonce),双重哈希验证。
    • 矿工激励:通过找矿获得奖励。

    ZAB协议

    ZAB协议通过原子广播实现分布式事务顺序性。

    核心机制

    • 主备模式:所有节点以主节点为准。
    • FIFO队列:保证消息处理顺序。
    • 日志最完备节点:选定日志最完备节点为新主节点。

    优势

    • 顺序性:保证事务原子性和顺序性。
    • 容错性:处理主节点故障,确保数据一致性。

    转载地址:http://swlyz.baihongyu.com/

    你可能感兴趣的文章
    Redis使用基本套路
    查看>>
    php 解决项目中多个自动加载冲突问题
    查看>>
    PHP 设置调试工具XDebug PHPStorm IDE
    查看>>
    php 身份证号检测
    查看>>
    PHP 输入输出流合集
    查看>>
    PHP 过滤器(Filter)
    查看>>
    php 运算符and or && || 的详解
    查看>>
    php 返回html字符串长度限制,记一次js中和php中的字符串长度计算截取的终极问题和完美...
    查看>>
    php 阿里云oss 上传回调
    查看>>
    PHP 面向对象 final类与final方法
    查看>>
    php+JQ+EasyUI自动加载数据
    查看>>
    php+sql server根据自增序号id区间查询第几条到第几条的数据
    查看>>
    php--正则表达式
    查看>>
    php--防止sql注入的方法
    查看>>
    PHP-CGI Windows平台远程代码执行漏洞复现(CVE-2024-4577)
    查看>>
    php-cgi耗尽报502错误
    查看>>
    php-cgi(fpm-cgi) 进程 CPU 100% 与 file_get_content...
    查看>>
    PHP-DI/Invoker 开源项目使用教程
    查看>>
    php-fpm与Nginx运行常见错误说明
    查看>>
    php-fpm比php成为apache模块好在哪
    查看>>