之前的一篇文章,我讲解了PP.io的三个阶段:“强中心”,“弱中心”,“去中心”。今天来解释下,我为什么要分三个阶段逐步实现PP.io去中心化存储网络:
简单地说,就是在区块链不可能三角理论中,我暂时放弃了去中心化。
我先解释一下什么是不可能三角理论。就是说可扩展性(Scalable),去中心化(Decentralized),一致性(Consistent) 这三个点不能都取,只有取其二。比特币和以太坊牺牲的是可扩展性,因为他们做得是加密数字货币。
而我在设计PP.io的时候,为了做好场景落地,暂时牺牲了一定的去中心化。
我是怎么详细思考的呢?主要3方面考虑。
非常复杂的证明机制
数字货币,比特币和以太坊的证明机制非常简单,简单的说,就是做数学题,大家都来猜一个数字,谁先猜到一个数,符合游戏的要求,谁获得这个奖励。
你看,多简单的算法。这个算法因为简单,所以数学上非常严密,只要这个计算过程在数学上是不可反向推算的,就没有任何漏洞。因为仅仅设计的是数学游戏,所以算法非常简单,不过这种数学计算却变得没有意义:挖比特币的人越多,人类的资源被白白消耗的也就越多。
而去中心化存储公链肩负的伟大使命,就是把比特币这样浪费资源的挖矿方式,变成能提供服务,做对人类社会有意义的事。我在设计PP.io的时候也是这样想的。那么提供的服务怎么计量,最基本的就是用存储和流量分别来计,传统的云服务也是用这两个因素。
存储是什么,就是存了一个内容,有多大,存了多少时间,这就是一个计量因素;流量是什么,就是传输了多少数据,这也是一个计量因素。要证明这两个因素,都不只是靠单机算法就能完成,都需要用网络通讯,由第三方节点对双方做见证的机制来完成证明,而如果这个第三方不可信,就需要多个第三方来共同见证,再在这些第三方*识达成一致。这个过程比起比特币的单机算法要复杂得多。
另外还有一点,比特币每次在出块的时候,只有一个节点能获得奖励,因为它做最先做对数学题,这非常简单。而去中心化存储系统要对所有在这段时间提供了服务的节点,就应该根据贡献获得奖励。这比特币复杂得多。(可能你曾经参与过比特币挖矿,误以为比特币是按照算力来分配奖励的。其实不是,因为比特币引入了一个中心化的节点叫矿池。矿池相当于保险,把原本只有少数节点获得比特币奖励分给了所有参与挖矿的人。)
所以去中心化存储的证明机制比比特币的证明机制要困难得多,困难到什么程度,举个例子吧,IPFS团队开发得的Filecoin于2017年中就发布了白皮书,白皮书里面就提到了PoSt算法和PoRep算法,占了整个白皮书50%的篇幅。2018年秋季,IPFS团队专门发表了一篇PoRep长达50页的论文(后面我会专门写文章解读这篇论文)。可见,PoRep算法有多么复杂。他们很想一步做到去中心化,现在是2018年底,除了两篇论文和几个演示视频之外,没有开放出其他任何实质资料,相信他们也一定遇到了巨大的挑战。
我在设计PP.io的时候是这样考虑的,在完全去中心化的环境中,所有的节点都可能作恶。在所有节点都可能作恶的前提下,设计任何机制都会非常复杂,特别是证明机制。证明机制越复杂,安全漏洞就越多。而如果一开始放弃完全不可信的环境,让部分角色变得可信,只有提供存储的存储节点是可能作恶的,整个算法将简单很多。
所有我在设计PP.io的”强中心“阶段的时候,调度索引节点,监督节点和结算中心是由中心化服务完成,只有存储节点是去中心的,他们是可能作恶的。在这个阶段,先实现存储节点相关的证明机制,先把整个系统运行起来。其他因素在这段时间更重要,性能,Qos,经济模型等。
然后,在“弱中心”阶段,之前中心化服务变成可以分开部署的节点。调度索引节点和监督节点可以允许授权部署,但是必须通过线下的商业条款约束,并保证不会作恶。在这期间,我们在技术上做好这些授权节点的证明机制。当我们在工程上和数学上都做到了无懈可击的时候,就可以开放准入门槛,走向完全去中心。
服务质量(QoS)的迭代和优化
我前面专门写文章介绍了服务质量(Qos)的重要性:去中心化存储的QoS是什么?
我先来讲一下我在PPTV创业过程中做技术的故事,当年我们是怎么做好Qos的。 我于2004年开始做了10年的P2P技术。在这10年里,我先后经历了P2P直播,P2P点播,在嵌入式设备上做P2P技术。其中我在P2P直播的Qos做到了,在同时千万人在线看同一个节目的时候,启动时长平均1.2s;平均每30分钟卡顿1.6s;全网最多延迟90。点播的Qos做到了 90%的带宽节约比;启动时长平均1.5s;平均每30分钟卡顿2.2s;平均拖动响应时间 0.9s。
我们做到了如此优秀的Qos,也为我们后续做到全球5亿用户提供了非常坚实的基础。
我们当时取得了这样优秀的成绩,并不是一开始就是这样,而是经过长期的日复一日的优化和无数个版本的升级迭代才做到的。在这个过程中,我们提炼至少100个QoS指标,建立了大数据分析系统,对不同地国家不同地区做拆分来逐个优化。我们还建立了AB测试机制,A网为大部分用户,他们使用稳定的内核;B网为小部分自愿用户,他们使用最新的内核。我们快速评估算法对于QoS的有效性,B网会频繁升级P2P内核,直到确定新P2P内核的全网QoS更好,并且测试下来非常稳定了。如果做到了,我们便会对A网内核进行全面的升级,这样能让大部分用户使用到最好的用户体验。
但是,如果在完全去中心的环境下,升级是需要共识的,就像比特币和以太坊。比特币的升级,经历很多次软分叉和硬分叉,而且大的升级每次都经历了很长时间。这样的产品升级效率对做好服务质量来说是非常不利的。好的QoS是迭代出来的,不是一次做好的。如果早期直接代用去中心化,那么升级的成本就会极高,迭代周期就会非常缓慢。
做好了QoS是产品,做不好QoS是玩具。现在有些所谓国际知名公链项目,故事讲得非常好,”宗教信徒”也不少,但在我看来,这是玩具,因为用起来,非常不好用。
而我在设计PP.io时,一开始选择“强中心”,就能非常高效的去调优QoS。而好的QoS,就会有更多用户进来使用,这样存储数据就会越多。有了更多的数据,就会吸引更多的存储节点,从而形成一个良性循环。当QoS做到了非常优秀时,我们再走向去中心化,这个时候,因为QoS好了,用户数量也多了,公信就越来越重要。
经济模式
我在设计PP.io的时候,要设计了一套激励机制,存储节点按照这套经济激励模型在PP.io上提供服务就能获得收益。经济模型的好坏,就直接决定了项目的成败。
经济机制看起来非常简单,但是实际运营起来且非常复杂。例如前面提到去中心化存储的安全性问题,也说明了不可能三角形理论,只靠重量级的数学证明,是不能彻底解决作恶问题,还要依赖于经济惩罚。
首先,我问几个问题,你怎么看:
是否要求存储节点必须有抵押,才能挖矿?
反方观点:存储节点不抵押就可以挖矿。如果存储节点必须有抵押,那么存储节点的进入门槛就会非常高。
正方观点:存储节点必须先抵押才能挖矿。因为有了抵押,就能在他不遵守规则时候进行惩罚,这样才能保证的存储节点的稳定性。如果存储节点随意上线,随意离线,那么P2P网络就会很不稳定,这样会拉低整个服务的稳定性。
再问一下,如果存储节点突然下线了,但不是故意下线,例如停电了,应该执行惩罚吗?
反方观点:不应该惩罚,在设计的算法的时候,应该给存储节点设计一个容错机制,允许存储节点偶尔的离线。只要存储节点不是在作恶,可以不予惩罚。
正方观点:在计算机程序里,无法很好地鉴别存储节点是否故意,所以设计激励的时候必须一致。只要有离线就要惩罚,这样能淘汰不良存储节点,保持优质存储节点。存储节点越优质,整个网络的服务质量才能越优质。
这两个问题,你的意见呢?其实这两个问题本质上都是经济学问题。不论怎么选择,都会产生之前无法预料的结果。经济学提倡你希望怎样的不是就会怎样,经济学是一门专门研究事与愿违的学科。
我在设计PP.io的时候,是怎么解决这个问题,首先我预设一种经济激励方案,当然这个预设方案不是拍脑袋决定的,而是通过一系列的数据建模和条件假设推算的,后面我会在PP.io的官方github公开经济模型建模的源代码。
经济模型的各方面影响因子非常复杂。而如果一开始就采用去中心化的方案,就会出现很难升级的问题。存储节点很有可能因为对自己不利,就拒绝升级,就像吴忌寒完全不鸟bitcoin core的人发起BCH硬分叉一样。
我在设计PP.io的时候,就意识到好的经济机制是非常重要的,而好的经济模型是实践中调整出来的,而过早地去中心化不利于经济模型的调整。所以早期采用”强中心“是更利于经济模型的调整,当经济模型逐步地稳定合理,PP.io也会逐步走向去中心化。
以上这三个原因,就是我为什么在设计PP.io的时候,依次经过 “强中心”,“弱中心”,“去中心” 三个阶段的原因。
文章作者:Wayne Wong
转载请注明出处
如果有关于区块链学习的交流,可以通过下面的方式联系我:
加我微信,注意备注: 区块链
wechat:omnigeeker
github: omnigeeker (Wayne Wong)