Filecoin官方 | Lotus 节点的演变

共 2259字,需浏览 5分钟

 ·

2021-06-27 01:08




关于 Lotus 

Lotus是 Filecoin 网络的一个系统实现,用 Go 编写。作为 Filecoin 的第一个系统实现,Lotus 旨在为整个网络奠定坚实而有弹性的基础。任何 Filecoin 节点的核心功能之一是实现有用数据的存储和检索,从而为 Filecoin 网络上强大的检索市场奠定基础。

您可以运行 Lotus 软件客户端加入 Filecoin 测试网。Lotus 可以在 MacOS 和 Linux 上运行。尚不支持 Windows。

Lotus 的两个主要组件是:
Lotus 节点。可以同步区块链,验证所有区块、转移和交易。它还可以促进新存储交易的创建。运行这种类型的节点非常适合不希望为网络贡献存储、生成新块和扩展区块链的用户。

Lotus 存储矿工。可以在网络中注册为矿工、注册存储、接受交易和存储数据。Lotus 存储矿工可以生产区块、扩展区块链并为添加到网络中的新区块获得奖励。

Filecoin 的 Lotus 实现由Protocol Labs支持 。

Lotus 节点的演变

Filecoin 生态系统正在快速发展,Lotus 等生态系统工具也在不断发展以满足网络的需求并寻求未来发展的机会。特别是检索市场将为 Filecoin 网络引入新功能,包括索引、CDN、公共检索等。

我们发现这些新的检索市场功能将依赖于强大的矿工基础。如今,Lotus 矿工倾向于解决他们认为不稳定或无利可图的某些功能。归根结底,这是来自矿工的良好行为,它帮助 Lotus 实现演进以满足他们的需求。当网络参与者开始屏蔽某些功能时,表明软件本身应该为其用户提供更多的灵活性和模块化。

通过这一观察,我们意识到 Lotus 的单体二进制文件阻碍了 Lotus 矿工的灵活和稳健的操作,并试图从中找出解决问题的机会。


单体二进制

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

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

单体架构的问题

从广义上讲,这种整体架构阻止了矿工在不同的职责之间有效地分配他们的资源。强制合并责任与矿工的核心动机相矛盾,即在最小化运营风险的同时实现利润最大化。具体来说,单体二进制存在许多问题。


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


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


功能膨胀:在 Filecoin 的使命中,矿工不仅存储和提供原始数据,而且还提供有用的服务,例如索引、发现等。使用新的矿工侧功能重载单个进程会导致进一步的担忧和操作风险。


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


缺乏细粒度控制:由于矿工无法主动选择加入或退出功能,他们必须通过拒绝交易、设置高价以劝阻交易甚至分叉代码库等机制来解决这些问题。


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


 迈向模式化矿工结构 


 Lotus 矿工的更多责任

使用这种初始分类,是迈向模块化矿工架构的第一步,解决了单一架构的缺点:将 Lotus 矿工流程分为 1) Lotus 市场流程 2) 其他 Lotus 矿工流程。

通过分离市场和挖矿,Lotus 节点的架构对于矿工来说变得更加聚焦于功能,使他们能够将自己的职责与最适合他们的能力以及他们对网络的经济偏好的责任保持一致。


设计原则

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

避免类似微服务架构的复杂性:明确避免复杂的相互依赖网络,这些网络会迅速转化为意大利面条式架构,并需要专门的工具(如服务网格)来管理和调试。这是引入 Lotus 错误的复杂性级别。秩序和等级仍然存在,因为这些过程仍然是一个单一的有凝聚力的单元的一部分。

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


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

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

为了设计这个新的运行时间,我们通过 Erlang/OTP 和面向角色的编程(例如 JVM 世界中的 Akka)等模型来激励自己,而无需完全依赖这些框架,并从服务网格和编排器中借用精选概念和抽象概念。

感谢阅读!


在右下角留下你的赞吧


浏览 40
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报