速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

ARTS 打卡第 12 天

自由

ARTS 打卡计划

媲美ps的图像编辑推荐 Pixelmator Pro 直装激活中文版

胖墩儿不胖y

图像编辑 编辑图像 图像处理工具

近期大型攻防演练观感及未来攻防趋势判断

墨菲安全

安全 软件供应链

2023 ARTS打卡第一周

犇犇

ARTS 打卡计划

GPT大语言模型引爆强化学习与语言生成模型的热潮、带你了解RLHF。

汀丶人工智能

强化学习 ChatGPT AI大语言模型

Prompt-“设计提示模板:用更少数据实现预训练模型的卓越表现,助力Few-Shot和Zero-Shot任务”

汀丶人工智能

人工智能 Prompt prompt 工程

ARTS打卡第一周

苏籍

技术 ARTS 打卡计划 #成长经验

一云多芯能力再获认可!天翼云助推政企上云行稳致远!

天翼云开发者社区

云计算

助力人工智能教育普及 宾果智能机器人走进全国千所小学

硬科技星球

文心一言 VS 讯飞星火 VS chatgpt (79)-- 算法导论7.4 4题

福大大架构师每日一题

福大大架构师每日一题

2023 ARTS 打卡第一周

Z.

ARTS 打卡计划

如何使用LLM实现文本自动生成视频

3D建模设计

Python 人工智能

开源Java诊断工具Arthas:开篇之watch实战

javalover123

Java 开源 Arthas watch 诊断

Presto 设计与实现(六):JMX

冰心的小屋

数据湖 JMX presto presto 设计与实现

LangChain + Streamlit + Llama:将对话式AI引入本地机器

3D建模设计

人工智能 LLM

从来不懂K8s的人在10分钟内将应用跑在了K8s中

北京好雨科技有限公司

Kubernetes 开发者 云原生 应用部署

一个炫酷的头像悬停效果 2

南城FE

CSS 前端 动画 SASS 交互

领域驱动设计(DDD):从基础代码探讨高内聚低耦合的演进

付威

架构 领域驱动设计 DDD

Programming abstractions in C阅读笔记:p123-p126

codists

【深度学习 | 感知器 & MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络 - ARTS 打卡第 二 周

计算机魔术师

人工智能

ARTS 打卡第 1 周

orient

ARTS 打卡计划

ARTS 打卡第 1 周

AI帅辉

ARTS 打卡计划

【ARTS】Week 1

小小

ARTS 打卡计划

企业级即时通讯协作和移动应用管理平台哪个品牌好?

WorkPlus

如何使用Redis实现分布式锁?

王磊

Java Java面试题

为什么Nop平台坚持使用XML而不是JSON或者YAML

canonical

json xml 低代码 Nop平台

C++的对象与类的含义

梦笔生花

使用 Terraform 与事件驱动的 Amazon CodeBuild 提升云上数据应用运维效率

亚马逊云科技 (Amazon Web Services)

云原生

ARTS打卡Week1

JimDeng

ARTS 打卡计划 go modules

华为云开发工具CodeArts IDE for C/C++ 开发使用指南

华为云PaaS服务小智

ide 开发工具 华为云 开发环境

企业级私有化部署即时通讯,完美替代SaaS平台

WorkPlus

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