科普 | Lotus节点的演变

[复制链接]
14263 |0
发表于 2021-7-6 13:00:00 | 显示全部楼层 |阅读模式

Lotus&检索市场建设者峰会


检索市场小型峰会目的是聚集多个检索市场解决方案的所有建造者,突出迄今取得的进展,并确定多个系统如何结合在一起,以提高网络用户的检索交易的有效性、效率和可靠性。

峰会的所有演讲都在 FIL 频道播出:

https://www.youtube.com/playlist?list=PL_0VrY55uV19TsJ8r2qsMyG2v2LIKEmv2

在 4 月份的检索市场建设者小型峰会上,Raul Kripalani(libp2p和FIL核心开发者)深入研究了 Lotus 节点的架构和计划中的更改,特别是针对 Lotus-miner 节点的更改,以更好地满足矿工和网络参与者的需求。

完整的演讲可以在这里找到:

https://www.youtube.com/watch?v=cmrLfnqzflk

这场演讲旨在强调,为确保检索交易对 Lotus miner 来说是高度可靠和可扩展所需的工作,帮助确保 FIL 检索市场将建立在坚实的基础上。

Lotus 是 FIL 网络的一个实现,用 Go 编写。作为 FIL 的第一个实现,Lotus 旨在为整个网络奠定坚实而有弹性的基础。

任何 FIL 节点的核心功能之一是实现有用数据的存储和检索,从而为 FIL 网络上强大的检索市场奠定基础。


Lotus 节点的演变


FIL 生态系统正在快速发展,像 Lotus 这样的生态系统工具也在不断发展,以满足网络的需求并尝试未来的机遇。

特别是检索市场将为 FIL 网络引入新的功能,包括索引、CDN、公共检索等。

我们发现的问题是,这些新的检索市场功能将依赖于强大的矿工基础。如今,Lotus miner 倾向于绕过他们认为不稳定或不盈利的特性。

归根结底,这是从矿工那里可以看到的良好行为;它帮助 Lotus 实现发展以满足他们的需求。当网络参与者开始短路某些功能时,这表明软件本身应该为其用户提供更多的灵活性和模块化。

通过这一观察,我们意识到 Lotus 的单一二进制代码阻碍了 Lotus miner 的灵活和稳健的操作,并确定了解决该问题的机会。

wk588_com_ieae5d0peei.jpg

wk588_com_ieae5d0peei.jpg


单体二进制


到目前为止,Lotus 节点的架构在很大程度上是单一的。Lotus 有两个截然不同的入口点:1)一个完整的节点;2)矿工。

然而,除此之外,网络参与者在承担存储生命周期中的哪些职责方面几乎没有选择权。例如,矿工的任务是采矿、证明存储、达成交易等。这些是根本不同的职责,但它们通过当前的 lotus-miner 架构结合在一起。


单体架构的问题


广泛地说,这种单一的架构使矿工无法在不同的职责之间有效地分配他们的资源。强制联合责任与矿工的核心动机相矛盾,即在最大化利润的同时将运营风险降至最低。具体地说,单体二进制存在许多问题。

脆弱性:当架构中没有隔离时,一个区域中的 bug 可能会泄漏并影响其他关键流程。这使得很难在关键进程和非关键进程之间进行划分,并使整个实例容易崩溃。

增加受攻击面:Lotus miner 的某些进程需要公开公共端点,这使得系统的这一部分容易受到漏洞的攻击。如果架构是单一的,单个公共端点可能会危及整个系统。

特性膨胀:在 FIL 的任务中,矿工不仅存储和提供原始数据,而且还在其上提供有用的服务,如索引、发现等。使用新的矿工特性使单一流程过载会导致更多的担忧和操作风险。

无法扩展:不同的功能需要不同的特性和不同的升级流程。试图在一个单一的系统中管理这些不同的功能是困难的,并且会导致缓慢的迭代和增长。

缺乏一些细微功能控制:由于矿工不能主动选择加入或退出功能,他们不得不通过拒绝交易、设定高价劝阻交易,甚至是分叉代码库等机制来绕过这些问题。

迭代速度较慢:单一的体系结构意味着测试和创新更加困难,因为没有简单的方法来隔离新组件并选择加入实验特性,而不将其引入整个系统。


迈向模块化的矿工架构


从本质上看,Lotus 矿工的职责分为两类:封装和市场。这两层共享非常不同的服务和 SLA。

例如,Lotus miner 的采矿业务是其最具经济利润的活动,而且在本质上也是私有的。然而,该公司的市场运作完全是公开的,并采用不同的盈利模式。

wk588_com_obe5hbcsovk.jpg

wk588_com_obe5hbcsovk.jpg

Lotus miner 的更多责任:

https://github.com/protocol/web3-dev-team/blob/raulk/lotus-miner-runtime-segregation/proposals/lotus-miner-runtime-segregation.md#context

使用这个初始分类,迈向解决单体架构缺点的模块化矿工架构的第一步出现了:将Lotus miner 进程分离为1)Lotus 市场进程;2)其他 Lotus miner 进程。

通过分离市场和矿工,Lotus 节点的体系结构变得更加特定于矿工的特性,使他们能够将自己与最适合他们的能力和他们对网络的经济偏好的职责相结合。

wk588_com_rxg3go10dxg.jpg

wk588_com_rxg3go10dxg.jpg


设计原则


在朝着更加模块化的矿工架构的新道路前进的同时,Lotus 将继续坚持一些设计原则:

避免类似微服务架构的复杂性:明确地避免相互依赖的复杂网络,这些网络会迅速转化为意大利式架构,需要专门的工具,如服务网来管理和调试。

将这种复杂性引入 Lotus 是错误的。顺序和层次结构仍然存在,因为这些流程仍然是单个内聚单元的一部分

简单的中心/辐条架构:Lotus 正在向中心辐射架构发展,该体系结构由监督者实例管理。这些监督者知道部署中提供了哪些功能,以及哪些节点提供了这些功能。它们还充当到聚合的外部 API 入口点。

wk588_com_0y02rjydrej.jpg

wk588_com_0y02rjydrej.jpg

值得在很多方面投资:新的 Lotus 架构必须值得投资。除了盈利能力之外,其他一些 ROI 因素还包括可靠性、安全性、开发人员敏捷性和稳健性。

强大的分布式流程生命周期监督系统:模块化架构不能意味着完全隔离的架构。如果某个服务出现故障,这意味着其他下游服务也会出现故障,那么整个系统必须能够注意到并做出反应。

为了设计这个新的运行时,我们在 Erlang/OTP 和面向参与者的编程(例如JVM世界中的Akka)等模型中受到启发,并借用服务网和编排器中的精选概念和抽象,而实际上并不完全依赖这些框架。


更多资源


要了解有关 Lotus 的更多信息以及实现模块化矿工架构的途径,请参阅:

Lotus Github:

https://github.com/fileDavinci-project/lotus

Proposal:Miner Runtime Segregation

https://github.com/protocol/web3-dev-team/blob/raulk/lotus-miner-runtime-segregation/proposals/lotus-miner-runtime-segregation.md

Draft Prototype:

https://github.com/fileDavinci-project/lotus/pull/5983

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门版块
快速回复 返回顶部 返回列表