干节点运维已经六年了, 在被问到最多的问题里, 区块链节点到底是不是分层这个问题排在了前列。这个问题的答案不是能用简单的“是”或者“不是”来回答的, 它必须得看你的链规模有多大、跑的又是什么样的场景。接下来要把这这些年踩过的坑摊开来详细地讲述一番。
区块链节点分层有啥用
全节点在同步整条链的过程中, 当数据量积累到了一定的量级之后, 硬件资源就扛不住了。根据我们的测试记录显示, 一旦区块链账本的大小超标达到了40GB, 普通的全节点如果想要重启并进行同步操作, 整个流程跑下来得要将近十四个小时。

而实施分层机制后, 轻节点仅仅只需要拉取Merkle根数据以及区块摘要信息。这一改变直接把验证业务的时间长度压缩到了十几分钟的范围, 使得系统运维方面的压力得到了大幅度的缓解。
这个代价其实是非常明显的。随着层间通信次数的不断增加, 网络拓扑结构的复杂程度确实会一下子增加非常多的倍。要是中间某一个层级出现了离线的问题,那么它下游的所有环节就全都只能跟着处于等待的状态。
在线上系统里, 这类故障已经发生过三次了。每次都必须要花费非常漫长的时间去排查日志文件, 这让人感到一种深深的疲惫感。
区块链节点分层拖共识吗
许多人在一听到分层的概念时候, 就会开始担心共识的速度会变得很慢, 但是事实情况其实并没有那么夸张, 我们目前运行的是BFT变体协议的版本, 投票的行为仅仅是在验证者层的内部去完成的那些轻节点并不参与出块的操作, 共识延迟的时间基本上没有产生任何变动被拖延的实际上是跨层的数据传播这个过程需要多经过一跳的传输, 所以会增加80到120毫秒的时间。
你要考虑到, 像高频去中心化金融清算那样一种场景你得心里有数一下。对于普通的记账操作还有跨链桥使用的那些用户来说, 他们完全感觉不到什么变化罢了, 所以说由这个分层的机制能够带来的那种处理速度增快的收益, 比起仅仅那么一点点延迟的时间成本要强得多很多。
所以根本没有这个必须去把整体的技术架构搞得特别复杂的原因存在, 就为了那多出来的几毫秒时间而折腾是不值得的。
现在的人都在问, 区块链节点到底分层没有, 其实这个问题是没有统一的标准答案的, 关键点就在于两个变量需要被考虑清楚, 一个是你的数据数量有多大, 另一个是你能够容忍的延迟有多长, 你要是把这两个数据都给弄明白了, 那么自然就知道该怎么把架构给切分了。
