基于graphql和标准客户端设计的新型dapps的架构

目前我们arcblock的设计采用了这种架构,和社区分享一下。

基本思路是:

1、后端(serverside)采用graphQL来提供服务,而不是REST API。 我们专门有好几篇文章讲了用graphql的优点,有兴趣的同学可以再看一下。 后端实现graphql比实现REST api要稍微麻烦一点,但也没有很难。

2、很多个小而简单的后端而不是一个复杂的大后端。 类似于微服务的概念。 也就是不要把各种逻辑全部写在后端逻辑里,而是尽量模块化,各个模块之间松散耦合,越松散、越无状态、越少互相依赖越好。

3、前端(包括web、移动app)是一个比较纯粹的前端,不依赖后端(web实现上和传统web应用是有区别的,因为传统web都是在后端渲染页面的,前端没有什么逻辑,但最近几年流行的react,vue,meteor等全部是这种前端自带逻辑的设计方式)。 前端完全通过graphql连接后端服务来获取数据。
这种设计可以看到 web应用和移动应用基本是完全一致的架构,一个应用很容易移动化。

4、前端来实现完整应用逻辑,后端则没有。 也就是说这个应用表现为一个游戏,还是一个交易所,是由前端来组织多个后端服务来形成的,后端只提供了自己的服务甚至不(需要)知道前端究竟是什么业务。

5、前端标准化,这样可以灵活切换不同的后端,例如大家会发现电商的界面基本都是一摸一样的,为什么每家电商都要自己的app,自己要每个地方注册账户,到处填写支付信息呢? 理想的dapp电商如果采用标准化设计,相同的界面相同的app,可以在多家电商平台购物。
其实传统技术多年发展后标准化是必由之路,你看比如电视机,任何牌子的电视可以看任何频道播放任何服务商的节目。 任何牌子的汽车可以加任何牌子同等规格的汽油,加油口也是一样的,可以开在任何规格的汽车公路上,随便在那个地区和国家。 这就是标准化的威力。

那么什么来保证这些部件用户数据的一致性?

1、DID 来保证了用户、身份、服务、物品等的一致性,即使跨不同系统,这些ID一致了就不会混乱。 DID去中心化特点,也保证了大家用同一套ID系统不会有人霸权,也不会有人强占数据(对比微信这种,微信就是老大,DID永远不会这样)

2、链来保证数据、证据、记录的一致性和公开透明可验证可追溯。 链就像联系各个部件的神经中枢,确保大家不会产生争议。

3、链上的数字资产来实现标准化、自动化的支付、结算、数字化的权益归属。

4、智能合约来保证多方合作的利益分配公开透明。

4赞

用上面的思路,如果实现一个类似于“知识星球”(过去称为“小密圈”)的应用的话,思路就会和传统的app实现有些不同。

假设一个开发者打算开发一个ABT版本的去中心化类似“知识星球”的dapps,首先一个重要的诉求就是这些收费的秘密圈子是充分去中心化的, 没有人,包括开发者可以关闭一个私密的共享圈子。 一个小历史就是“小密圈”一开始发展非常迅速,用户非常喜欢, 但是不久就被zf封了直接被下架处理。 另外的确可能有用户拿“小密圈”来分享违法内容,这些内容被封导致整个服务被封了,所谓“孩子和洗澡水一起泼掉了”。

一个好的去中心化服务,首先可以有很多节点, 每个节点可以制定自己的规则,不符合规则的,节点运营者可以自己处理或者按照当地法律处理; 不喜欢受限制的用户可以自己运行自己的节点,或者自己联合起来运行自己的节点。 只要这些节点的协议是一致的,采用DID机制来分享用户资料,采用链上资产来支付和控制访问管理,那么用户就可以用一个统一的客户端app (可以是web app,也可以是移动app)来统一访问无数个后端节点。

这样设计就完美地实现了去中心化的类似“小密圈”的私密分享社群。 每个节点自己制定自己的规则,自己管理内容和法律的要求, 违规的节点可能被zf清理却不会影响整个服务, 如果某个节点的服务器被墙,可以简单更换下服务器继续认可过去的DID和购买记录,原来的用户一点不受影响,甚至用户不会有感觉节点的服务器已经迁移。

开发这个dapp的开发者可以制定一些分配规则,例如所有的收益的10%归这个开发者,每个节点可以制定规则例如收入的15%归节点运营者, 每个收费的分享群的主人自己制定自己的价格。 如果群主觉得节点收费太贵了,可以去一个便宜的节点,甚至自己跑节点这样完全不需要分给节点比例。 但整个应用的开发者就只需要维护好应用,自己享受分成。 应用的开发者甚至可以制定自己的分成规则,例如收入的50%给前端开发者,50%给后端开发者,如此类推。

1赞

厉害了,就等开发者源源不断过来开发dapp了 :grin:

非常棒的去中心化多节点应用架构,各应用节点可以独立运营,数据通过链和did保持一致。

Wonderful