写点什么

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

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

关注

评论

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

车载运行小程序,快速打造智慧汽车应用生态

Speedoooo

车联网 物联网 智慧终端 智慧汽车 车载小程序

阿里巴巴代码规约检测&Java 代码规约扫描

阿里云云效

阿里巴巴 阿里云 代码扫描 #java 代码规约检测

一文读懂并发与并行

潘大壮

并发编程 多线程 并行 并发’ #java

Petal Maps的美学钥匙,解锁AITO问界M5的硬核浪漫

脑极体

架构实战营6&微信业务架构&学生管理系统方案

唐诗宋词

代码评审的最佳解决方案

阿里云云效

云计算 阿里云 敏捷开发 代码管理 代码评审

面试题笔记

Clarke

车联网数据安全新挑战的技术应对方案

Speedoooo

车联网 物联网 数据安全 容器安全

澳鹏数据标注平台MatrixGo加速人工智能落地

澳鹏Appen

人工智能 数据标注 训练数据

微信业务架构图&学生管理系统架构设计

高山觅流水

架构实战营 「架构实战营」

TDesign 更新周报(2022年3月第4周)

TDesign

CPP进阶:迭代器失效

正向成长

迭代器失效

JavaScript 引擎是如何实现 async/await 的

CRMEB

Hoo虎符研究院|区块链简报 20220328期

区块链前沿News

虎符 Hoo 虎符交易所

java高级用法之:在JNA中使用类型映射

程序那些事

Java 程序那些事 3月月更 JNA

Linux之time命令

入门小站

Linux

在线常用crontab表达式大全验证解析

入门小站

工具

数字孪生PaaS平台WDP4.3正式发布!三大升级,让开发更简单

Meta 小元

云原生 智慧城市 数字孪生

恒源云(GpuShare)_无监督的QG方法

恒源云

自然语言处理 深度学习

NFT游戏NFT数字藏品交易系统搭建开发

薇電13242772558

NFT

Flink Next:Beyond Stream Processing

Apache Flink

大数据 flink 编程 流计算 实时计算

智能家居开放平台技术建设新思路

Speedoooo

物联网 智慧社区 智慧家居 智能终端 应用平台

【ELT.ZIP】OpenHarmony啃论文俱乐部——轻翻那些永垂不朽的诗篇

ELT.ZIP

OpenHarmony 数据压缩 ELT.ZIP

科技向善,“以人为本”将掷地有声!

鼎道智联

性能测试中的LongAdder

FunTester

性能测试 FunTester

赋能创新,深开鸿重磅发布面向金融行业KaihongOS发行版

科技汇

在线HTML压缩工具

入门小站

工具

企业如何实现在线客服功能?

小炮

在线客服

架构实战营-第6期 模块一课后作业

乐邦

「架构实战营」

个全中文注释的迷你Spring!

程序员阿杜

Java spring springboot

直播预告|FeatureStore Meetup V2

星策开源社区

人工智能 大数据 开源 特征平台 MLOps

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