写点什么

区块链与 CAP 原理

  • 2017-04-13
  • 本文字数:1078 字

    阅读完需:约 4 分钟

微软首席架构师 Yaron Goland 最近发表了一篇文章,讲述了一个区块链客户端如何可以被实现为 AP 的或 CP 的,这取决于它的实现方式。具体是要可以配置在一个事务结束之后必须有多少个区块收到这个事务,才认为它可以被接受了。在事务之后接收到它的区块越多,它就越可能获得系统范围内的共识,即一致性。

一个区块链就是一套点对点的分布式数据库,没有中心节点可以决定数据正确与否。Goland 讲述到在诸如比特币之类的数字货币等场景下,这个问题尤其会造成巨大的困扰。可能用户以为他已经用真实的货币换到了比特币,可是等了一会他去查看自己的钱包时,却发现比特币不翼而飞了。

可是区块链只是一系列的不可变的数据块,而且非常可能每个节点都各自构建起一套不同的事务历史链。这样的背离叫做分枝,也是 Goland 的例子中一致性问题的根源所在。他解释了区块链是如何用一致性算法解决这个问题的,最终会有绝大多数达成一致,抛弃掉某些分枝。

“这是最终一致性的一个非常经典的例子。两个相互冲突的值被记录下来,系统在内部各节点之间进行通信,最终使用一种冲突解决协议来选出优胜者。”

Goland 指出,选择是否等待区块链最终变成一致的,这决定了客户端是 AP 的还是 CP 的。要成为 AP 的,一旦事个事务被加入到区块链中,客户端就要马上接受它。这样,就没有对其它节点的依赖,并且可以使数据可用,但这里有个风险,就是别的节点有可能会拒绝这个事务,因而这样做牺牲了一致性。如果想要成为 CP 的,客户端就应该在区块链针对某个事务达成了一致决议之后,才接受它。这样做的负面影响在于,数据的确一致了,但在有网络分区问题存在时却可能会阻碍一致性的达成,从而使数据不可用。

关于如何等待一个事务达成系统内一致性的问题,Goland做了一番详细的解释,总结起来就是:“直到至少有X 个区块同意之后,才能认为某件事发生了”。这就意味着一个事务发生之后,客户端必须等待,直到再有X 个区块也收到了,才能接受它。

Yanos 还强调,让客户端在这个方面成为可配置的,这样做并不违反 CAP 原理。因为这样的配置方法是在可用性和一致性之间做出的权衡——是不可能同时拥有这两种特性的:

“所以我们上面解释的并不是在说比特币如何能既是 AP 的又是 CP 的。我们上面只是在讲述如何通过完全不同的 CAP 权衡来构建两种完全不同的系统,方法就是除了客户端之外,让比特币的所有部分都保持相同。”

总之,Goland 证明了尽管区块链是一种点对点的模型,强一致性的需求仍然是可以被满足的。这对于比特币之类的数字货币来说尤其重要,因为这种权衡意味着用户可以信任事务的结果。

阅读英文原文 The Blockchain and the CAP Theorem

2017-04-13 19:007514
用户头像

发布了 152 篇内容, 共 75.7 次阅读, 收获喜欢 64 次。

关注

评论

发布
暂无评论
发现更多内容

android界面开发经典书籍,你真的了解Android系统启动流程吗

android 程序员 移动开发

Android高级工程师每日面试题精选,重要概念一网打尽

android 程序员 移动开发

BAT这种大厂履历意味着什么,字节跳动资深面试官亲述

android 程序员 移动开发

另一只眼看软件研发效能提升,软件研发效能的“人性”与“物性”

博文视点Broadview

android面试题及答案2019,rxjava原理面试

android 程序员 移动开发

flutter下拉刷新背景,学Android看这就完事了

android 程序员 移动开发

flutter跳转原生,零基础也能看得懂

android 程序员 移动开发

精品 IDEA 插件大汇总!值得收藏

程序员鱼皮

spring 编程 后端 插件 java

android游戏开发入门,精心整理

android 程序员 移动开发

android程序员面试笔试宝典,完整版开放下载

android 程序员 移动开发

Android面试题集锦在这里,Android开发面试基础

android 程序员 移动开发

android音视频何俊林,音视频开发进阶指南

android 程序员 移动开发

深圳企业办理等保业务,应该怎么办理?选择哪款堡垒机好?

行云管家

网络安全 等保 等级保护 等保测评

android物联网开发李天祥源代码,实现原理讲解

android 程序员 移动开发

android算法面试题,附超全教程文档

android 程序员 移动开发

android音频面试题,android组件化开发框架

android 程序员 移动开发

flutterpageview嵌套,阿里P8亲自讲解

android 程序员 移动开发

fluttertextfield光标,想跳槽涨薪的必看

android 程序员 移动开发

博文视点“阿里云全系列技术图书”隆重亮相2021云栖大会

博文视点Broadview

android混合开发,【高级Android架构师系统学习】

android 程序员 移动开发

Android研发岗面试复盘总,成功入职字节跳动

android 程序员 移动开发

flutter教程gitbook,走进Android架构

android 程序员 移动开发

android直播开发,自学编程找工作

android 程序员 移动开发

android网络开发技术答案,retrofit原理

android 程序员 移动开发

android音视频面试,小程序开发教程

android 程序员 移动开发

flutter页面跳转数据,直面春招

android 程序员 移动开发

android项目开发实战入门百度网盘,【面试总结】

android 程序员 移动开发

Android研发岗面试复盘总,你们觉得作为一名程序员最大的悲哀是什么

android 程序员 移动开发

flutter中文教程,程序员必看

android 程序员 移动开发

flutter瀑布流组件,腾讯T3面试官透露

android 程序员 移动开发

flutter调试技巧,惊喜

android 程序员 移动开发

区块链与CAP原理_语言 & 开发_Andrew Morgan_InfoQ精选文章