专栏名称: 聊聊架构
聊聊架构
目录
相关文章推荐
字节跳动技术团队  ·  基于LLM的AI应急:多模态信息智能化分析整 ... ·  17 小时前  
字节跳动技术团队  ·  远程访问代理+内网穿透:火山引擎边缘网关助力 ... ·  昨天  
字节跳动技术团队  ·  稀土掘金 x Trae ... ·  昨天  
51好读  ›  专栏  ›  聊聊架构

烦人的数据不一致问题到底怎么解决?

聊聊架构  · 公众号  · 架构  · 2018-08-29 12:07

正文

请到「今天看啥」查看全文


  • 非拜占庭错误。没有进行响应产生的错误。

  • 这个问题的核心在于:

    如何解决某个变更在分布式网络中得到一致的执行结果,是被参与多方都承认的,同时这个信息是被确定的,不可推翻的。

    好比如何让所有的小明 X 号收到的都是《按摩指法白皮书Ⅱ》,而不是其它的,并且把原来的那本销毁掉。这个问题衍生出了很多“共识”算法,解决「 拜占庭错误 」的称作 Byzantine Fault Tolerance(BFT)类算法,解决「 非拜占庭错误 」的称作 Crash Fault Tolerance(CFT)类算法。从这个 2 个名字中也可以看出,本质的工作就是「 容错 」。有的小伙伴在平时的工作中可能对「容错」的重要性感知没那么强烈,不就产生一个 BUG 或者异常数据么,但是在航天领域,一个小错误可能导致整个发射的失败,代价非常巨大。

    对「拜占庭将军问题」想深入的了解的,可以自行查阅相关资料,这里就不展开了,文末附上提出时的论文。

    我们常见的软件开发中一般不会考虑「拜占庭错误」,但它是区块链项目的必需品。不过在主流的分布式数据库中,皆能看到「非拜占庭错误」的身影,诸如 Tidb 的 Paxos 算法,CockroachDB 的 Raft 算法。虽然我们大家在日常的 coding 中,对数据库底层原理的了解并不是必须项。但是只要当我们涉及到应用程序级别的高可用时,那么至少「非拜占庭错误」是必须要面临的一道坎。

    三、BFT 类算法

    BFT 类型算法又有 2 个分支。「 基于确定性的 」和「 基于概率的 」。

    先聊聊「基于确定性的」,此类算法表示一旦对某个结果达成共识就不可逆转,即共识是最终结果。它的代表作是 PBFT(Practical Byzantine Fault Tolerance)算法 [2] ,自从有了央行背书(区块链数字票据交易平台),名声更大了。算法的原理,如下图。


    ▲图片来源于网络,版权归原作者所有


    拿军队来比喻,这里的直线 C 可以认为是“总司令”,直线 0 是“军长”,直线 1、直线 2、直线 3 都是“师长”,值得注意的是 3 号师长叛变了。整个过程这样解释。

    1. 「request」:总司令给军长下了一个命令,“干!”。







    请到「今天看啥」查看全文