作为全球创新领域备受关注的话题,区块链技术近年来受到投资、学术、工业等众多领域及政府部门的极大关注。那么,何为区块链?简单来说,区块链是一种去中心化的分布式账本技术,是一种特殊的数据库。区块链技术的分布式数据存储应用模式常让人将其与分布式数据库联想起来。分布式数据库和区块链技术,缘起共有的“分布式”理念,但也有一些微妙的差异。本系列文章将从一个数据库从业者的角度,阐述区块链技术与分布式数据库的差异,以及在典型应用场景中的结合。本文作为开篇,将介绍区块链和分布式数据库的概况,并对比二者差异。
区块链技术在各行业的应用
区块链作为一个去中心化的数据库,其常见的应用包括公链,如最广为人知比特币、以太坊,以及典型的联盟链、私链、侧链等。随着区块链技术日益受到重视,很多地区也在发展利用区块链技术来落地的应用,为实体经济赋能。如今,区块链技术的应用早已超越早期的金融属性,很多行业启动了区块链相关的项目,促使各种 Dapp(也就是利用去中心化分布式技术实现的应用),DeFi 应用,以及其基础设施的企业逐渐发展起来,并逐步在供应链、 征信、身份认证、公益慈善、物联网等众多领域展开实践。
与此同时,围绕区块链技术的生态和上下游技术也在全面发展,比如一些区块链基础设施平台,甚至 SaaS 平台的开发。除此之外,区块链也会被作为链下交易的金融工具,比较热门的像数字货币、加密货币,及其交易所,以及其它做量化交易的组织和机构。
分布式数据库典型架构
前面简单介绍了区块链,下面来讲讲分布式数据库,而这就不得不提到大规模分布式存储系统的鼻祖,著名的 Google 三驾马车:
2003 - Google File System
2004 - Google MapReduce
2006 - Google BigTable
随后,受这 3 项技术启发催生的开源产品如雨后春笋般涌现,其中最著名的莫属 HDFS、Hadoop、HBase。但随着各行业的业务发展,BigTable / HBase 这种 NoSQL 架构的产品,由于功能受限,应用场景也遇到很多问题。
后来,Google 于 2013 年发布 F1 这个跨时代的产品,让工业界第一次看到在如此大的规模上运行的 NewSQL 系统。随着 Spanner 的流行,开始有企业尝试根据 paper 做自己的 NewSQL 分布式数据库,例如 TiDB、CockroachDB 等,这些数据库的定位初衷都是解决单机数据库的扩展问题,以及 NoSQL 的功能限制问题。
分布式数据库的典型架构特点是组合多台普通 PC 机系统,每台 PC 拥有部分数据拷贝,通过网络互相连接,共同组成一个完整的数据库,它具有计算存储分离、数据内置多副本、可水平扩展等特性。这里我们以目前在开源社区比较活跃的 TiDB 为例来具体了解下分布式数据库的典型架构。
TiDB 是 PingCAP 公司基于 Google Spanner 和 F1 的实现的开源产品,借助 2014 年工业级分布式一致性协议实现 Raft 论文的思路研发。TiDB 整体技术架构采用真正的分布式计算存储分离的架构,TiDB 层是 SQL 入口层,用作 SQL 解析;TiKV 层是基于 Raft 分布式一致性协议实现的多副本存储引擎,用作数据存储;PD 是整个 TiDB 集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。
TiDB 既不是 Sharding-ON-MySQL,也不是 SQL-On-Hadoop,与传统的单机数据库相比,分布式数据库 TiDB 的核心特性包括:
支持标准 SQL,高度兼容 MySQL 协议
高并发、强一致的分布式事务
计算和存储可按需水平弹性扩展
提供 TiFlash 列式存储,可作为 Raft-Learner 角色,从 TiKV 同步增量数据,提供高性能的 OLAP 引擎的能力;同时,结合 TiKV 可以提供 HTAP 混合负载
TiDB 本身可以支持海量数据存储,并能弹性扩展,同时 TiDB 的存储引擎是一个完整的计算分析引擎, 提供单点入口、相同的逻辑数据和两种存储格式,集成了 OLTP 和 OLAP。分析引擎可以同时处理多种类型的查询,用户只需要写 sql 查询,TiDB 负责确保尽可能快地执行并给出准确结果。
在可靠性上,TiKV 将数据拷贝到多台机器上,如果一台机器出现故障,其他机器上的副本可以继续提供服务。这种数据复制策略必须可靠且高效,并且能够处理副本故障。 TiKV 存储层使用 raft 算法来解决 数据备份和一致性问题。
区块链 vs. 分布式数据库
如本文开头所讲,区块链是一种去中心化的分布式账本技术,是一种特殊的数据库,那能否用分布式数据库来作为区块链的存储呢?分布式数据库与区块链的差异究竟体现在何处?作为数据库从业者,笔者结合实际情况总结了以下三点差异性。
差异性一:去中心化 vs 中心化
首先就是区块链最突出最本质的特征——去中心化。区块的入块出块虽然需要存储和读取,但属于广义的特殊分布式数据库。区块节点遍布全球各处,由单方维护的数据库变成了多方共同维护的一个数据库。没有任何人可以接触所有节点,即没有中心管制,是更加开放安全的,任何人、设备都可以参与进来。
而分布式数据库,通常来讲是中心化数据库。中心化体现在,它通常有统一权限系统、拥有可以操作所有节点的数据库维护人员。不过,分布式数据库不会随便开放到 Internet 上让人们随意读取、加入节点,而是用来解决企业中具体的问题,因此对企业来说是更加可控的。
差异性二:性能
区块链中的公有链(Public Block Chain)已经发展了很长时间,最初是专门为加密货币提出的系统。第一个区块链系统,即比特币,是一种用于记录交易的去中心化账本。最近的区块链, 如以太坊,是借助智能合约支持通用事务,也正朝着通用交易系统演变。它们都完全去中心化,通过共识算法实现交易确认者的分散化,因而安全性高,但同时也导致性能较差,例如比特币和以太坊网络每秒分别仅可以处理 7 和 25 笔交易。
现在随着共识协议的演变,也诞生了另一种私有区块链(private block chain)。私有链是某个组织或个人管理的区块链,管理员可以做更多的操作和行为,因而安全性较弱。但私有链使用了效率更高的共识协议,因此可以实现相对公有链较高的性能。
这两种链虽都进行分布式核算和存储,但在性能上与分布式数据库不可比。相较而言,分布式数据库适用于性能比安全性更重要的场景。区块链首先就交易历史达成共识,并提交到各自存储中,而分布式数据库则在存储层复制,效率极高,通常分布式数据库可以支撑每秒数万甚至百万的交易量。