以太坊客户端多样性问题从何而来?

2020-07-17 10:17 栏目:经验之谈 来源:网络整理 查看()

最近,第90届核心开发者大会几乎一直在讨论一个问题。我强烈建议你亲自听这个会议。

在这次会议上,Alexey提出了客户开发人员超载的问题。虽然我认为这次讨论是一个重要的开端,但我们急于找到解决办法,必须充分理解这个问题。重要的是我们需要花些时间分析这个问题。在分析问题内涵时,“五个为什么”是最简单、最有效的方法之一。

不再拖延,让我们看看第一个问题是什么。

第一个问题:为什么Geth的开发团队压力如此之大,以至于超负荷工作?

通过etherscan,我们可以看到每个客户端的安装容量统计如下:

Geth: 75%

奇偶校验开放以太网: 20%

下层: 1%

剩下的4%是由一些市场份额不到1%的客户组成的,所以被忽略了。

重要的是,超过51%的计算能力集中在Geth客户端。让我们假设在即将到来的柏林硬分叉中,Geth在实现一个EIP(以太网改进建议)时有一个错误。即使这个客户端的其他实现没有缺陷,只要一个块遇到这个缺陷,就会导致以太网的分叉。从逻辑上讲,这个块是无效的,其他客户端会认为它是无效的。然而,超过51%的挖掘节点运行Geth客户端,因此整个网络将被带到错误的分叉链。

这要求Geth客户端和开发团队永远不要出错。

因此,第一个问题的答案是:

因为以太网的客户端缺乏足够的多样性。

值得一提的是,客户多元化不会突然将客户开发变成一项轻松的工作。然而,客户多样性本身仍然是一个值得探索的领域,它帮助我们找到提高客户开发效率和减轻开发团队负担的方法。不可否认的是,仅仅通过Geth团队的工作是不可能解决这个问题的。

第二个问题:为什么以太网缺乏客户多样性?

我们在以太网主网络上有多个客户。最重要的两个是Geth和CPPEthereum。后来是平价,CPPEthereum被淘汰了。

从那以后,除了平价,没有客户获得了大的市场份额。去年,耐瑟思维成为一颗冉冉升起的新星,但现在它只占据了1%的市场份额。最近,平价经历了一些波折,前景黯淡,市场份额急剧下降。我们认为,在理想的情况下,以太网需要三个或更多的客户,每个客户的客户份额都不会太高,没有一个客户能够占据远远超过51%的市场份额。虽然客户多元化应该在理想的情况下实现,但我们已经习惯了客户霸权的局面。

那么为什么我们需要多个客户呢?

从我个人的经验来看,建立一个以太网客户比登天更难。Geth可以在以太网上稳定运行,因为它引入了许多复杂的优化。Geth团队花了几年时间才达到如此高的复杂性,并且仍在继续优化。

有些人可能会马上建议我们想办法为落后的客户提供支持和帮助。我担心,如果更多的工程师在软件开发过程中解决一个难题,这种“人-月-神话”式的解决方案——很少会成功,我也不指望这种解决方案会成功。

相反,我认为我们应该关注复杂性。

注:人月神话指出,人多时间短,软件开发进度不能缩短。大量的操作将无助于软件生产,并且会制造麻烦和生产更糟糕的软件。给进度落后的项目增加人力只会使进度更加落后。

第三个问题:为什么构建以太网客户端如此困难?

现在,我们离问题的根源越来越近了。

事实证明,大部分困难来自网络协议,它是以太网客户端软件用来相互连接和共享区块链信息的一套工具。以太网的网络规则(在devp2p代码库中定义)最终会影响甚至决定以太网客户端的设计和需求。

一些网络工具指定了未优化的架构,甚至要求以太网客户端运行不必要的功能。客户端开发人员需要在这些限制下工作。

第四个问题:为什么互联网互连协议增加了客户端实现的难度?

我相信这个问题的答案基本上可以分为两部分。

国家管理

整体网络互连要求

就状态管理而言,以太网客户端必须能够同步网络上的完整状态,并维护状态的本地副本。这两点都很难实现。对于读取和处理状态要求的客户端和服务器,同步状态需要数百万个请求,这将导致磁盘输入/输出饱和。需要维护和删除新同步的状态,以便数据库能够足够快地执行新块。从工程的角度来看,这是一个严峻的挑战!

GetNodeData是我们用来同步状态的唯一网络互连工具,它针对特定的状态数据库格式(通常称为“本机布局”)进行了优化。Turbo Geth推广的“平面”数据库布局在状态维护方面有很大的性能优势,但是使用这种布局会增加处理GetNodeData请求的难度。

一旦我们将注意力转向网络技术,特别是开发P2P以太网协议,我们会发现还有其他因素提高了客户端的复杂性。要加入该网络,客户端需要具备以下功能:

处理GetNodeData请求,以访问最近的块生成的状态;

处理访问链中数据历史记录的请求,包括块头、块体和收据。

基本上,对于许多客户端操作来说,处理这些请求所需的基本数据是不必要的,但是现在它们被迫支持这些功能。这要求所有客户除了满足自己的需求之外,还要构建大量的功能。例如,主要用作事务发送网关的客户端不需要历史链中的数据,可能只需要状态的一小部分。然而,就当前的以太网版本而言,客户端仍然需要保留一个完整的副本。

第五个问题:为什么.

看来我只问了四个“为什么”,就找到了根本原因。以太网协议尚未完全成熟。在设计以太网协议时,我们没有意识到今天发现的大部分问题,或者由于当时规模小、开发历史短,这些问题不是问题。

解决办法

在过去的一年里,我一直在关注这个问题。令我震惊的是,以太网中的许多问题都可以追溯到网络层。

也许最明显的例子是磁盘输入/输出一直是客户端的瓶颈。这种瓶颈的存在是因为客户端倾向于使用树形结构的简单表示(Trie)来执行他们的状态数据库。构建状态数据库的模式由GetNodeData网元决定。

为了解决这个问题,我们需要彻底检查以太网的共识层和网络层的各个部分。目前,维修工作已经开始。大量的工作是以无状态以太博物馆的名义进行的,阿列克谢和我共同领导了8个月。我们所做的一些工作至少减轻了Geth团队的负担,因为他们使用了他们开发多年的SNAP同步协议。还有一部分工作需要由对这个问题有深刻理解并提出可行解决方案的人才来承担。

目前,这样一个庞大的开发P2P以太网协议还没有被完全解构。我们对如何将这个网络分成三个独立的专用网络有基本的了解,但是还没有人直接开始这个项目。

此外,还有像“再造”这样的想法,它们提供了一种完全避免这些问题的机制。这是一个激进的方法,如果成功了,将会给我们带来很大的好处。

首先,我们应该清楚,在以太网中还有许多艰巨的任务要完成,只有少数人有资格完成这些任务。虽然每天都有越来越多的开发人员参与进来,但是他们需要投入时间和精力来学习必要的技能。客户开发人员应该花时间开发新的EVM函数,同时专注于解决日常用户看不到的潜在问题。

如果我们想让以太网取得长期的成功,我认为整个社会应该合作解决这些问题,并对其根源给予足够的重视和讨论。最重要的是,我们应该共同努力创造有效的技术解决方案。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发