「性能」问题一直是区块链发展的瓶颈,以太坊每秒几十笔交易的速度,远远满足不了现实世界的需求。随着V神提出以分片技术(Sharding)来解决以太坊性能之后,分片技术逐渐被各个区块链项目引用,被誉为「解决性能的**方案」。
其实,分片技术并不是什么新概念,事实上在数据库领域,分片技术已经得到非常成熟的应用。本文尽量通俗的语言来讲解Sharding技术,让到底可以理解,为什么Sharding可以解决区块链的性能问题。
数据库分片技术
实质上分片的概念源自于数据库的分区表理念,我们首先简单介绍一下分区表:
在传统的IT架构中,数据库负责存储业务数据,比如我们打电话时,手机号、通话时长、话费余额等等信息数据,就存在IT架构的数据库中。因此,随着业务的不断发展,数据库随着访问压力逐渐加大,进而引发系统无法使用的问题。我在大学毕业后,一直从事于基础软件领域的研究和工作,已经有10多年的时间,其中一个很重要的职责就是保障数据库的稳定运行,当数据库不能工作时(宕机),无论前端的应用服务器有多少备份,系统整体上都是不可用状态的,所以数据库是IT系统的重中之重。
当然,出现问题的原因是非常复杂的,其中很重要的一个原因就是单个数据库表过热,我们可以举个例子来理解这个概念,比如超市购物结算时,结算台的数量是有限的,这个时候人多就要排队,就需要等待。数据库表就像超市的结算台,当业务高峰来临的时候,它就成为紧俏的资源,当访问表需要排队的时候,系统的就会缓慢。我们称这个现象为「热表」。
在超市中,管理员可以大喊一嗓子说,到底排一下队,慢慢来。但是在IT系统中,情况完全不同,访问网页或者打卡App多等待2秒,用户就会不耐烦,甚至直接离开,而解决这个问题的一个很重要的办法,就是分区表。
所谓分片技术,其实就是要把数据放到不同的数据库和主机上。但是分片也带来了一些新的问题,我们首先要考虑的就是分片策略,也就是说哪些数据该放哪一个DB上,总要有个规矩。
典型的分片策略,有这么几种:
·基于 用户id 的区间分片,例将用户 id 为 1-10W 的数据存放在 A 数据库,10W-20W 的数据存放在 B 数据库。
·基于 id 的 Hash 分片,例如将 id%2=0 的数据存放在 A 数据库,id%2=1 的数据放在 B 数据库。
·基于时间的区间分片,对于有一些业务场景,比如银行账单查询,新数据**作的几率更大,旧数据几乎不会**作,可以通过数据的插入时间进行分片(也称为冷热分离)。所以银行的App里面要查询超过3个月的数据,总会让用户多操作几下,想查询超过1年的,几乎不太可能,那个分区的数据已经变成冷数据刻在磁带上放到仓库了。
·基于检索表分片,建立一张检索表保存 id 与所在数据库节点的对应关系,就像是书的目录一样。
·基于地理位置分片,像大众点评、滴滴打车之类的软件,由于不同城市的数据不需要互通,可以按照城市分片,将不同城市的数据存放在不同数据库中,这样做的一个优点是可以将数据库服务器部署到离对应城市最近的节点上,还可以提高访问速度。
总而言之,分区想要用的好,需要系统架构师根据业务特点来优化分区策略。也可以理解,为什么这几年系统架构师的收入,迅速在增长。
区块链的分片技术
接下来,我们来介绍一下区块链的分片技术,我们拿以太坊为例,V神采用的是二次分片策略。其实,这个是很容易理解的东西,假设一个节点能处理N个交易,那么主链能追踪N个分片,每个分片都能处理N个交易,所以系统一共能处理N的2次方个交易。
在二次分片中,以太坊将链分成主链和分片两个部分,当交易没有涉及跨片时,则在所属分片区域自行验证完成。这样的设计主链只记录少量信息,从而实现主链记录N个分片的信息,每个分片可以实现实现N个交易的管理。
但是问题是:分片之后,每个分片各自管理自己的交易,速度得到提升,但是如果要给好友转账,而很不幸被分到了不同的链上,这个转账该讲解实现呢?在以太坊中,V神设计了收据的概念,来解决这个问题,如下图所示。
两个分片中。这样就可以完成全局交易的信息收集。因为大部分交易不需要通过主链完成,同时主链只存储少量信息,所以这样的设计即保证跨片交易可以顺利完成,又能大大提升以太坊的整体性能。
目前的区块练技术面临着一个巨大的瓶颈,那就是:讲解有效地提升区块的吞吐量(TPS)。
区块链的扩展性一直是大多数公链发展过程中难以避开的一块拦路石,比特币因之有一段长达三年的扩容之争,以太坊一度因为一个小小的密码猫游戏而长时间拥堵不堪。
目前提出的问题解决思路主要有以下几种:治标不治本的扩容(扩大区块容量)、牺牲部分去中心化的DPoS和pBFT共识机制、不同于区块链的DAG、链下扩容(子链和侧链),以及分片。
分片(Sharding)技术,被认为是一种有效的、能够解决区块链吞吐量问题的解决方案。
一、起源
分片原本是一种数据库分区技术,能够将一个大型的数据库分割成小的数据碎片,并将这些碎片储存在不同的服务器上,使其能够更快更有效地管理数据。
而区块链中的分片技术,是在2015年初次提出的。当时新加坡国立大学的一对师生,在国际**安全会议CCS上发表了一篇论文《A Secure Sharding
Protocol For Open Blockchains》,**提出了区块链领域中的分片概念。
后来,这对师生发展出了第一个分片技术的落地项目Zilliqa,它结合pBFT和PoW共识机制,有6个分片,3600个节点的测试网络,已经能够达到每秒处理2800次交易的速度,是目前公链中处理速度最快的。
珠玉在前,很多为扩展性烦恼不已的项目开始考虑将分片技术应用在自家的区块链上,比如以太坊,V神已经打算在以太坊的区块链上应用分片技术来扩大吞吐量了。此外,还有很多以此为核心技术的新项目正在出现,当然其中也不乏打着分片旗号挂羊头卖狗肉的项目。
不过,分片技术并不是那么容易掌握的。
二、分类和原理
分片技术,有这么几大类:网络分片、交易分片、状态分片。它们的基本原理,都是“化整为零,分而治之”,用多个分片同时处理不同的交易,**汇总到主链上。
首先,网络分片。网络分片较为简单,但也最为重要,因为其他分片机制都必须建立在网络分片之上。网络分片首先要保证安全,预防网络攻击和恶意节点的干扰,随机抽取出特定数量的节点,创建成一个分片。当形成多个分片后,分片中自行建立共识,对交易进行确认。这些分片可以同时、平行地处理相互未建立连接的交易,提高网络并发量。
Zilliqa便是运用网络分片,然后配合网络分片的共识机制,即pBFT共识机制和PoW共识机制,来提升交易速度的。在其中,共识机制之所以重要,在于确认一笔交易,使用pBFT共识机制,可以提高确认速度;而在建立分片之前,要先对网络攻击进行防范,Zilliqa加入PoW机制,就可以有效地阻止女巫攻击(Sybil
Attacks)和恶意节点的进入。
其次是交易分片。网络上创建好的分片处理不同的交易,划分为不同的交易分片,交易划分的依据可以是交易发起者的地址。
假设有人用一个地址向两个人发起相同的交易,即所谓的“双花”,一般情况下,这两笔交易将被划分到同一个分片进行处理,之后分片能够迅速识别出相同的发起地址,从而阻止双重花费。
而如果这两笔交易被分到了不同的分片,分片中的节点同样能够检测出来,将这笔交易拒绝。不过,要防止双花,在验证中就需要分片之间相互通信,这样就会出现跨片交易的情况,影响整个网络的运行和效益。所以,这里的分片**采用UTXO交易模型,更加容易监测出双花,以保证效率。
但UTXO会对大宗交易额进行拆分,一定程度上会影响效率。不过,目前的交易分片技术已经较为成熟,能够允许多种共识机制运行。
**是状态分片,这是最为复杂、**有挑战性的一种分片机制。状态分片的核心在于,不同的分片能够储存不同的数据,也就是说,整个储存库被分开,分别放在了不同的分片上。每个分片储存自己分片中的所有数据,而不是整个区块链的状态。
这一分片机制的挑战在于:
首先,由于每个分片储存的状态不同,如果一笔交易的发起人和接收者处在两个不同的分片,那么这两个分片对于这笔交易的信息就应该进行共享,这样一来,跨片交易的现象又出现了,两个分片之间又得进行频繁的通信和状态互换,将会大大影响分片的效益和性能。
然后,当分片遭到攻击不得不进行脱机工作,其中的交易是无法被验证的。要解决这个问题,就必须在每个节点进行信息的存档和备份,以帮助系统修复数据,但这样的话,节点就必须要备份整个存储系统的状态,失去状态分片的意义,甚至还可能具有中心化的风险。
三、优势与阻碍
分片技术作为能解决区块链拓展性问题的新技术之一,具有非常强的技术优势和广阔的发展前景。通过分片处理交易和数据的方式来消除区块的拥堵,扩大吞吐量,结合其他技术加强安全性和效率,进行互补,是目前分片技术的主要运用趋势。
分片中安全性和性能的平衡是一个值得重视的问题,Zilliqa经过多次实验,决定用600个节点构建一个分片,这是因为600个节点能够到达性能和安全的**平衡。而如果为了提高TPS一味减少节点,对于分片的去中心化和安全性都是很不利的。
分片技术依然存在着很多难题需要解决,尤其是状态分片,计算机技术人员尚未研究出好的解决方案。同时,分片的原理不仅仅在于讲解分片,更在于讲解对每个分片进行安全有效的治理,很多项目一味追求其中的一个方面,忽视了区块链的基本治理问题,这也是需要注意的。
免责声明: 文章源于会员发布,不作为任何投资建议,如有侵权请联系我们删除!
文章标题:你们以为分片(Sharding)真的是什么新技术吗?
文章链接:https://www.btchangqing.cn/436343.html
更新时间:2023年01月06日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。