写点什么

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

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

关注

评论

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

外包学生管理系统架构设计文档

smile

外包学生管理系统架构设计文档

「架构实战营」

学生管理系统 - 详细设计方案

tom

外包学生管理系统架构

浪飞

「架构实战营」模块三作业 外包学生管理系统架构设计

hxb

「架构实战营」

网站开发进阶(六十八)防抖节流

No Silver Bullet

防抖节流 2月月更

引领创新技术发展,百度荣获两项数据中心国家级荣誉

百度大脑

Go自定义DNS解析器负载均衡实践

FunTester

HTTP 接口测试 DNS Go 语言 FunTester

NodeJS事件循环

真嗣

前端 nodejs 事件循环 eventloop

模块三作业

Leo

“首席AI架构师”+57人!百度AICA第五期结业啦

百度大脑

系统学习 TypeScript(三)——基础类型

编程三昧

typescript 前端 2月月更

人类的AI调校计划:像个淑女,或者硬汉

脑极体

"5G通达,AI赋能" AI在网络规划中的应用实践

百度大脑

博文干货|在 Kotlin 中使用 Apache Pulsar

Apache Pulsar

开源 架构 云原生 kotlin Apache Pulsar

DDD实战(2):看看代码结构长啥样

深清秋

DDD 软件架构 生鲜电商系统

全国人工智能师资培训班·上海站火热招生中

百度大脑

内网安全-记一次内网靶机渗透

网络安全学海

黑客 网络安全 信息安全 渗透测试

PaddleOCR 部署实战之Java&C#方案直播分享来啦

百度大脑

学生管理系统-详细架构设计文档

AragornYang

架构训练营 架构实战营

【架构师训练营】模块八作业

樰巳-堕~Horry

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

使用 Solidity、Web3 和 Vue.js 创建区块链游戏

devpoint

dapp NFT Solidity 2月月更

Python3 cpython优化 实现解释器并行

字节跳动终端技术

字节跳动 编程语言 代码优化 Python3 火山引擎MARS

学生管理系统架构设计文档

Bear

「架构实战营」

模块三作业

blazar

「架构实战营」

模块三作业

Mr小公熊

重学架构之外包学生管理系统架构设计文档

陈华英

架构实战营

如何高效交付专有云?百度智能云有妙招

百度大脑

中远海运集团总经理付刚峰率队访问百度 双方将加强合作

百度大脑

[架构实战营]-外包学生管理系统架构设计

邹玉麒

「架构实战营」

外包学生管理系统架构设计文档

石小天

「架构实战营」

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