工程日志3/19:如何建立分布式的版权生态?

刘果 | Guo Liu
·
·
IPFS
·

Matters目前使用的部分技术栈。编辑器通过Quill搭建,其他前端逻辑与渲染通过React开发,SSR与路由则由Next.js负责;GraphQL负责前后端耦合;Knex为SQL语句提供查询构造,接入PostgreSQL数据库;ElasticSearch提供搜索与推荐服务,调用由Spark训练的推荐模型;IPFS节点提供文章的分布式存储功能。


平台更新

在过去一年的内测中,Matters通过原型产品开始了内容发现与金流体系的探索。同时,我们也触到了原型的瓶颈,所以在过去的四个月内,Matters一边重组技术团队,一边对网站进行了重写,准备处理更大规模的用户与流量,与更快速的迭代与探索。

在UI/UX方面,我们重新思考了产品逻辑,给网站赋予了全新的面貌,成为你现在看到的界面。但新的界面意味着新的棱角和问题,需要我们一起重新打磨与试错。

在系统性能方面,服务器数据库一直是Matters原型的瓶颈。在这一层,我们从适合原型开发的MongoDB数据库迁移到了高性能的PostgreSQL数据库,存储模型也从半结构化数据(semi-structured)迁移到了关系模型数据(relational model),为日后的扩展打下基础。

在内容发现方面,除了主页中兼顾用户动态与运营筛选的瀑布流外,我们也通过协同过滤(collaborative filtering)模型搭建了一个简易的文章推荐引擎,在每篇文章之后为读者推荐类似的文章。和推荐功能一起,搜索功能也迁移到了ElasticSearch引擎,提供更快更精确的搜索结果。

在推荐引擎与内容搜索的背后,是Matters后台开始搭建的数据管道。数据管道每日调用Spark集群重新训练推荐引擎,适应平台不断更新的内容和读者不断变化的兴趣。同时,数据管道为Matters的数据工程师打开了窗口,得以了解用户习惯、优化产品、并探索发现内容的新方式。

但在内容发现中,技术是把双刃剑:协同过滤这样的发现机制既能为读者找到感兴趣的文章,也能造成同温层的固化和假新闻的传播。在利用技术协助内容发现的同时,Matters也会展开产品与社区层面的探索,引入策展人(curator)角色,为内容发现的过程加入人性,也为媒体口碑的建立和注意力经济的分润提供新的模式。

全新的API

在发现机制与数据隐私方面,我们需要用户与我们共同试验与反思。这个试验的重要部分,也许是数据和算法的使用规则。在说明文档齐全之后,Matters将会开放我们全新的GraphQL API,方便感兴趣的用户调取公共内容,一同探索公开与隐私的权衡。

新版的代码结构中另一个重要改变便是查询语言GraphQL的引入。 UI的快速迭代需要一个稳定的数据模式,从15年逐步流行开来的GraphQL正好提供了前后端之间的查询语言和类型系统,为UI提供了可靠的数据模式定义。

更重要的是,相比传统的RESTful的API风格,GraphQL不依据HTTP或某个特定传输协议设计,更适合传输方式多样的分布式系统。同时,因为大量分布式项目都基于有向无环图(Directed Acyclic Graph)数据结构,基于图(graph)的GraphQL非常适合从分布式网络调取数据。类似于The Graph这样的工具项目在快速成熟中,让开发者直接向IPFS、以太坊等分布式资源发起GraphQL请求,进一步简化了开发流程。

GraphQL也让Matters得以逐步迁移为分布式应用。当Matters部分功能有了成熟的分布式实现后,前端可以通过模式拼接(schema stitching)的方式复写HTTP部分的逻辑。存储于IPFS或以太坊的Matters内容数据也可以由此成为公共资源开放使用,协助生态系统成长。

从网站平台到分布式网络

Matters平台虽然经历了重新设计与开发,但是产品逻辑并未改变。平台仍是一个传统的网页,用户仍需经由域名服务器查找到Matters服务器IP,再与服务器之间通过HTTP建立连接。尽管每一篇文章都已经发布至IPFS,囿于网页形式,用户仍然受制于中心化服务,用户信息和金流体系也都还存储在中心数据库中。

但在重构的过程中,我们开始了分布式网络的准备与铺垫。 Matters网站会持续作为内容发现的中心化窗口, 探索不同的内容发现与分润的方式;与此同时,这个窗口会通向更大的网络,任何人都可以加入,建立自己的窗口与社区、拥有自己的数据与回报。

接入一个分布式的网络,意味着用户需要下载一个客户端,不管是以桌面程序还是手机App的形式。对于互联网,这是网页浏览器;BitTorrent或者eDonkey网络,这是迅雷、电骡、快播等客户端;对于比特币或者以太坊,这是电子钱包。

对于Matters,这个客户端需要让用户能够不经中心节点交易、浏览多媒体网页,让创作者自主创作、打包、定价、分发与分润。通过分布式账本技术,我们能够将创作者与读者直接相连,既能像BitTorrent一样高效地分发数据,又能像Amazon等中心化的服务一样维持一个良性的版权生态。长远来看,这个客户端也需要和诸多快速兴起的分布式内容库联通,让用户能够随时调取属于全人类的共同知识库,不管是维基百科科研数据还是研究论文

在Matters网站继续进行迭代的同时,Matters工程团队将会着手试验这样一个客户端,从桌面版开始。尽管具体的产品逻辑和形态还在讨论之中,技术层面已经有了不少线索。分布式存储功能会由目前已经投入试验的IPFS提供,而分布式账本功能则会是目前相对成熟的区块链形式(与合作伙伴Likecoin联手)。同时,我们在原型阶段会采用Electron.js平台,以便复用网站平台中成熟的UI与业务逻辑代码。

新版上线之前,我们已经将Matters所有文章重新发布至IPFS,一方面调整了版式,另一方面对图片也进行了分布式存储。同时,我们也重新设计了文章链接:文章链接末尾长度为49的字符串,是文章元数据在IPFS中的哈希值,包含文章的作者、发布平台、文章指纹等信息。例如,用户可以复制文章的元数据哈希值,替换到以下链接(或者任何IPFS节点)中并打开” https://ipfs.io/api/v0/dag/get?arg=${哈希值}/author” ,就可以看到作者的相关信息。这意味着,我们设想的桌面版本可以不经服务器,直接打开Matters文章的链接,调取作者与内容数据。


Matters设想中的分布式客户端架构。绿色部分是分布式的核心功能,黄色部分是中心化的附加功能。客客户端通过IPFS与以太坊实现核心功能,而搜索、推荐等本质上中心化的功能则作为附属,依旧由Matters服务器提供。 GraphQL负责整合远程与本地模式,让应用在能够在连接服务器与断开服务器之间切换。


不过,这里的构想仅仅是大致脉络,产品逻辑也还在探讨之中。一个能够支持版权的分布式网络是一种崭新的交互形态,技术与设计层面都有许多未知需要摸索。我们希望与用户一起来定义这种全新的交互,为中文网络世界提供更可靠的传播工具和更合理的游戏规则。

尽管分布式网络有潜力带来一个更加稳定、开放与公平的赛博空间,对于能够选择中心化服务的单个用户,分布式应用并不一定带来体验的提升,这是分布式应用项目的难题。但在特定的应用场景中,分布式网络是不可替代的工具,正如跨境转账之于比特币、文件共享之于BitTorrent、 物联网之于无线网状网络

Matters设想的内容与作者的分布式网络,甚至在全球互联网割裂为国家局域网时,仍能正常运作;但在网络信息相对自由的今天,我们的产品不仅要解决技术问题,更要有新颖的商业模式和多样的应用场景,才能与传统互联网产品竞争。

这些问题需要更大范围的论证与不同领域的思路,问题的答案也该由社区共同决定。所以,Matters的产品与工程团队会在开发之余,以这样日志的方式向大家同步最新想法,希望以此激起讨论和畅想,更希望获得社区中各路高手的协助。既关乎技术路线,也关乎产品形态。

在你的想像中,这样一个分布式网络需要什么样的工具,又有什么样合适的应用场景?

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

logbook icon
刘果 | Guo Liu“To change something, build a new model that makes the existing model obsolete.”
  • 来自作者
  • 相关推荐

纽约诸法门

分布式信息网络
9 篇作品

ZuSocial: notes and reflections