写点什么

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

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

关注

评论

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

声网管浩森:元宇宙派对场景的最佳实践

声网

实践 元宇宙 RTE2022

选取数据的原则

穿过生命散发芬芳

数据分析 12月月更

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

BlockChain先知

多名网络主播因恶意炒作被列入警示名单,如何打击这种违规行为

石头IT视角

Chrome浏览器竟然可以用ChatGPT了!

Jackpop

2022-12-16:给你一个长度为n的数组,并询问q次 每次询问区间[l,r]之间是否存在小于等于k个数的和大于等于x 每条查询返回true或者false。 1 <= n, q <= 10^5 k

福大大架构师每日一题

golang 算法 福大大

ZBC陆续在主要CEX开启Staking,锁定市场大部分流通量成大利好

股市老人

架构实战模块1作业

Geek_e3a35c

打造算力新引擎!安擎上海智能制造基地正式运营

科技热闻

云渲染是什么?云渲染和自己渲染有什么区别?

Renderbus瑞云渲染农场

云渲染 渲染农场 云渲染平台

凭借这份Java面试复盘笔记,我在2022寒冬之际也斩获了多张Offer!

程序员小毕

spring 程序员 后端 架构师 java面试

模块二 -- 朋友圈高性能复杂度分析

陈实

「架构实战营」

AngularJS进阶(四十二)ng-options渲染的第一项为空问题分析及解决方案

No Silver Bullet

12月月更 ng-options 页面渲染 上拉加载

场景 | 大型电商企业运营管理数字化解决方案

九科Ninetech

极客时间运维进阶训练营第八周作业

好吃不贵

浪潮 KaiwuDB 陈磊:布局数字能源,创新助力 “双碳”

KaiwuDB

关于K8s集群环境工作组隔离配置多集群切换的一些笔记

山河已无恙

k8s管理 K8s 多集群管理 12月月更

来聊一聊 ElasticSearch 最新版的 Java 客户端

江南一点雨

Java elasticsearch springboot ES

C++开发,这些GUI库一定不要错过!

Jackpop

下一个AI舞台,名叫煤矿

脑极体

横空出世!阿里巴巴Spring全家桶实战笔记真香

Java永远的神

spring 源码 架构师 springboot SpringCloud

SpringBoot整合Swagger2,再也不用维护接口文档了!

@下一站

12月日更 12月月更 springboot整合 swagger2

大数据培训工作就业前景怎么样

小谷哥

2022中国产业数字化发展成熟度区域指数分析——充分利用特长,形成区域比较优势,夯实中国式现代化建设基础

易观分析

数字化 产业

Verilog的语句块

芯动大师

Verilog Verilog语法 Verilog语句块

chatGPT的49种应用场景介绍,各开发语言接入chatGPT参考指南

非喵鱼

Java Python 前端 编程语言 ChatGPT

专利进阶(一):软件专利工程师浅谈如何针对计算机软件类专利申请进行技术挖掘

No Silver Bullet

专利 12月月更 软件专利工程师 技术挖掘

相见恨晚!Git这些功能太好用了!

Jackpop

Python开发游戏?也太好用了吧!

Jackpop

数据库原理及MySQL应用 | 数据库安全加固

TiAmo

安全 数据库· 12月月更

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