查看原文
其他

干货 | 可扩展性问题的简单诠释

bloXroute Labs 以太坊爱好者 2019-06-25


围绕着"可扩展性"问题有许多争论,现在我想解释一下可扩展性问题到底是什么、它的原因是什么,让它对社区里最不懂科技的成员来说也变得显而易见。我会提及比特币(它是黄金标准,也是最有名的加密货币),但这一问题对所有区块链来说都是显著的,无论这条链是无需许可的还是限制准入的。


我认为精准地定位这个问题是有价值的,要不然解决起来就很苦难,对吧?


比特币运行的方式是,每次挖出一个新块的时候,该区块被广播到整个比特币网络;整个网络使用“点对点传播机制”,这个名字很讨巧,但意思是矿工将它发送到给另外 8 到 10 个节点,这些节点也将它发送给其他节点,等等,直到它传遍整个网络(或者说 95% 的网络,因为一些节点也会刚好下线了,或者正在重启,或者别的),它被使用因为它是无需信任的。


可以证明的是,即便在理想情况下,也就是没有信息丢失、没有冲突、没有计算开销、没有潜在攻击、没有网络拓扑问题的时候,这一传播模式还是创造了一个瓶颈。


想象一下:


你挖出了一个 1MB 的区块,你准备把它发送给你的同伴。你可以用并行或是串行的方式发送给其他节点,这都会花费同样的时间;但连续地发送将允许你的第一个同伴开始帮助更快地传播区块,而不是当你的所有同伴都完成接收之后(才开始传播)。所以,在理想情形中,节点间连续传输胜于并行传播。


若然,那么,从接收区块到传播到底需要多少时间?经过一个“跳跃”,一个矿工将节点发送给另一个节点,因此 2 个节点有区块了。经过另一个“跳跃”,4 个节点有区块了。三个“跳跃”过去,8个节点就有区块了;它会以指数的形式增长,直到 12-15个“跳跃”,它就会传播整个网络的上千个节点。


比特币现有的交易容量是每10分钟 1MB,又因为交易的平均大小约等于 540 字节,所以,它每10分钟处理接近1950笔交易,也就是每秒钟3笔交易(TPS)。如果你希望将交易容量提高 10倍,你可以将区块大小提高10倍(这是比特币现金的办法);或者你可以将区块时间减少为 1/10。它们的副作用是一样的,所以让我们考虑一下 10倍大区块的方案。


如果你将区块大小提高10倍,你需要的“跳跃”数量还是一样的——12到15个。然而,每一个跳跃都要求通过 60Mbps 的网络(现在比特币网络的平均网速)发送 10MB而不是 1MB的区块,而它要求的时间也会上升 10倍,从 0.13秒变成1.3秒。整个传输时间将上升同样的倍数:10倍。


那么,为什么我们要在乎这事?为什么我要向你们展示整套分析?


因为区块传播时间定义了分叉发生的机会窗口。分叉只会在这种情况下自然发生:你挖出了一个新区块,却不知道一个新区块已经被挖出的事实,也就是只会在新区块还在传播过程中而你还没接收到的时候发生。如果你并没有挖出同个高度的区块,也就不会有分叉;如果你已经接收到了新区块,你的激励就会变成在它上面挖矿。


如果你将区块传播时间提高了10倍,分叉发生的概率也就提高了大约10倍,至少在这个概率非常接近于1 之前,因为这个概率直接依赖于(1)区块传播时间 和(2)区块时间 的比例(这同样也是为什么你增加区块大小或是减小10分钟间隔的区块时间没有区别)。


所以,如果你将区块大小提高了10倍,你也就将区块传播时间提高了10倍,你将会看到差不多10倍的分叉(一旦 10MB 的区块被写满的话),但这还是 OK 的!一旦新区块挖出,区块链会知道如何解决分叉。


但是,如果你想从 3TPS 扩展到 300TPS(这还远远不是 B2B 小额支付要求的好几万),然后将区块大小提高到 100倍,区块的传播时间会变得太长以至于它会超过10分钟的区块时间!你将看到分叉产生的速率高于区块链解决它们的速率,而区块链会“散开”成越来越多的分叉(因为不会再有哪一条才是“对的”链的共识),然后区块链就崩溃了。


就是可扩展性问题,以及为什么没有区块链可以每10秒写满300MB的区块。


我将在另一篇文章中给出更多关于 FIBRE、Falcon、Compact、Xthin blocks 以及 Graphene 的信息;但作为一个起点,我认为将它定义为可扩展性问题产生的根本原因是非常重要的。



原文链接: https://www.reddit.com/r/bloXrouteLabs/comments/86en47/the_scalability_problem_very_simply_explained/
作者: bloXrouter
翻译: 阿剑



你可能还会喜欢:

干货 | 权益证明 FAQ:Part-1
干货 | V神·以太坊上的分片
观点 | 区块链:将信任工业化


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存