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. 【网页加速】lua redis的二次升级

    之前发过openresty的相关文章,也是用于加速网页速度的,但是上次没有优化好代码,这次整理了下,优化了nginx的配置和lua的代码,感兴趣的话可以看看上篇的文章: https://www.cnb ...

  2. ES搜索结果调优

    访问我的博客 自从使用 ElasticSearch 重构了主站的搜索项目之后,之后又陆续接入了其他两个项目,目前使用 SpringBoot 方式跑了一个伪集群,主站使用的时候,比较稳定,没有人反馈说有 ...

  3. ES6躬行记(6)——Symbol

    本节将会重点分析ES6引入的第6种基本类型:Symbol(符号).符号可以像字符串那样作为对象的属性名,只是它有唯一性的特点,可以避免属性名之间的冲突. 一.创建 符号没有字面量形式,只能通过Symb ...

  4. 部署vmware-vcsa 6.5

    介绍一下vcsa vsphere的两个最重要的组件是esxi和vcenter server,esxi是虚拟化主机管理软件,而vcenter server则是管理.组织多台esxi主机的管理中心. es ...

  5. SELECT INTO和INSERT INTO SELECT的区别

    数据库中的数据复制备份 SELECT INTO: 形式: SELECT value1,value2,value3 INTO Table_2 FROM Table_1 Table_2表存在,报错:数据库 ...

  6. 第一册:lesson seventeen。

    原文:How do ;you do? A:Come and meet our employees,Mr.B. B:Thank you Mr.A. A:This is ...and this is .. ...

  7. Centos 7.6搭建LNMP环境的web服务器

    一.安装软件 1.1.MYSQL安装 下载mysql的repo源: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rp ...

  8. Mysql索引的类型

    索引的类型 B-Tree索引 B-Tree 索引 通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同. B-Tree 索引 能够加快访问数据的速度,存储引擎不再需要进行全表扫描来获取需 ...

  9. java安全管理器SecurityManager介绍

    java安全管理器类SecurityManager简单剖析: javadoc介绍: SecurityManager是一个允许应用实现一种安全策略的类.它允许一个应用去明确,在执行一个可能安全或者敏感的 ...

  10. 如何实现JavaScript的Map和Filter函数?

    译者按: 鲁迅曾经说过,学习JavaScript最好方式莫过于敲代码了! 原文: Master Map & Filter, Javascript’s Most Powerful Array F ...