【转】区块链公链的 3 大性能难点、5 大体验障碍_区块链的性能影响因素-程序员宅基地

技术标签: 互联网与区块链  

公链作为区块链世界的基础设施中的基石,极大地影响着上层应用的效率、成本以及用户体验。如果从比特币开始算起,公链一路走来已经 10 年了,但至今为止还远未到技术收敛的阶段。在这第 11 个年头,我细数一下已经被大家广为关注的方向,和一些尚未被大家关注的方向。

 

性能难点 1——速度

性能问题从区块链最开始就被大家意识到,直观的体验就是速度,也就是一个交易多久能被确认。最初这个瓶颈是共识算法,Nakamoto 共识最初 10 分钟一次出块,平均交易确认延迟是 5 分钟。而后以太坊将出块间隔降到了 15 秒,期望平均交易确认延迟是 7 秒。但真的是 7 秒就能被确认了吗?其实并不是。这时,性能的瓶颈变成了吞吐量,虽然交易确认延迟是 7 秒,但是大多数交易在排队,除非给出很高的交易手续费来插队。

吞吐量之所以受到限制,是因为普通全节点的带宽,也就是互联网的平均带宽。这个限制和共识算法是本质无关的。很高兴这一点终于被很多团队认识到,避免设计出一些只能运行在本地数据中心内部的高吞吐量系统。要突破这个限制,唯一的出路是切分吞吐量,让不同的全节点负责不同的部分。分片(Sharding)就是完成这种切分的有效方案,当然未来也可能有其它的方案。

在吞吐量问题解决之后,速度上的体验又会回到交易确认延迟这个事情上。当然这个时候的要求就不是要达到几十秒,而是应用会希望可以达到更低的延迟,比如 1 秒甚至以下。计算机系统,在同一个层面的设计上,吞吐量和延迟通常会有矛盾。例如区块链这种分批交易确认方式,一个批次越大,也就是 block 越大,吞吐量就会越大,而这时出块的间隔就需要更长,也就使得交易确认延迟变大

公链的 Layer 1 技术将工作量切分之后,吞吐量将获得几个数量级的提升,然而其交易确认延迟却没有显着的改善。我自己的预判是,这里才是 Layer 2 的侧链真正发挥作用的地方,而不是像现在很多侧链项目宣称的那样,所要攻克的问题几乎和 Layer 1 要攻克的问题完全一样。

 

性能难点 2——容量

容量问题受到关注就少了很多。其实容量问题包含两个方面,一个是内存中的账簿状态,每个用户的余额以及智能合约的状态,另一个是磁盘中归档的历史交易记录

比特币几乎没有被扩展用户状态,并且吞吐量又很低,所以在那个时候,这个容量完全不是问题。但是在吞吐量提升,并且 DApp 开始逐渐繁荣之后,容量问题便逐渐凸显出来。和吞吐量类似,这个问题之所以受到限制,是因为普通全节点的内存和硬盘的容量限制所致。这个限制也是和共识算法本质无关的。

突破这个限制,唯一的出路也是切分容量的负担,让不同的全节点负责不同部分的账簿状态以及交易归档。分片(Sharding)就是完成这种切分的有效方案,当然未来也可能有其他的方案。账簿状态压缩,历史交易压缩都是很好的实践,可以和分片方案一起用。但是这些方向始终受限于单个全节点的本地资源限制,能提高几倍已经是非常不易,而设计良好的分片系统可以提高成百上千倍。

 

性能难点 3——分片

我最初来到这个领域,看其中的性能问题。按说分片是非常靠谱并且直接的解决方案。在区块链以外的计算系统,哪个不是通过划分工作量,分散到不同的计算单元,从而获得几个数量级的性能提升?GPU、Mapreduce、CDN 哪个商用高性能体系不是用这样的架构?当然最初是源自数据库领域。然而,当时圈子里的人却和我说分片是个伪科学,是一个不切实际的方案,无法为区块链扩容提供任何帮助。我当时是惊了,这区块链有什么特殊之处,使得切分工作量变得不可行了?

最后我发现了问题所在。并不是区块链有什么特别之处,而是有个叫 Z 的项目,做了一个不完整的分片方案,仅仅切分了交易处理的工作量,而交易仍旧需要广播给全网所有节点,每个节点仍旧需要维护全网的账簿状态,每个交易的对账簿状态更新计算,所有节点也都仍要算一遍。这意味着完全没有实现分片的好处,也没有吞吐量和容量的提升,同时还引入了额外的开销,导致其实际性能比不分片的系统还差

但是,这个系统总体上安全性是没问题的,继承了之前共识算法的安全特性,所以他们的论文会被 ACM CCS 这样专注计算和通讯安全的会议接受,倒也不令人惊讶。而真正在性能和容量上有突破的工作,为什么要找安全领域专家去评审,难道不应该是找性能领域的专家去评审吗?例如 ACM SIGCOMM、OSDI、SOSP、NSDI 那样的网络系统的会议。当然,在那个空气币都飚上天的年份,Z 出来用这样的技术方案,发个币毫无压力。

所以这里还是要给分片技术正名,这是公链 Layer 1 最靠谱的高性能发展方向。虽然有相当难度,但这是正途。

 

体验障碍 1——交易隐私

自 Zcash 以来,交易隐私成为公链技术中非常重要的特性。和性能不同,这个特性是密码学的主要阵地。其中零知识证明及其相关的延伸算法,是解决这个问题的主流方案。当前的缺陷是算法计算代价比较大,并且仅适用于较简单的验证计算问题,可以满足匿名支付,但是离通用计算还有很大距离。这个也会是一个很重要的方向。

当然,并不是说隐私特性必须要支持通用计算,我觉得只要满足主流应用即可。不过这个方向上,我的一个担忧是在当下这个监管主导的时代,这种强反监管技术,对其上应用的发展可能会有很大的负面影响。

同时隐私有两个方面的内涵,一是用户的状态,例如用户的账户余额,二是用户之间的活动记录,例如 A 给 B 转了 X 个币。监管和隐私也许可以在这两个方面分开找到权衡的点。

但是,如果我们从联盟链的角度去看这一块内容,就是另一番情形了。联盟链是有准入机制的平台,而不像公链那样是完 全 permissionless 的。这个准入机制可以是监管的切入点,同时其实各个商业实体的业务私密性可以得到很好的保障。这是一个意义非凡的方向。

 

体验障碍 2——硬件安全执行环境

硬件安全执行环境芯片(TEE)的出现,使得公允计算、隐私计算变得可以很简单地实现。看起来,我们都可以不需要共识算法了,也不需要零知识证明了。很不幸,这个不是灵丹妙药。暂且不提其计算效率低,内存容量小的问题,最致命的是,一个号称使用 TEE 的节点,没法独立证明他的计算是在 TEE 芯片中完成的,而需要依赖芯片厂商所提供的中心化的背书服务(Attestation Service)。这一点,对于 permissionless 的公链系统来说,是无法接受的。因为至少这些芯片厂商,可以凌驾于运行在 TEE 芯片中的共识逻辑和加密防护,而给出伪造的共识结果,探视隐私数据。

当然,在联盟链这种有准入门槛的应用场景来说,TEE 芯片会是一个事半功倍的解决方案。将 TEE 芯片应用于联盟链的共识机制和隐私计算机制,将是一个很有前景的方向

 

体验障碍 3——中心化的辅助设施

公链系统的正确运行不能依赖于任何中心化的设施,但是中心化的辅助设施可以为公链系统所支持的应用生态,提供有益的优化和用户体验提升。虽然可行,但是现阶段大部分用户并不直接部署全节点来参与网络,而是通过依赖一个或多个可信赖的全节点服务提供商,来完成交互。这个环节的机制和安全性,会极大地影响最终用户使用区块链系统的实际体验。尤其是移动端用户的体验。而这里可以有三个方向上的发展。

一是公共信息服务。现在典型的例子是类似 Block Explorer 或者 Etherscan 这样的数据服务网站和 Web 服务。这些服务使得应用可以很方便地获取链上的状态,而避免承担一个全节点的工作量。但是美中不足的是需要依赖服务提供商的信誉,同时服务提供商有作恶的可能。但是对于不敏感的业务,这些问题尚不构成严重的威胁。

二是交易状态的链上证明。这种证明使得应用可以通过任何一个网上的全节点获取可验证的状态信息,而不需要信任该节点。例如 Ethereum 的 MPT 树(Merkle Patricia Tree)给出可被验证的状态。这种方式也可以提供上述的应用层的好处。并且不需要依赖其它节点的信誉,其它节点也没有作恶的可能性。有待改善的是,这种可被验证的信息类型非常有限。

三是让用户可以低成本地自行运行一个免维护的全节点,各个应用的客户端通过信任并依赖用户自己的全节点来完成链上的交互。这个方向,同时也是硬件的机会,一个面向普通用户的、好用的全节点设备,会是一个很有意义的方向。并且这个做法更有助于公链系统本身的健壮性和去中心化。

 

体验障碍 4——交易确认延迟

交易确认的等待是一个非常影响体验的问题。对于支付应用来说,现在可以降到十几秒确认,用户尚可将就。而对于往复频次更高的应用,如游戏,则需要更低的确认时间,例如百毫秒级。公链本身,首要保证安全性和去中心化,同时也由于批量确认交易才能获得比较高的吞吐量,这使得很难再同时兼顾到交易的确认延迟。前面已经提到,这个 Layer 1 无法解决的问题,才是 Layer 2 应该去攻克。

既然我们分了层,那么各个层应该有明确的差异和目标。Layer 1 用统一的方式承载全网的共识需求,那么就无法利用到特定应用的交易结构来优化。而 Layer 2 是可以分开垂直做的,多个 Layer 2 技术可以在同一个公链上并存,服务于不同的垂直业务。这使得 Layer 2 技术可以利用特定类型应用的交易结构,来弥补 Layer 1 的不足之处,最明显的机会便是交易延迟。

 

体验障碍 5——私钥管理

软件时代用户对个人数据管理毫无负担,数据都在本地,在物理层面保护好自己的电脑就可以了。然后到了在线服务的时代,邮件系统首次大规模地教育了用户,要对自己的个人数据负责,管理好自己的密码。

在那个时代,中心化的服务给为用户提供兜底的保护,提供一系列的方案,帮用户找回遗忘的密码。而今,在去中心化的应用面前,用户承受了更大的负担和责任,保护好自己的数据和资产权益。这个东西是私钥。教育用户保护好私钥,比上一个时代的密码管理要困难得多

首先,私钥不是一个人类可以记忆的东西,每个人的私钥可以自主生成,但是其内容是一个相当长的随机比特串,不是用户自己可以选择的内容。虽然很多钱包支持助记词,甚至中文助记词,但是依旧是需要用户抄下来,而对于大多数人来说无法记在脑子里。其次,在去中心化的体系中,如果用户丢失,将没有任何一方可以提供找回服务,而永远失去对账户和资产的控制权。

因此,在公链系统中,私钥管理是否能提供更好的体验将是一个重要方向。比如利用本身的共识存储机制,或利用附加的 p2p 存储功能,以类似互联网服务的方式将用户的私钥管理起来,从而减轻用户的记忆负担和遗忘风险,但同时不失安全保障和去中心化的要求。相信这会是一个在使用便利性和安全可靠程度之间权衡的方案,适用于不同的场景和用户群体。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shangsongwww/article/details/89351537

智能推荐

zabbix短信告警oracle,zabbix 实现短信告警-程序员宅基地

文章浏览阅读402次。之前一直调用飞信接口发送告警信息,最近购买了第三方短信接口。所以准备使用接口发送告警。短信接口是基于https的摘要认证。https认证还是自己做的,调用接口的时候还需要load证书。感觉超级难用,不管那么多,先让它跑起来再说。废话不多说,先上代码。#!/usr/bin/envpython#coding:utf-8importrequestsfromrequests.authimport..._zabbix实现短信告警

soapui中文操作手册(四)----MOCK服务_soapui设置成中文-程序员宅基地

文章浏览阅读6.8k次,点赞2次,收藏12次。转载地址:http://www.cnblogs.com/zerotest/p/4670005.htmlWeb Service Mocking是武器库一个非常有用的工具。这是解决“如果没有Web服务如何创建针对性的Web服务测试”问题的办法。Web Service Mocking将在这里派上用场。它允许你实际的Web服务产生之前,创建近似或模拟的Web Service。在本教_soapui设置成中文

Swift 包管理器 (SPM):管理 iOS 中的依赖关系_ios spm-程序员宅基地

文章浏览阅读845次,点赞29次,收藏7次。Swift 包管理器 (SPM):管理 iOS 中的依赖关系_ios spm

SCI论文润色真有必要吗?-程序员宅基地

文章浏览阅读381次,点赞10次,收藏7次。总的来说,sci论文润色虽然不会改变论文的学术内容和贡献,但它能够显著的提升论文的质量和可读性,从而增加论文被接受和引用的机会。在论文投稿前都是需要润色的,特别是英文论文投稿,一定得靠谱。但如果是一些小问题,比如语法语句错误,专业言论不恰当,那么你的文章会在投稿过程中外审评定完以后,也会给你返修意见和修改机会。如果是新作者,或者是对自己的语言能力不那么自信,那么是很有必要的。其他人的视角可能会发现你忽略的错误或不清晰的表达,同时也可以提供有关论文结构和逻辑的反馈意见。关于SCI论文润色的常见方法。

Prometheus监控数据格式的学习-程序员宅基地

文章浏览阅读1.1k次,点赞33次,收藏9次。Prometheus 指标(metrics)的数据形式是一种简单的文本格式(容易通过 HTTP 协议被 Prometheus 服务器拉取)。每一行包含了一个指标的数据,通常包括指标名称、可选的一组标签以及指标的值。Prometheus 的指标数据可以有不同类型,如 Counter、Gauge、Histogram 和 Summary,它们的表示形式会有所不同。

数字图像处理(10): OpenCV 图像阈值化处理_binarization threshold-程序员宅基地

文章浏览阅读5.6k次,点赞26次,收藏43次。目录1 什么是阈值化-threshold()2 二进制阈值化3 反二进制阈值化4 截断阈值化5 反阈值化为06 阈值化为07 小结参考资料1 什么是阈值化-threshold()图像的二值化或阈值化 (Binarization)旨在提取图像中的目标物体,将背景以及噪声区分开来。通常会设定一个阈值,通过阈值将图像的像素划分为两类:大于阈值的..._binarization threshold

随便推点

使用安卓模拟器时提示关闭hyper-v_hyperv影响 模拟器-程序员宅基地

文章浏览阅读1.6w次。本电脑是宏碁传奇X,cpu是r7 5800u,显卡rtx3050;使用了雷电、mumu两款安卓模拟器,雷电启动报错g_bGuestPowerOff fastpipeapi.cpp:1161,使用了网上的所有方案都不行,包括开启VT(amd开启SVM),命令关闭hyper-v服务等;尝试mumu模拟器,安装时支持vt项检测不通过,后来发现mumu模拟器在amd的cpu上只支持32位版,换装32位版检测通过,但是只要打开模拟器就提示需要关闭hyper-v,我已经确认关闭后,启动依旧这样提示,查找了网上很_hyperv影响 模拟器

【大厂秘籍】系列 - Mysql索引详解-程序员宅基地

文章浏览阅读564次。MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。● 索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。● 索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。

CSS实现当鼠标停留在一个元素上时,使得两个元素的样式发生改变_css鼠标悬浮修改其他元素样式-程序员宅基地

文章浏览阅读825次。使用兄弟选择器实现同时改变两个元素的样式_css鼠标悬浮修改其他元素样式

文献学习-40-基于可迁移性引导的多源模型自适应医学图像分割-程序员宅基地

文章浏览阅读4.8k次,点赞32次,收藏43次。香港中文大学袁奕萱教授团队提出了一种名为多源模型自适应 (MSMA) 的新型无监督域适应方法。MSMA 旨在仅利用预训练的源模型(而非源数据)将知识迁移到未标记的目标域,从而实现对目标域的有效分割。

(4)FPGA开发工具介绍(第1天)-程序员宅基地

文章浏览阅读8.8k次。(4)FPGA开发工具介绍(第1天)1 文章目录1)文章目录2)FPGA初级课程介绍3)FPGA初级课程架构4)FPGA开发工具介绍(第1天)5)技术交流6)参考资料2 FPGA初级课程介绍1)FPGA初级就业课程共100篇文章,目的是为了让想学FPGA的小伙伴快速入门。2)FPGA初级就业课程包括FPGA简介、Verilog HDL基本语法、Verilog HDL 入门实例、FPGA入门实例、Xilinx FPGA IP core设计、Xilinx FPGA原语与U_fpga开发工具

js中的定时器如何使用_js定时器用法-程序员宅基地

文章浏览阅读1.4k次。JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下setTiemout、setInterval、setImmediate、requestAnimationFrame。首先,我们先来了解一下什么是定时器:JS提供了一些原生方法来实现延时去执行某一段代码下面来简单介绍一下setTimeout() :在指定的毫秒数后调用函数或计算表达式。setTimeout(code,millisec,lang)参数 描述code 必需。要调用的函数后要执行的 JavaScript 代码串。_js定时器用法

推荐文章

热门文章

相关标签