博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
老K漫谈区块链的共识(3)——分布式系统和区块链共识
阅读量:7225 次
发布时间:2019-06-29

本文共 1943 字,大约阅读时间需要 6 分钟。

1. 啥是分布式系统

当我们评价一个新的事物或者介绍一个新的技术的时候,我们不能架空历史和环境,新的事物不可能脱离历史和环境凭空诞生。任何新的事物和新的技术总是或多或少的,与旧的事件以及过去的技术有所关联,或是他们的衍生品。所以我们谈到区块链共识的时候,就需要从计算机专业中的分布式系统来讲起,因为区块链说来说去,它也只是分布式系统中的一类而已。

分布式系统在计算机领域中定义为:组件分布在联网的计算机上,组件通过传递消息进行通信和动作协调的系统。这里的组件可以粗略的认为就是一个软件,或者某个软件的可独立运行的一部分。这里面隐含的说明了分布式系统的三个特征:组件的并发行,缺乏全局时钟、组件故障的独立性。我们区块链既然是一种分布式系统,这三个特征也都是存在的。我们经常说区块链的系统中没有一个同一的时间,区块链应用无法获得一个当前的时间,这就是分布式系统的特征之一,缺乏全局时钟。

分布式系统几乎无所不在,从信息领域来说,Google的服务器集群,我们当今的互联网和移动互联网,大型的多人在线游戏,银行的金融交易系统以及我们的区块链系统等等,无一例外都是分布式系统,现在还能找到不处于某个分布式系统的计算机么?很少!而我们身边的生活场景中,也是存在很多的分布式系统,跨地理区域的全国投票选举,地理分布的多个朋友协商聚会,一个蚁群中多个蚂蚁相互通知食物的位置等等。

2. 啥是分布式系统的共识

分布式系统对外可以提供统一的服务。在这里,如果想让分散在不同计算机的组件协调起来,我们需要有一个机制能够协调这些组件,我们把这个机制叫做分布式系统的共识,区块链的共识是我们分布式系统共识的一种。

3. 关于分布式系统的分类

分布式系统中的概念非常多,在这里面我们介绍和区块链共识相关的两组概念。第一组概念是同步和异步,我们可以把分布式系统按照同步和异步分成两类。对于同步的分布式系统,我们描述为处于分布式系统的不同计算机之间通信,消息不丢失而且秒到,也就是说通信即快而可靠。而异步的分布式系统是通信不可靠,分布式系统中的不同计算机之间相互发送消息,消息有延迟而且也可能丢失。我们可以认为我们的内部局域网是一个同步系统,大的互联网是一个异步系统,前者通信无延迟且可靠,后者通信慢而且消息可能丢失。

第二组和区块链共识相关的分布式系统概念是拜占庭容错(BFT,Byzantine Fault Tolerant),即可以容忍拜占庭错误(BF, Byzantine Fault)的分布式系统共识(即使存在拜占庭错误,分布式系统还可以正常工作),所谓的拜占庭错误,即分布式系统中的计算机(节点)不但有可能产生故障还有可能产生错误。这里故障只是不响应或者停机,而错误是指计算机(节点)有可能发送错误的消息。我们也可以理解为两军对战,其中一方出现了叛徒,出现叛徒的一方的问题就定义为拜占庭错误。所以我们可以从这个角度把分布式系统来分为:拜占庭容错的分布式系统和非拜占庭容错的分布式系统。

我们从上面的两组概念中可以把分布式系统划分为以下四类:

分布式系统类型 同步 异步
拜占庭容错 同步拜占庭容错 异步拜占庭容错
非拜占庭容错 同步的非拜占庭容错 异步的非拜占庭容错

4. 回到正题:区块链共识

如果我们想按照上面的分布式系统分类来划分区块链的话,我们可以把区块链简单的划分为一种异步的拜占庭容错的分布式系统。为什么是拜占庭容错的分布式系统,是因为区块链中是假设参与的计算机或者节点是有坏人的,它们会发错误消息和假消息,所以区块链中是存在拜占庭错误的,可以推出区块链是一个拜占庭容错的分布式系统。当然由于区块链是分布在我们的互联网上,按照上面的定义我们认为互联网是一个异步分布式系统,所以区块链也是一个异步分布式系统。

5. 题外话:关于异步分布式系统的共识

关于异步式分布式系统的共识,有这样一个基础的结论,FLP不可能原理。是在1985年由Fischer, Lynch 和 Patterson三位计算机科学家,提出了一个FLP不可能原理:“在网络可靠的前提下,任意节点失效,一个或者多个的最小化异步模型系统中,不可能存在一个解决一致性问题的确定性算法。即如果存在任意节点失效的情况下,就无法完全保证分布式系统可以达到同步”。我们可以理解为认为完全异步的分布式系统是无法达到共识的。所以我们区块链的共识机制或多或少的对异步式分布式系统加了一些限制条件,比如pBFT共识算法,它假设节点之间消息节点有延迟,但是在有限时间内是可以达到的。所以我们区块链为了达到共识,也是有一点限制条件的异步分布式系统。

转载于:https://www.cnblogs.com/tokenpai/p/9390931.html

你可能感兴趣的文章
在 Windows 中安装 Laravel 5.1.X
查看>>
TeamViewer 9发布-在Linux下安装运行
查看>>
Centos7 Gitea安装教程 - 一款易搭建,运行快的Git服务器
查看>>
CentOS minimal 网络配置
查看>>
Nginx架构
查看>>
为什么结构体中的数组不能用const int变量指定大小?
查看>>
模板特化疑问
查看>>
ruby多线程理解
查看>>
享用甜点时要不要来杯咖啡?Java 与树莓派 (Raspberry PI)
查看>>
精通Oracle 10g Pl/SQL编程
查看>>
邱怡轩:R中大规模矩阵的SVD与矩阵补全
查看>>
C++ Primer习题集(第5版)
查看>>
centos7 mysql 5.7 yum安装
查看>>
JSOUP简单应用
查看>>
Mysql,SqlServer,Oracle主键自动增长的设置
查看>>
开源 java CMS - FreeCMS2.3会员登录
查看>>
malloc(0)的返回值
查看>>
析构方法、克隆对象
查看>>
Python字符编码详解
查看>>
Android开发 Firebase动态链接打开APP
查看>>