Cardstack架构中最重要的部分Cardstack Hub 详解
haranN
发表于 2022-12-11 14:31:02
83
0
0
( U, q) d7 k( k# f$ l
至于开发人员,我们正在筹备CardstackHub的技术文档。在此期间,你可以通过我们的白皮书或GitHub页面了解更多信息,其中CardstackHub是完全开源的。
5 u) \3 s4 V3 @! ?0 G B X- X5 q
它始于“卡片”7 D8 w& F0 t2 E( F9 \* [. B
Cardstack架构最核心的一点是我们将网络应用程序以“卡片”的形式承载,将丰富的功能打包成组件。我们希望来自不同开发者的组件可以在你的浏览器中共存,建造一个良好的运行环境。0 \, b1 X# R& R1 w @) n8 `7 u8 K
2 P- k1 W# Z( b8 }; X( K8 f
这个目标最大的挑战就是要让应用在不论是中心化还是去中心化的互联网上,都能轻松与不同数据源进行交互。
处理多个数据源
拿你手机或电脑上的应用打比方,十有八九是对接着许多不同的数据源。有的数据可能在传统的SQL数据库中(如PostgreSQL),有的数据在以太坊区块链或Git上,有的数据甚至在云端被完全托管。8 c- |: g6 K: n$ Z2 F
- z9 }6 S) A2 e2 r; p6 K: u7 _/ _
这时候,问题就来了:我们每天所需的数据被困在这些不同的源头上,每一个数据源就像孤岛一样,互不相通。你的日历对你审计的数据一无所知,无法提示你还款信息,也无法根据区块链币价波动给你提示,更无法与以太坊中的某些智能合约相关联并不容易。目前这些全靠第三方应用完成。
现在请你大胆地试想,如果我们把所有东西放在一起,你的体验会是如何?作为数据所有者,你必须有属于你自己的搜索引擎,而这就是设计CardstackHub的目的。* D- n: \1 j5 [# [. V
CardstackHub汇总你的网络生活% w# K; A% P4 d1 w2 B
. K( L; b7 _# Q1 ^ H- b
每一个数据所有者都应有自己的索引引擎,把所有与你相关的信息集中在你的Hub里。从技术上讲,Hub是一个基于Node.js的服务器。在Hub中有ElasticSearch或PostgreSQL索引功能,这两个强大的搜索引擎可以将一堆规范的数据变为为一个可快速搜索的数据层。& P; Q, k9 }- ^+ c; a4 v
将内容索引到Hub后,将通过JSON:API或实时WebSockets快速传输你的前端应用程序,整个流程都有非常快速的标准接口。即使数据来自许多不同的来源,这些数据也将被交叉引用并整体连接。/ M* M& ?" o7 a
# [6 O8 T9 g8 X3 p9 a
当这些都发生在前端和Hub之间,这意味着你的数据源可以长时间运行并快速处理请求,处理像区块链这样慢尤为重要。
. ]5 {- ]! x6 n9 ^
为了实现这一点,你需要一个典型的适配器,即一个将信息接口相连的转换器。我们在Hub中构建了非常好的插件功能,方便你为Hub编写这样一个适配器,该适配器知道如何与PostgreSQL对接。就像一个能与以太坊对接的适配器一样,它可以打包自己的微服务。例如,若你说,“我想添加以太坊到我的Hub”,该插件将启动必要的微服务来托管Geth。7 @/ m* B8 z9 g G$ |
Cardstack插件
我们有一个功能规范的插件系统,不会让插件有太多乱七八糟的功能。规范了插件系统之后,每个插件能提供特别功能,并且被复制到别的功能上去。这里面有些插件是非常通用的,就像中间件,但剩下的一些可能用途会更为集中,更小众。; ~* W: f0 s& c8 Y) d" v5 W4 R
例如,要添加一个数据源,您将需要索引器,编写器和搜索器的某种组合。事实证明,这三种类型良好的插件足以完成各种各样的后端:; e. L8 w( o( l4 s: z
一、索引器
9 `0 M! j" J# [5 a* n9 [
索引器可以逐步将内容从其他地方索引到您自己的搜索索引中。这是使用数据功能最强的方法,因为你所有内容存放在本地缓存。
这使我们有更多的空间来应用授权一些规则。无论该数据的规则是什么,都可以在索引时实施。因此,哪怕您拥有的授权规则非常多,我们也可以将所有事实归纳到您的搜索索引中,让前端拥有非常类似搜索引擎的体验。在这种情况下您不会受到像登录授权之类的限制。3 k4 M, s9 K/ Y4 t4 Z
/ ^1 j$ E+ z3 w9 d' x
二、编写器! V2 D* F. w9 f3 O7 N
: G' u9 @( D! [. E+ u! f* B) v$ G
编写器的功能是将数据编写进数据源。要知道数据真正的栖息之地是你的后端。因此,重要的数据应该存放在你拥有和控制的后端。
, W5 ^: g( ?" G6 Y
您尝试集成的数据仍然存在于后端,而Hub只是一个缓存层。因此,编写器插件不会写入缓存。相反,编写器插件直接通过Hub,写入权威数的据源,然后用索引器将该内容拉回来。打个比方,如果你写入以太坊公链的代码让智能合约代码改变了,你将可以从索引中看到这些改变。( r. m5 @- ~: W; x8 A( S8 h
. W+ l, G2 S* f0 d0 c+ H
三、搜索器7 l8 f$ t# \- j; U7 F8 E- \- t
搜索者让我们通过Hub处理请求。我们可以在本地对搜索索引中没有的内容进行更深入的搜索。$ ?* Z- S+ E( Z. d4 G% X
! d! Q6 Z3 f4 j7 \& \
假设你已经决定在你的应用程序中将身份管理的任务外包给其他人,而你让用户使用GitHub的个人账号登录。在这种情况下,你仍希望在应用程序中代表用户。你不一定要将每个GitHub用户编入你的Hub索引,而只需使用搜索器,当您想要引用某个用户时,该请求会直接走到终端。
全栈去中心化应用程序0 @5 B& r# j' z5 o9 ?9 T/ l
我们远大的目前是支持你在这个堆栈中上下打包全套功能。" u; h/ O) q, S4 Q2 ], L
0 C$ m. Q7 n7 m3 Y+ {
例如,作为开发人员,如果您想构建一个使用以太坊作为数据源的dApp,你可以构建一张能与应用程序中数据对接的前端卡。你还可以提供插件,把任意服务器端与Hub的数据层对接起来。$ w1 X- s$ j' w! c
' V- P9 l5 a5 o* Z( V: f) b' F
Hub架构允许卡片轻松地与链上智能合约对话。
当然数据层本身还有很多工作要做。也许有一个智能合约要部署。也许有一个需要创建的PostgreSQL数据库。也许有一个Git回购创建。, o8 |8 w( s! K0 f# r, Y
重中之重是,你可以将所有层打包成可重复使用的部分。这样你就可以拥有一个完全开放的生态系统,重复使用这些流程。
5 _( Y* ~ v2 ?+ C- [+ k' f$ h3 C) @
面向多个区块链5 A" ^. F; Y7 D5 v* @" D, j
我们编写的第一个区块链插件允许Hub与以太坊/Geth对话。但由于Cardstack架构支持多个同步数据源,并提供结构良好的插件API,以确保它们同样是稳定地,不受限制地。; `8 h# a) S* d/ E0 X; b' B ~0 b
这意味着Cardstack能加速创建可以轻松索引、搜索和写入去中心化数据源的应用程序。换句话说,Hub意味着任何区块链都可以与其他区块链,dApp和现有数据源进行交互。
- J" A1 ?5 ~: F8 J
结语
关于Cardstack架构的另一个好处是,各个模块建设的过程和有开发经验的团队开发流程很相似。这些模式是在多次重复构建此类应用程序的尝试后,不断吸取经验,才构建成功的。
我们已经用我们最简可行产品--Cardstack代币生成事件--证明了我们的方法,该网页应用完全是由CardstackHub支持的。我们即将推出的应用程序Cardspace将与我们的可组合UI/UX(用户体验工具)配对使用,以展示Hub的能力。
我们的目标是让Cardstack框架成为未来dApps的通用开发者工具包,并开始交付能够完全涵盖用户生活的软件。
成为第一个吐槽的人