1. 啥是分布式系统

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

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

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

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

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

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

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

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

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

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

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

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

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

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

老K漫谈区块链的共识(3)——分布式系统和区块链共识的更多相关文章

  1. 老K漫谈区块链的共识(1)——免信任的共识机制

    老k,柏链道捷CTO.清华阿尔山区块链研究中心高级工程师,超过17年的系统软件开发经验,在操作系统.编译器.虚拟机和符号执行方面都有实战经验.主持开发多个开眼项目,目前主要从事区块链底层系统开发工作. ...

  2. 再次记录老K站点的工作策略

    股市开盘了. 据说今天是多空决战的日子. 7月17日.三大期指交割. 打开大盘,看着指数一会上升,一会跳水.好不欢乐.当然,今天我是来记录我的老K,关于老K的下一步. 近期每天傍晚的时候.都会去江边散 ...

  3. 比原链CTO James | Go语言成为区块链主流开发语言的四点理由

    11月24日,比原链CTO James参加了Go中国举办的Gopher Meetup杭州站活动,与来自阿里.网易的技术专家带来Kubernetes.区块链.日志采集.云原生等话题的分享.James向大 ...

  4. 区块链--Ubuntu上搭建以太坊私有链

    1.搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:https://githu ...

  5. 启迪链网通证经济共同体:柏链教育&火聘online推出区块链行业人才“一门式”服务

    近日,启迪链网通证经济共同体旗下两个节点成员柏链教育与火聘online,达成节点间的合作,据悉本次合作是采用共同体的生态共建模式,柏链教育与火聘online共享企业端岗位需求的大数据,然后有针对性的开 ...

  6. CN109241772A发票区块链记录方法、装置、区块链网关服务器和介质(腾讯)

    学习笔记-2 CN109241772A发票区块链记录方法.装置.区块链网关服务器和介质(腾讯) 解决什么问题? 让发票信息记录到区块链的情况下减少发票信息泄露 链上有什么数据? 发行发票事件信息(发票 ...

  7. 小甲鱼PE详解之区块表(节表)和区块(节)续(PE详解05)

    这一讲我们结合实例来谈谈区块表的定义以及各个属性的含义. 首先,我们先用之前学过的一点知识在二进制文件中手动翻找区块表,这样做的好处是可以使你很快的对PE结构牢记于心.学来的东西就是能用的东西,不能用 ...

  8. 【树链剖分】洛谷P3379 树链剖分求LCA

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  9. 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现

    在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...

随机推荐

  1. MySQL索引建立和使用的基本原则

    合理设计和使用索引 在关键字段的索引上,建与不建索引,查询速度相差近100倍.   差的索引和没有索引效果一样.   索引并非越多越好,因为维护索引需要成本.   每个表的索引应在5个以下,应合理利用 ...

  2. mcrypt加密以及解密过程

    Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示 Mcrypt扩展库可以实现加密解密功能 ...

  3. IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证

    IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证 原文:http://docs.identityserver.io/en/releas ...

  4. [转]BTC手续费计算,如何设置手续费

    本文转自:https://blog.csdn.net/servletcome/article/details/81941334 首先BTC的交易手续费和交易金额是没有关系的.不要误认为交易的金额越大手 ...

  5. [转]C#串口通信 SerialPort类

    本文转自:https://blog.csdn.net/weixin_41415541/article/details/80921956 因为公司项目需要将USB扫码枪改为串口扫码枪,串口扫码的好处在于 ...

  6. 一个小时学会Maven

    一.为什么要Maven 在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要. Maven是当前最受欢迎 ...

  7. T-SQL基础(五)之增删改

    在前面的文章中对T-SQL的查询做了基本总结,接下来我们看下SQL中的另外一个常用操作——数据的修改. INSERT INSERT 向数据表中插入数据的基本语句,句式: INSERT INTO tab ...

  8. c# 调用微吼直播API

    /// <summary> /// 调用微吼直播API /// </summary> /// <param name="appKey">< ...

  9. C#中saveFileDialog(另存为)保存图片文件

    弹出另存为提示框保存图片文件: //用户自由选择指定路径保存文件            SaveFileDialog savedialog = new SaveFileDialog();        ...

  10. [android] 采用aidl绑定远程服务

    aidl:android interface definition language 安卓接口定义语言 在两个不同的应用程序里面使用同一个接口 使用场景:调用支付宝服务进行支付 先写远程服务端Seri ...