想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】链客,有问必答!

区块链系统和CAP、ACID和BASE

为什么我们说区块链系统其实是一个分布式数据库系统?

ACID

传统的数据库都满足ACID原则。我们首先来看一个“事务”(transaction)的概念。事务是一个操作序列,是一个不可分割的基本工作单位。在一个传统的数据库管理系统(DBMS)中,事务应该具有四个特性:

原子性(Atomicity)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

取这四个英文单词的首字母缩写,我们得到的是ACID。

原子性指事务是一个不可分割的最基本工作单位,事务中的操作要么都执行,要么都不执行;一致性是指数据库的完整性约束不会被任何事务的发生破坏,也就是说数据库的事务不能破坏数据的完整性;隔离性是说多个事务并发访问时,事务之间是被隔离开的,一个事务不应该影响其他事务的运行效果;持久性则意味着在事务完成以后,该事务所对数据库做的更改便被永久保存在数据库之中,即使系统本身发生了事故也不会更改。

从ACID的四个特性来看,我们发现其实比特币区块链系统几乎具有这些特点:

一个区块要么被全部记录进入区块链,要么不被认可,不可能有中间状态;

一个区块在加入区块链之后,原本区块链的系统依然保持完整性;

每次只有一个区块可以被加入到区块链中,所以隔离性是当然的;

而在区块被写入链条之后,新的区块链会被复制到所有的区块链节点上,被永久保存。

在区块链系统上有一个特殊情况,如果两个不同的节点差不多同时申请挖币的奖励,那么它们中会有一个节点计算出的区块在最终会被抛弃,因而ACID特性中的D(持久性)其实是不满足的。

BASE

因为区块链节点处于地球各处,而这些节点又是由不同用户维护的,所以其实我们并不能保证每次访问区块链的系统时都能获取到数据,而这恰恰又对应了互联网时代分布式数据系统的一个特性,可以称之为为BASE。BASE是一个很怪异的词语的缩写:Basically Available,Soft-state,Eventual Consistency(基本上是可访问的、软状态、最终一致性)。

在BASE理念中,基本可用是指系统在出现不可预知的故障时,允许损失部分可用性;软状态是指允许系统中的数据存在中间状态,不过该中间状态的存在并不会影响系统的整体可用性;最终一致性指的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一致。

和ACID概念的强一致性相比,BASE理念面向的是可扩展的分布式系统,BASE通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的。不过两者的共同点是最终会达到一致状态。我们可以认为区块链系统符合分布式数据系统的BASE理念。

CAP

我们再来看区块链系统和分布式数据系统上的CAP理论之间的关系。在分布式数据系统中,有三种重要的属性,分别是:

一致性(Consistency):数据一致性,任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。

可用性(Availability):好的响应性能,每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。

分区容忍性(Tolerance of network Partition):可靠性,在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。

CAP原理解释了关于这三种属性的关系。CAP原理的意思是:一个分布式系统不能同时满足一致性、可用性和分区容错性这三个需求,最多只能同时满足两个。CAP原理是由美Berkerly的Brewer教授提出。

如图1所示,CAP原理指出一致性、可用性、分区容忍性不可三者兼顾。因此在进行分布式架构设计时,必须做出取舍。而对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。

牺牲一致性而换取高可用性,也是大多数分布式数据库产品的方向。

笔者在比特币区块链系统中看到了“一致性”被牺牲的情况。当一个新的区块被部分节点接受时,如果用户访问的是还没有更新的节点,那么用户获取的数据是不一致的,所以从分布式数据系统的角度来看,比特币区块链系统其实是一个AP系统,也就是说,它保持了可用性和分区容忍性,不过放弃了一致性。

区块链有哪些特征

在区块链进入大家的视野之前,分布式数据系统也一直是学术界关注的一个方向。不过在区块链概念出现之后,大家发现原来分布式系统还可以有新的处理方式。

基于区块链的数据系统特征

去中心化或者多中心化(Distributed or Decentralized)

区块链最大的特性就是使用分布式计算和存储,从而减少甚至消除中心化的硬件或管理机构。在区块链上,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。

开放性(Open)

系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何(有权限的)人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。

自治性(Autonomous)

区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全地交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预都不起作用。

信息不可篡改(Untemperable)

一旦信息经过验证并添加至区块链,就会永久存储起来,单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。

匿名性(Anonymous)

由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方对自己产生信任。

区块链的核心在于数据

区块链和大数据是两个在过去几年中都得到飞速发展的技术。2016年第46届世界经济论坛达沃斯年会论坛的主题为“掌控第四次工业革命”,包括人工智能、无人驾驶、区块链、量子计算等在内的科技前沿领域在会议中被反复提及。

目前区块链能够承载的信息数量是有限的,离我们要用“大数据”的标准来衡量的地步还差得很远,不过千里之行始于足下,要一步一步地来。

如果要让区块链承载大数据,那么目前笔者所看到的这些区块链系统都还不具备这个能力。

我们来看区块链系统三个和大数据有矛盾、需要改进的特点:

分布式的

有隐私的

安全的

区块链系统是分布式的,而大数据讲究的是可规模化的、可量化的数据;区块链系统是匿名的、有隐私的,而大数据在意的是个性化;区块链系统是安全的,信息是相对独立的,而大数据在意的是信息的整合分析。

区块链系统本身就是一个数据库,而我们所说的大数据指的是对数据的深度分析和挖掘,也就是说,数据分析和数据挖掘需要构建在区块链系统之上,把数据的价值发挥出来。

如果要做到以数据为基础来做决策,那么区块链的大数据化是区块链系统必须要完成的一个步骤。

区块链系统的局限性和门槛

微软亚洲研究院系统算法组首席研究员Thomas Moscibroda在2017首届科技金融国际峰会上提到了区块链的效率和隐私问题。在区块链中,每一个人都在分享自己的数据,而且每一个交易记录都需要被所有人核实、记录和存储。一方面,这个过程会使区块链对传统数据库而言更慢。另一方面,区块链双方的交易过程中第三方必须知晓,且会去核实这个交易的合法性和正当性,而每一个人都能知道交易双方的中间数据,这也带来了隐私问题。

String Labs联合创始人Tom Ding认为区块链技术其实是一项有相当门槛的技术,在整个世界上可能也只有为数不多的团队有能力开发底层区块链系统。

Alphabet的DeepMind Health部门已经宣布计划使用一种与分布式账本一样的系统来监视目前正在被使用的患者数据。他们的工具命名为Verifiable Date Audit(VDA)。Alphabet声称VDA并不是区块链,而是类区块链。VDA借鉴了很多来自比特币区块链的功能,包括不可更改性。同时还提供某种程度的透明度,所以第三方机构可以验证这些数据。

R3的技术主管Richard Brown针对他们的产品Corda是这样评述的:“Corda是一个分布式账本平台,它很大程度上受到并吸取了区块链系统的优势,去掉了很多不适用于银行业场景的区块链设计。”

笔者和包括Thomas在内的一些专家做过深入探讨,我们的共同观点是从架构上来看,在未来的3年甚至更长的时间内,包括比特币和以太坊区块链在内的主流区块链系统都无法有效提升技术应用到有高频数据录入需求的场景上。当然,如果一个区块链系统未来的场景在有足够大的用户和数据量的情况下每秒的交易量也不会到达千这个数量级的话,还有实现的可能。

关于区块链数据库

笔者一直坚持的观点是不以实际应用为目的的技术都是耍流氓,那么如何让区块链系统真正商用化?受到微软和Google各位同学的启发,我们认为如果要真正商用化区块链系统,唯一的出路就是区块链数据库(Blockchain DataBase)。

我们在设计的区块链数据库兼有区块链系统和数据库系统两个系统的优势。

正如笔者在前面说过,区块链系统是符合BASE理念的,不过并不满足ACID。所以我们可以选择一个不满足ACID,而符合BASE理念的数据库来做底层数据架构。对于了解数据库系统的同学而言,可以选择的数据库底层架构已经呼之欲出了。

而与传统的数据库系统相比,区块链数据库将能够拥有原先系统所不具备的特性,也就是笔者在前文中所讲述的区块链系统的各种特性。

区块链数据库中的数据

比特币区块链的可扩展性是一个大问题。如果不提升数据块的大小,整体的交易量则无法提升,而如果提升了数据块的大小,因为每个客户端的节点都会有数据库的完整拷贝,数据存储会是一个非常头疼的事情。

不同于传统的区块链系统,区块链数据库将会拥有数据库系统的可扩展性和性能:

数据可以超过1TB,甚至到达PB的数量级

并发写入的数量级可以达到10-30万笔/秒

单条事务数据没有上限

区块链数据库的共识模块

区块链数据库中共识模块的作用是让系统中所有的数据节点都能够保持一致。如果一个节点的区块链上添加了一条新的交易,那么数据库中所有其他节点也会把同一个交易加入到各自的区块链上。

共识模块的关键点就在于保持整个系统中所有交易顺序的一致性。

共识算法在以太坊和比特币区块链中的达成是通过工作量证明(POW)或者权益证明(POS),而IBM Hyperledger和其他一些想要提升效率的区块链系统采用的是PBFT(Practical Byzantine Fault Tolerance)协议。后者的效率会高很多,不过网络传输的数据会根据节点数的上升而成倍增加。

区块链系统其实是一个分布式数据库系统相关推荐

  1. 用Java实现一个区块链系统 附源码!

    微信公众号:Java随笔录 关注可了解更多Java相关的技术分享.问题或建议,欢迎公众号留言! 如果你觉得JiangNanMax对你有帮助,欢迎赞赏! 文章目录 前言 1. 介绍 2. 实现细节 2. ...

  2. 【转】互操作性的区块链系统设计理念

    论文 Towards a design philosophy for interoperable blockchain systems 的介绍和评论.有兴趣的读者可以使用超链接查看论文. 从前因为有了 ...

  3. 区块链系统开发实现原理,区块链为什么叫区块链?

    区块链交易平台系统开发原理:"区块链使用强大的加密技术来维护虚拟安全,通过整体计算机的复杂数学运算机制来验证,删除与存储,区块与之前的区块相互关联,因此形成区块链." 区块链分为三 ...

  4. 牛逼,一整套基于Java开发的的区块链系统(附完整源码)

    前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究,从各大招聘网站的区块链职位来看,薪资待遇都很不错,月薪30K到80K的都有, ...

  5. 互操作性的区块链系统设计理念

    本文为作者对一篇论文 Towards a design philosophy for interoperable blockchain systems 的介绍和评论.有兴趣的读者可以使用超链接查看论文 ...

  6. 基于Java开发一套完整的区块链系统(附源码)

    来源:https://blog.csdn.net/victory_long 前言 近几年区块链概念越来越火,特别是区块链技术被纳入国家基础设施建设名单后,各大企业也开始招兵买马,对区块链技术进行研究, ...

  7. LikeLib侧链:搭建区块链系统信任传递桥梁

    几乎没有什么技术比区块链更能吸引关注和争议了.对某些人来说,这是未来革命性的技术:对另一些人来说,它是一个骗局或庞氏骗局. 我已经概述了科技在通往每个办公室,或许是全世界每个家庭的旅程中所面临的四个问 ...

  8. 区块链系统简要架构和重点知识点梳理

    区块链几大核心: 分布式帐本,所需技术:微服务架构,高性能RPC通讯. 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,每一个数据链表可以看作账本.它由多个区块构成了一个有 ...

  9. 深入研究区块链系统的优势

    深入研究区块链系统的优势,区块链系统研究,深入研究区块链系统的优势,区块链系统分析,区块链APP说明,区块链软件解析,区块链模式探讨,区块链软件解剖,区块链平台概念. 以互联网为媒体,以新的方式.方法 ...

最新文章

  1. 机器人编程语言python-机器人行业,10大流行编程语言对比
  2. Linux 系统运维 文件操作命令
  3. python数独游戏源代码100行_python实现解数独程序代码
  4. 软考-信息系统项目管理师-项目变更管理
  5. option标签selected=selected属性失效的问题
  6. C++ opengl GL_QUAD_STRIP的绘制
  7. 创建 Oracle 物理备用服务器
  8. 使用HanLP分词时,词性标注错误的问题
  9. 一键安装Tengine服务器,TengineRPM(LTMP)构建高效、稳定、安全、易用的Web平台
  10. 459.重复的子字符串
  11. arduino ps2摇杆程序_Arduino 双轴按键摇杆 PS2游戏摇杆 控制杆 JoyStick 电子积木
  12. 计算化学系列教程-第一章-薛定谔方程
  13. 线性代数的本质——学习笔记
  14. 智能卡卡发卡流程(收藏2)
  15. 知识图谱实体预测任务如何计算filtered MRR
  16. Android:高德定位及搜索周边地址
  17. Aseprite学习/技巧
  18. Fedora Core 6安装手册
  19. linux的crontab 命令,每三个月的月末执行一次
  20. pip安装指定keras版本

热门文章

  1. android最新发布系统,首款Android 7.0手机LG V20发布 KingRoot教你玩转新系统
  2. Android服务器时间校准
  3. tensorflow实现inception V3
  4. oracle nlog,C#使用NLog记录日志
  5. 『MySQL』行号关联查询
  6. 5G为云游戏插上翅膀,网络游戏变革时刻已到
  7. 细数后台开发的技术栈
  8. 英国无线电设备法规的合规要求-跨境创业找众光
  9. 安全的安装PuTTY 0.70
  10. 基于51单片机的指纹密码锁