写点什么

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

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

关注

评论

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

富文本及编辑器的跨平台方案

vivo互联网技术

跨平台 编辑器 富文本

架构训练营模块5-作业

sophiahuxh

【Flutter 专题】65 图解基本 TextField 文本输入框 (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

Pulsar Manager - Use Docker

ZHOUWEI

Apache Pulsar

【Vue2.x 源码学习】第三十八篇 - 组件部分 - 组件的编译

Brave

源码 vue2 8月日更

Nginx可观测最佳实践分享,一篇文章带你快速入门!

观测云

nginx 云计算

索信达控股: 银行对公业务数字化营销进阶攻略

索信达控股

后Kubernetes时代的虚拟机管理技术之Virtual-Kubelet篇

谐云

k8s 虚拟机

计算机字符编码的前世今生

vivo互联网技术

Unicode utf-8 编码 ASCII 字符集

从0搭建在线聊天室,只需4步!

网易云信

JavaScript 的 null 和 undefined 判断

HoneyMoose

浅谈在探索数分之路上“数据思维”培养

小飞象@木木自由

数据分析 数据思维

从字节码探索代理模式

4ye

Java 后端 字节码 代理模式 8月日更

Rust从0到1-高级特性-不安全的Rust

rust unsafe 高级特性 不安全

什么是强化学习?

华为云开发者联盟

机器学习 强化学习 智能体 环境 动作空间

Compose 列表

Changing Lin

8月日更

浪潮云IBP机器学习平台通过中国信通院可信云评估 荣获“先进级”认证

云计算

Python代码阅读(第11篇):展开嵌套列表

Felix

Python 编程 Code Programing 阅读代码

手撸二叉树之从根到叶的二进制数之和

HelloWorld杰少

数据结构与算法 8月日更

JVM集合之开篇点题

阿Q说代码

JVM hotspot 8月日更 栈式架构 寄存器架构

SpringBoot dockerfile生成镜像

Rubble

8月日更

基于昇腾CANN的卡通图像生成可在线体验啦!十分钟带你了解CANN应用开发全流程

华为云开发者联盟

ai框架 CANN 昇腾 昇腾AI应用 图像生成

kafka - 基础介绍

旺仔大菜包

kafka

Java双刃剑之Unsafe类详解

码农参上

Java unsafe 8月日更

Regan Yue带你一起学习微软AZ-900认证的有关知识「 第Ⅲ章」

Regan Yue

云计算 微软 8月日更

高可用架构演进之单元化

华为云开发者联盟

物联网 IoT 华为云

架构实战营模块五作业 -微博评论高性能高可用架构

hello

架构训练营

也许你曾对怎么样才算认真做事情感到好奇,这本书给我三个启发,我想与你分享。

叶小鍵

vue入门:组件概述

小鲍侃java

8月日更

细数浅拷贝和深拷贝

苹果看辽宁体育

Java 后端

又翻车了?列表点击事件采集那些你不知道的坑!

神策技术社区

数据库 大前端 后端 代码

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