【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

区块链与 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:007049
用户头像

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

关注

评论

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

“平”地而起,2022中国企业数智服务市场趋势洞察报告即将发布

海比研究院

理解Java中对象基础Object类

Java JVM jdk8 Object

12 高可用的应用(1)

Java 程序员 后端

150 道面试题:集合 +JVM+ 设计模式 +spring

Java 程序员 后端

rfc2988:Computing TCP's Retransmission Timer

Changing Lin

11月日更

统一开发平台通用管理端工程

中原银行

中原银行 管理端

10 K8S之名称空间

穿过生命散发芬芳

k8s 11月日更

Qcon 实时音视频专场:实时互动的最佳实践与未来展望

声网

人工智能 算法 音视频

从欧拉捐赠中,读懂数字基建与数字中国

脑极体

18道kafka高频面试题(附答案)

Java 程序员 后端

布局电力行业,百度智能云与中国电科院签署战略合作协议

百度大脑

人工智能 百度

19年末从外包辞职,10000小时后,进字节跳动拿offer

Java 程序员 后端

NodeJs深入浅出之旅:异步I/O (下)🐂

空城机

大前端 Node 11月日更

ClickHouse深度解析,收藏这一篇就够了~

大数据老哥

150个超实用的网站,整理成资源库页面分享给大家

Java 程序员 后端

15个顶级Java多线程面试题及答案

Java 程序员 后端

18张图揭秘高性能Linux服务器内存池技术是如何实现的

Java 程序员 后端

《大教堂与集市》

石云升

读书笔记 开源 11月日更

大数据毕业作业

Clarke

13万字!腾讯高工手写JDK源码笔记 带你飙向实战(1)

Java 程序员 后端

13万字!腾讯高工手写JDK源码笔记 带你飙向实战

Java 程序员 后端

【死磕Java并发】-----Java内存模型之重排序

chenssy

11月日更 死磕 Java 死磕 Java 并发

-So-easy!多图详解CLH锁的原理与实现,轻松把握AQS

Java 程序员 后端

18级大数据专家,漫谈大数据平台安全风险与建设,值得学(下篇)

Java 程序员 后端

1万字长文高速你千万级并发架构下如何提高数据库存储性能

Java 程序员 后端

在WE大会看见出行未来:告别拥堵,15分钟飞到办公室

脑极体

Java 设计模式 Monads 的美丽世界

码语者

Java 设计模式 Monads

研发人员除了编码还能干什么?

卢卡多多

研发效能 11月日更

互联网 | 逻辑上的黑话才是真正的花里胡哨

程序员 互联网 黑话

10分钟搞定OAuth2

Java 程序员 后端

南瓜电影 7 天内全面 Serverless 化实践

阿里巴巴云原生

阿里云 Serverless 云原生 实践 南瓜电影

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