原文转自(CSDN 区块链大本营):https://mp.weixin.qq.com/s/EM...算法
在区块链开发者队伍中,有一批来自传统的互联网开发人员。在区块链圈子里崇尚年轻和「天才」的文化氛围中,这批开发者因经历了两次重大浪潮的洗礼而更加的扎实和沉稳。数据库
戴硕就是其中一位。安全
戴硕,内容公链Contentos首席科学家,清华毕业,中科院硕士,曾在腾讯任职,后又在猎豹移动负责社交产品LiveMe开发工做。对于底层开发和安全的理解更为深刻。网络
正是有了这样的经历,戴硕直言区块链的开发入门成本远高于传统互联网,「不建议刚毕业的年轻人直接从事区块链开发」。架构
做为数字内容公链,Contentos主要从图片、短视频和直播领域切入,数据类型多样,给数据存储带来了很大的挑战。此外,面对6000万月活、100万全球内容创做者和天天超过50万条的内容交互,复杂程度甚至超过比特币和以太坊。异步
在Contentos生态产品Cheez,用户利用通证COS创做和消费短视频分布式
直播平台LiveMe用户创做的内容能够利用Contentos「上链」工具
那么,戴硕和他的团队是如何实现这样的内容公链的?做为曾经的传统互联网开发者,他对区块链开发又有哪些心得?他又是怎样理解区块链的一些核心技术的呢?性能
带着这些问题,营长近日对内容公链Contentos的首席科学家戴硕进行了一次专访。如下为精华整理。学习
“应届毕业生,不建议直接上手区块链”
营长:在作区块链以前,你的经历是什么?
戴硕:我本科在清华读计算机专业,后来又在中科院拿了硕士学位。毕业后就开始从事软件开发和信息安全有关的工做。先在江民杀毒软件作了很长时间的信息安全,又在腾讯作了一段时间。以后又去了猎豹移动,开始是作「电池医生」App,属于工具类应用,后来主要精力所有放在了直播和短视频类应用的开发工做。
营长:你如今作起区块链的缘由是什么?
戴硕:决定从事区块链研究必定不能选择「跟风」。在个人职业生涯里,很长时间都在作信息安全。我发现,用技术解决安全问题,其实是没法造成闭环的。这就好像把一个要保护的东西放在保险柜里,而后保险柜的钥匙放在另一个柜子里,以此类推,最后一把钥匙总要交给所谓的“信任”。
我一直有一个心结,就是用技术方案解决信任问题,造成闭环。而区块链之因此吸引我,正是由于它是计算机历史上,第一次用技术构建了一种被你们公认的信任机制,而且对其余行业产生颠覆重意义。
营长:做为曾经的移动开发者,在你看来,区块链开发与移动开发的不一样点有哪些?
戴硕:咱们都知道,在移动开发中有一个理念叫「敏捷开发」,即快速试错,小步快跑。根据用户的反馈不断优化。但这一理念放在区块链当中是不可能的。
一款移动App若是一个月不更新一个版本,确定不是一个好的App。但一条公链,且不说一个月,就算是三个月更新一次版本,就无法用了。因此公链最终的交付目标必定是稳定、安全、高性能的,由于版本更新的代价过高了,并且还有分叉的风险。
营长:从移动开发者到区块链开发者,须要学习哪些技能?成长周期大概是多长时间?
戴硕:区块链开发要学的知识比App开发要多得多。首先要学的就是密码学的知识,以后要学分布式系统原理,包括分布式系统上面的共识原理和技术名词。此外,若是是作公链开发,还涉及存储的问题,因此也要对数据存储有所了解。
从个人经验来看,从一个零基础成长为一个合格的公链开发者,至少要三年左右。因此我不建议没有任何开发经验的人或者应届毕业生直接上手区块链开发,至少要有三年左右的开发经验,才能比较顺畅的入门。
营长:这样说来,有什么比较好的学习建议吗?
戴硕:想要作区块链开发,第一步要对一些基本概念有了解,好比区块链是什么?什么是矿工?什么是挖矿?什么是数字代币等,能够去看一些科普类的文章。
第二,要从实操入手。任何技术都是这样,你得亲手去试。网上有不少项目,好比加密货币,能够先试着买一些。另外,像智能合约部署等,要明白实现原理,能够亲手试一下。用了一段时间,才能对区块链里的基本概念了解更快。
第三,学习源代码。不少项目都是开源的,源代码是最好的学习资料,若是想深刻了解区块链开发,至少要研究一下比特币和EOS的源代码。一个是PoW,一个是DPoS。经过研究一些源代码,再配合钱包的使用,智能合约的部署等,结合起来学习,能够更快地了解区块链内部实现的原理。
源于Steem,高于Steem
营长:在内容公链中,Steem是绕不开的一个话题,在技术上大家与Steem有哪些不一样?
戴硕:刚开始作Contentos这个项目,你们的经验都不是很丰富,咱们看了下,Steemit跟咱们的业务重合度较高,并且已经很成熟。因此咱们先从Steem的源代码入手,经过学习人家的源代码,提高本身的能力。另外,咱们也看到了Steem自己的一些欠缺和不足。
营长:能举个例子吗?
戴硕:好比Steemit网站的用户基数不是很大,日活跃用户只有5万左右,但咱们想作的内容公链是远超过这个量级的项目。经过分析,咱们发现Steem现有的技术选型,并不能达到更高量级的要求。由于Steem最大的特色就是单节点的性能决定了整个网络的性能。
Contentos团队对Steem公链项目的信息统计
咱们都知道区块链是一个链上全部信息的集合,这个集合是存储到单机上的,这个自己没有问题,但问题是它是存储到内存里的。一台机器的内存,要存储这个链上全部的东西。这样作的好处就是快(内存确定比硬盘要快,比网络也要快),可是缺点也很明显,就是天花板过低了。
若是要接入百万PV的网站,上面全部的操做都要入到咱们的状态数据库里面,按照Steem如今运行的情况,若是它的访问量乘以100,那1~2T的内存能够供多长时间?答案就是三个月之内。
若是使用Steem的技术选型,结局注定是失败的。
咱们也去研究了一些其余的替代方案,好比以太坊,发现行不通。由于以太坊的数据模型是比较简单的,本质上只存储帐户信息。但咱们要作的业务类型可能有几十种上百种逻辑上的数据类型彼此交互。
因此现有的技术方案,根本没法知足咱们的业务需求,咱们只好本身从新作了一套存储方案。
营长:能具体说一下这个存储方案的实现机制吗?
戴硕:首先内存型的数据库被咱们pass掉了,不能用内存的,咱们只好用基于硬盘的。同时,咱们也采用了可插拔技术,为从此的多机方案做准备,好比在测试网和主网上线以后,仍然使用单机数据库。在不修改代码只修改配置文件的状况下,把单机数据库直接迁移到一个分布式的存储网络上。
Contentos数据存储方案架构
另外一方面,咱们本质上用的是K-V存储数据库,但在业务逻辑上是一种关系型数据库的需求。由于咱们的数据类型不少,彼此间有千丝万缕的联系。因此,咱们在K-V数据存储上面直接作了一层相似于关系型数据的中间层的实现。
共识算法设计的两大原则
营长:Contentos的共识算法是DPoS+saBFT,这种设计是出于哪些原则?
戴硕:所谓共识算法,实际上能够理解为分布式网络上各个独立节点之间彼此通信的一套规则。全部好的节点都会按照这套规则去操做;恶意节点则相反。
所以,规则的制定,要遵循共识算法的两个特性:安全性和可用性。
安全性是在有拜占庭节点(恶意节点)的状况下,好的节点要么达成共识yes,要么达成共识no。不能一个说yes一个说no,这样就发生了分叉。
可用性是指,在理论上能够达成共识的状况下,必定能够达成共识。不能说由于恶意节点的存在,就形成了好的节点不知所措,结果被锁死在某个状态而没法达成共识。没法作到这两点的很难称为合格的算法。
营长:那么,DPoS和saBFT两种共识算法的做用分别是什么?以及saBFT和BFT的区别是什么?
戴硕:简单来讲,DPoS决定了由谁来出块,saBFT决定了出的块是否有效。与BFT算法相比,saBFT是异步处理,它无需向BFT那样出一个块你们进行投票,经过后再出一个。它的处理方式是一边出块,一边确认。
举个例子,我连续出100个块,但在第90个块的时候网络条件出现了抖动,形成共识速度落后于出块的速度,中间差了10个块。saBFT能够跳过第91个块,直接对第100个块进行确认。
由于一个块是一个链式结构,你对靠后的块的确认,实际上间接的确认了这个块以前的全部链接点。也就是说,等于一会儿把90-100之间的全确认了。
saBFT算法实现原理
营长:在众多共识算法中,为何选择了这种模式?
戴硕:从行业发展的角度,区块链行业未来必定是多链协做的模式,而多链协做的本质就是链上数据的共享。但目前困扰区块链行业的一个痛点就是「交易确认时间」。很惋惜,基于PoW的交易确认时间是无穷的。
还有一个致命的概念叫「相对安全时间」,也就是说你在比特币和以太坊上完成了一笔交易,一段时间后,若是这笔交易没有被逆转,它就「相对安全」了,但这并非百分之百的。
若是这种模式发生在多链数据共享中,一旦有一笔「相对安全」的数据被回滚,就会引起雪崩效应,给全部协做的节点带来灾难。
因此,咱们在选择共识算法的时候,首先考虑的是以最快的速度达到100%确认的状态。目前,咱们的平均确认时间是1秒之内,已经彻底接近中心化网站或移动应用的交易确认时间了。
“区块链,往大了说是会造福全人类的”
营长:你如何定义「内容公链」?
戴硕:其实,没有一个很是严格的定义。我以为,内容公链应该是一个基础设施平台,能够承接全部形式的数字内容,包括文章、图片、音乐、视频等信息。固然,这个基于区块链技术开发的开放内容平台,打破了现有中心化内容平台的信息隔阂,为价值内容交易提供一条高速通道。
营长:去中心化的内容平台与中心化的内容平台区别是什么?
戴硕:去中心化的内容平台更加公平透明,它打破了公司制中心化内容平台的霸权,从而回归价值于内容创做者。所以,特别吸引中长尾的创做者。
若是一个视频创做新手想要在中心化的平台上得到粉丝关注,这基本上是很难的。对于中心化平台而言,中长尾创做者不能更好地带给他们商业利益,也根本得不到平台分发过来的流量。但基于区块链技术的内容平台,把内容的价值回归给了用户本身,咱们要作的是把决定权回归给用户。
营长:除了内容公链外,你还看好哪些区块链应用方向?
戴硕:还看好区块链金融相关,好比区块链发票、白条。还有存证相关的,法院能够接受的凭证。最后是游戏。
营长:最后,跟区块链大本营(blockchain_camp)的读者说几句话吧?
戴硕:从我我的来说很是相信区块链有一个很是美好的将来,缘由我说了,你们公认的这种信任,信任是整我的类社会合做发展的一个最重要的技术。并且我也算是一种信仰,我相信区块链的将来是很是美好的。人一旦有了信仰,就能够抗住不少的困难和压力,也不容易轻易的放弃。
我以为若是做为区块链的创业者或从业者,若是没有这个信仰支撑,我以为就不要作了。由于没有信仰的人,看有信仰的人以为像傻子同样;可是没有信仰的人,在遇到困难和挫折的时候,必定比较容易退却。
因此我但愿那些对区块链的将来一样有信心的人,能够一块儿努力。像区块链这样的技术革命,实际上也不常发生。咱们可以在年富力强的时候进入这个行业,遇上这个技术革新,也是很是幸运的一件事情,但愿你们经过本身的努力,可以推进这个事业的发展。
这个事业往大了说,是会造福全人类的。
欢迎加入COS技术开发论坛:https://forum.contentos.io/,领取bounty奖励!