区研AMA回顾|Web3大潮来袭,如何搭建一款分布式内容平台
嘉宾介绍
【@刘果 】:
Matters Lab 联合创始人。前甲骨文高级软件工程师。曾为Cisco、Belkin、Tinder等公司提供技术咨询,参与建立datascience.com大数据分析平台(被甲骨文收购)。「视角」项目发起人,目前致力于推动分布式内容网络的基础建设。
【Matters】
一个正在搭建中的分布式内容网络,内置版权追溯与收益的功能,支持私密和公开的内容。用户可以通过客户端不需要服务器就可以接入内容网络,最终希望实现分布式的内容发布、阅读、交易和e2e加密私信。网站用成熟的web2满足非技术类写作者和读者的需求,逐步支持中心化与分布式两种接入方式,将成熟、好用的web3技术逐步引进系统。
问答部分
Q1:Matters是什么?主要面临和解决的是哪些问题?
像刚才洛洛介绍的一样,Matters想要搭建一个分布式内容网络,内置版权追溯与收益的功能,支持私密和公开的内容。目前在打造这个公用内容网络的不同入口,一个是网站形态:
https://matters.news/ ,每篇文章也提供了一系列可接入的IPFS节点;另一个是刚开始开发的桌面版客户端:
https://github.com/hypha-publication/hypha-desktop 用户可以通过这个客户端不需要服务器就可以接入内容网络,最终希望实现分布式的内容发布、阅读、交易和e2e加密私信。
Matters的网站是现在的主要入口,实际上在承担桥接web2与web3的功能,所以这部分桥接也是目前最大的难点。一方面在设计上,需要让非技术用户直观理解分布式、hash、内容寻址、公私钥这些概念,简化用户操作。另一方面也在技术上,同时支持中心化和去中心化让架构很复杂,而且因为已经有了大量用户和数据流,必须要保证高效和稳定。
从过去诸多分布式应用来看,项目能否存活的关键在于能否“出圈”,即吸引非技术用户,成为“常人”使用的工具。Matters的策略是首先保证功能有用,用成熟的web2作为外壳满足非技术类写作者和读者的需求,并且逐步支持中心化与分布式两种接入方式。这样一步步把成熟、好用的web3技术逐步引进系统,或者说一步步把用户转移到web3。
Q2:一个web3应用在开发上有些什么特点?如果从小白学习web3应用的开发(比如搭建一个分布式内容平台),有什么学习推荐路线吗?
web3有很多定义,分布式只是其中一个,不过这里仅仅讨论分布式这一方面。分布式的应用会带来一系列特点,比如用户更好地掌握自己的数据、更低的隐私泄漏风险、信息更不容易被屏蔽和筛选等等。区块链的出现提供了一个全局账本,和一个可靠的虚拟机(智能合约),让token的去中心化流动成为可能,不过它的昂贵和低效也限制了在应用中的适用范围。
我们目前只是在「分布式」这一点上发力,所以这里说的也都基本只针对「分布式」这个特点。
相比中心化的web2的话,分布式应用需要将计算从服务器移到本地或智能合约,存储要么保存在本地、设计完整的点对点传输和同步机制,要么使用不同形式抽象出来的分布式存储。另一种说法是,传统web2是fat server, thin protocol, thin client,而web3是thin (or no) server, fat protocol, fat client。
选择分布式存储层可以简化很多架构,因为大部分网络传输逻辑交给了存储层,数据与存储地址分离开了,应用层代码简化很多。但因为数据分布在各个地方,所以数据权限控制的方式有很大区别。中心化应用中在数据库或者API上加上权限控制层就可以,但分布式应用的权限控制基于对称或非对称加密,设计上会复杂很多。
这个大致是我们目前架构上的进路,具体技术方面的问题看下大家对什么感兴趣~
学习路线的话,如果不是想推进某一项具体技术的进展,我觉得最好的学习方式还是从产品入手,去寻找和学习适合功能需求的解法。基于此,再去了解相关的、有趣的思路、研究和项目,以刺激好奇心和扩宽视野。从产品出发有个好处是,能够防止视野局限在正在hype cycle中的技术,防止工具定律(“if all you have is a hammer, everything looks like a nail”),也更容易去发现新问题对应的新解法。
分布式技术和应用的历史也是很好的参照,不管作为产品设计还是技术学习。BitTorrent、git、eMule、Bitcoin、Tox这些都是使用广泛的分布式软件,Email protocols、ActivityPub、RSS都是常用的去中心化(虽不是p2p)协议,都很值得参考。比如,从技术的角度,BitTorrent建立了大通量的p2p文件网络,而git提供了完全适合分布式的数据版本管理模式;从产品的角度,BitTorrent/PirateBay、eMule/VeryCD、git/github这些组合都是去中心化产品+中心化产品解决同一个问题的例子。
当然,如果没有web应用开发经验的话,最需要学习的还是web2.0的诸多技术,比如上面@AAA_ 提到的k8s这些。不管如何定义,web3.0所依赖的技术必定大部分和web2.0是一样的。例如,我们在开发的桌面版hypha基于react+graphql+electron+node,虽然也使用IPFS+Cosmos,但是(我们希望)大部分时间仍然花在成熟稳定的技术上。
Q3:在开发一个应用中,在利用还不稳定的新技术和常见技术时,主要有哪些区别?在选择采用一项协议或其他工具时,会有什么样的筛选标准?
像react.js或者node.js这样稳定的项目和生态,使用时就不太担心绑定和依赖。但是对于新的、还在快速演变中的项目,比如某一条区块链或者某一个分布式数据库,就很需要模块化,在引入的时候将它抽象成一些简单的功能,与剩下的组件隔离开。这样的话,即使要换一个账本、存储方式或者加密模式,也只需要在这个模块中进行改动。
是否需要有意隔离/抽象出来,感觉是新技术和成熟技术的最大区别。还有一个是,新技术的话,整个系统要防止性能被它拖下来,变成性能瓶颈,所以一般还是要有后备方案。
选择标准的话,当然还是是否能够满足当前自己的需求,同时考虑性能和可扩展性。性能和可扩展性需要不仅仅是理论上的,而是大规模使用检验过的。对于快速演变中的开源技术,项目社区活力也非常重要,决定了这个项目是否能够留存下来。这方面就可以看有多少落地项目依赖这个项目(github刚推出了Used by下拉列表),PR有多少,Issue回应有多快,乃至核心团队背后的资金及来源等等。
Q4:以IPFS为代表的内容寻址(Content-addressed)与传统的地址寻址(location-addressed)相比,特点有哪些?会引发哪些的影响?
location-addressed是通过物理存储地址来调取数据,用户需要向系统表示“我要xxx位置的数据”。比如HTTP网址,通过域名服务器解析为网站服务器的IP地址,再指向这个服务器上对应path的数据,不管这个数据是什么。
主流的操作系统中的文件管理,像macOS的finder这些也都是location-addressed
location-addressed非常适合动态数据,因为地址上的数据可以随时更改;但是并不安全,因为用户请求之前不知道数据是什么。同时,网络协议采取location-addressed方式决定了它是中心化的,尽管Solid这些项目想要实现一些折中方案,仍无可避免数据需要single source of truth的结果。
相比之下,content-addressed是通过内容的摘要(一般是通过hash函数)来调取数据,用户需要向系统表示“我要内容摘要为xxx的数据”。BitTorrent、git、Bitcoin、IPFS都用到了content-addressed的设计,用户可以通过一段数据的摘要来向系统调取这段数据本身,不管是文件还是代码版本或者交易记录。
content-addressed的好处在于,内容与存储位置无关,方便在不同的节点存储、给数据提供备份和冗余,天然适合分布式应用;同时,用户可以验证自己收到的数据是否是请求的数据,提高了安全性。content-addressed本身的设计比较复杂,需要考虑数据的传输与交换,但与此同时给应用层简化了这部分的逻辑。
Q5:与IPFS同类型的分布式存储项目还有哪些值得关注?
MaidSafe、Tahoe-LAFS、dat protocol、storj、Ethereum swarm与IPFS都有很多类似的地方。其中dat protocol非常成熟,有基于它的网盘、p2p视频、浏览器,但社区和生态都比较小,并且不是content addressd;MaidSafe的设计很有野心,但是实现很复杂,不清楚能否投入使用;Ethereum swarm很有潜力,适合与Ethereum搭配使用,但目前还很早期。這篇文章有一些介绍和对比:
上面的文章不全是介绍分布式存储,而是介绍了几个不同侧面去中心化目前网络的项目,涉及了其中几个。
还有一个是GunDB,是一个广泛使用的分布式数据库,很成熟、高效,但是模块化和扩展性不太好。
GunDB也可以通过IPFS存储,不过基于IPFS的分布式数据库更推荐OrbitDB,很新,架构和API设计都不错,提供几种CRDT (conflict-free replicated data type) 供开发者选择,保证不同节点最终收敛一致。OrbitDB背后团队在推动的Ambients protocol也很有意思,基于ambient calculus,试图利用content addressd系统让节点之间共享计算过程,不过还在早期构想阶段。
有一些content addressd相关的研究领域也比较值得关注,思路类似,都是通过设计调取数据的方式来架构一个更好的分布式网络。一个是Information-Centric Networking,这里有一些介紹:
https://github.com/protocol/research/issues/14 ,
irtf上也有主页:
https://irtf.org/icnrg 和研究进展跟进:
https://trac.ietf.org/trac/irtf/wiki/icnrg
另一个是从属Information-Centric Networking这个大框架下的Named Data Networking项目,目前进展比较快:
https://en.wikipedia.org/wiki/Named_data_networking
Q6:去中心化所追求的社区自治在技术上一般会如何支持?比如是否会将奖惩机制/争议解决机制写入到智能合约吗,以及类似社区委员会这样的存在是怎样与一个web3应用耦合的?
我觉得社区自治的难点不在于技术,而在于规则的制定。互联网出现之前是这样,智能合约出现之前也是这样,之后也会是。一个有产出的社区,比如matters这样产出内容的平台,它的自治类似于合作社,需要社区演变出一套共识和规则。
matters的社区自治是先从讨论开始,由具有特殊权限(比如封锁用户)的官方账号制定规则、发起讨论,然后归纳意见、执行决定;然后,其中成型的能够自动化的规则被产品化,由中心化的服务器自动执行;最后,沉淀下来的规则中涉及利益、但又低频的部分会经由各validator确认(matters使用LikeChain,基于Cosmos)、写入智能合约。有点类似习惯法变成成文法、再逐步修正宪法的过程。
“社区委员会“或类似的存在不可避免,一方面规则本身的演变需要有人推动、总结和协调,另一方面不是所有决定都可以通过简单投票完成,所以一个社群内的用户在各个方面应该会有权利的不同。困难的地方在于如何自动化这个“权利”,比如是通过持有token数、发表文章数、注册时间长短还是什么,我们现在也还在探索中。技术上和web3应用可能关系不太大,区别只是自动化的逻辑有一部分需要deploy在区块链或者validator上。
自由提问
@Yummy Liu 同学:部署区块链应用和部署k8s应用都有各自的网络特点,请问如何有机的融合在一起呢?
@刘果:
我们利用的两个结合点一个是内容地址,不管是服务器端还是客户端都用一样的地址调取数据;再一个就是整合进去DID/CID,让分布式身份既能够从服务器端调数据,也能够直接与分布式网络交互~
所以其实中心化和去中心化是两者并存,只要保证两边数据互通就行。
不过不太知道“区块链应用”是指什么,这里说的是一个分布式应用,不一定要部署智能合约这些。
@Ian同学:感觉Matters团队是很重视非技术用户的,请问可不可以举出一些具体的点说明Matters可以成为常人使用的区块链工具,从而实现您说的“出圈”的?以及目前的大多区块链产品需要从哪些方面实现便民化?
@刘果:
比如我们设计上是让传统登录方式(网站的邮箱+密码)与DID同步,推广上我们着重传统的内容、避开「区块链」这些主题,尽量让用户因为社群和社群留下来,而不是背后的技术。或者从其他入口,我们提供的是IPFS的公共节点列表,使用的仍是常见的http
我觉得纯分布式应用最大的问题在于身份管理,在metamask一直无法推广就能看出。理想状态下,用户通过一传数据能够生成所有使用的公私钥对,丢失之后在生成一次就可以。但目前在很多场景下都不可实现,也没有通用的定义。
可能折中方案还是只有两种id方式并存一段时间,直到通用的分布式id设计的共识达成。
@sweet同学:我一直对目前区块链技术的跨链技术感兴趣,请问如何看web3与区块链跨链技术的关系,作为一个小白,我的问题可能不太具体。
@刘果:
web3其实没有具体的定义,因为只是指下一代开放的互联网标准,有很多不同正在成形的特征和定义。我这里(以及我猜想这里的大家)主要指的是分布式这个特点,很多人都认为是web3的重要特点。分布式应用一直都在用,之前我提到的bittorent、emule这些都是。区块链带来的改变是,提供了一个可靠的全局账本,让分布式应用当中也可以有资金流动,而不依赖中心服务器。
但是分布式账本不一定是区块链,iota、hashgraph这些都不是链式结构。
web3:正在成形的下一代网络结构
分布式账本:维持去中心化金流体系的技术
区块链:实现分布式账本的一种方案
@子川:现在matters 是如何让用户通过内容生产获得经济回报呢?因为区块链在解决版权流转上很有优势,在Matters 里是如何实现的呢?
@刘果:
现在matters对接likechain,用户的赞赏可以转换成likecoin。likecoin也可以换成其他货币。https://like.co/
版权其实是证明时间戳+内容+id,所以用上链的时间戳+内容的hash+用户签署,就可以说明版权。
转载比较麻烦,因为牵涉授权(只有作者能够授权,还是可以给发布平台代理?等等)还在设计中。
版权证明思路上大家都大同小异,po.et比较典型:https://www.po.et/
@子川:是否可以引用其他人的内容,然后让原作者能通过后来引用的获利收取分红叻?
@刘果 :
考虑过,但是目前没有实现分红。目前可以引用,但是没有分红,下一步会实现分红,但是分红的逻辑还在讨论中
因为引用增加了彼此的曝光量,所以谁分红给谁其实挺复杂的
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!