为什么需要 libp2p-rs ?

Netwarps 一直在做去中心化的存储和计算平台,目标是物联网,甚至 NDN 网络。因此我们需要构建一个简洁的高性能的底层网络。之前 Netwarps 使用 C 语言实现了一套基本的 P2P 网络,然后在这个网络上搭建了去中心化文件存储系统(DFS)和去中心化计算平台(DCP)。

但是随着技术的发展,我们越来越觉得基于 C 语言构建的 P2P 底层网络存在很多问题:
1、C 语言实现的异步框架维护困难,代码逻辑复杂;
2、C 语言在程序员的眼里里似乎正在失去吸引力;
3、C 语言与当下流行的很多设计方式,编程方式存在代沟,难以与其他项目形成良性互动。

于是,我们开始考虑使用更新的语言来实现一套异步的,代码简洁的,运行高效的 P2P 网络。

而这时,我们第一个就想到了 libp2p,作为区块链行业的明星项目,Go 语言的 libp2p 现在几乎成了去中心化网络的一个标杆。我们自己对 libp2p 的使用其实很早就开始了,然而我们却一直没有使用在我们自己的去中心化存储和计算平台里,原因只有一个,Go 语言是一个运行时比较重的语言,虽然 Go 适配了 Arm 等低功耗设备,但是其对硬件的要求,远不是我们考虑的 IOT 设备能达到的。

当我们起心开始做一个新的 P2P 网络的时候,我们基本上就确定了用 Rust 来实现。一方面,很多 IOT 设备已经兼容了 Rust,另一方面,没有运行时的诱惑是任何一个把目光放在 IOT 方面的团队拒绝不了的,这意味这我的程序可以在更低功耗的硬件上运行。

然而,这条路并不好走。

首先,大家低估了 Rust 语法的难度,我们的团队主要是 C 语言和 C++ 语言功底不错的程序员,在我们看来,还有什么语言的语法会比这两个老古董更繁琐吗?很快就被打了脸。

其次,Rust 的生态对于入门玩家不太友好。我们有同事说,当我编译出错的时候,我甚至不知道是我的问题还是编译工具的问题。

再次,Rust 对程序员的约束性很强,虽然这一点在我们开始这个项目之前也曾有所耳闻,但是我们真没想到,这个适应的过程会这么长。

还有,Rust 的异步框架成熟度都不太高,使用起来磕磕绊绊,有时候遇到问题也会无所适从。

但是,好在最后我们完成了。完成 libp2p-rs 对我们的团队是一个相当的成功也是一个相当的考验。

我们深知 libp2p-rs 这个项目不是完美的甚至可能都说不上完善,但我们坚持把它开源出来,一方面算是一个我们向 Rust 社区的些微贡献,另一方面,我们希望通过这个方式让更多的程序员尤其是中国程序员关注 Rust,关注 P2P。同时我们也希望大家能够了解,去中心化技术不仅仅是区块链和各种 Coin,去中心化技术也是 IOT 甚至整个互联网的未来方向。

猜你喜欢

转载自blog.51cto.com/14981235/2546711