我用 Rust 重写(并重新设计)了 frp,性能和资源占用有很大改善

2022-01-04 18:53:16 +08:00
 rapiz

rathole - 安全、稳定、高性能的内网穿透工具,用 Rust 语言编写。


先博一下眼球,让各位有兴趣继续看下去:

如果你对性能和内存的测试数据感兴趣,可以直接拉到帖子下面的图表感受一下

你可以先看看 README ,其中介绍了特性、配置和用法


下面写写我为什么要做这个工具,和我开发的时候在想什么。

frp 是优秀的基于内网穿透反向代理工具,方便易用,集成了很多功能。

但我对一个内网穿透工具的期望不太一样,我相信一个工具应该专注做一件事,通过简单优雅的设计接口来提供扩展能力。

我仔细思考了如何设计这样一个工具,它应该:

相比于 frp ,除了数据上的优势,rathole 还有更多的可能性:

未来

rathole 已经持续开发了一段时间,必要的特性已经趋于完善和稳定。我觉得是时候发布出来,让大家体验使用和反馈。

目前已经决定的开发计划有 HTTP API (或其他形式的 API )。API 实现后,能够支持 Dashboard 和复杂动态管理需求的开发。

最后,如果你还没有查看 项目 README ,这里是一个方便的链接

性能测试

测试的具体数字随机器变化,测试方法见此,主要用 iperf3 测试 TCP/UDP 吞吐量, vegeta + nginx 测试 HTTP 吞吐量,同时检测内存占用

21506 次点击
所在节点    分享创造
117 条回复
275761919
2022-01-05 11:30:23 +08:00
道理我都懂,为什么我的 frp 就只占用几 M 的内存
275761919
2022-01-05 11:34:20 +08:00
frp 就只占用几 M 的内存![fpr 内存占用.jpg]( https://s2.loli.net/2022/01/05/N2rpFEufzgTHiw4.jpg)
missdeer
2022-01-05 11:39:55 +08:00
我主要用 frp 连远程桌面,所以对吞吐和并发的要求不高,对延迟比较敏感,因为 NAT 的关系不能用 UDP/KCP ,只能用 TCP ,继续观望一下
rapiz
2022-01-05 12:20:43 +08:00
@275761919 benchmark 过程和脚本已经在 docs/benchmark.md 给出。这个结果是在有一定流量的时候测试的。不过我的 x86 frps 在即使没有任何连接的情况下也占了 20MiB 的 RSS 。你这个结果吓得我立刻去测试,发现还是有 20 MiB RSS 。你可以参照 benchmark 文档测试一下,或许和版本和统计口径有关。
bigbigpark
2022-01-05 13:49:31 +08:00
我想知道为啥用 Rust 写的 MeiliSearch 那么 吃内存。。
void1900
2022-01-05 13:54:21 +08:00
我想知道的是稳定性如何,frp 长时间运行有时候会挂,也可能是 gfw 问题
rhacker1995
2022-01-05 13:55:20 +08:00
最近正好在学 rust ,希望楼主能出个 contribute guideline ,包括环境搭建,核心代码讲解,方便别人学习参与
zxxufo008
2022-01-05 14:06:03 +08:00
项目 logo rat 的不明显
HarveyLiu
2022-01-05 14:34:48 +08:00
坐等官方 Docker
Ansen
2022-01-05 14:36:00 +08:00
看了一下语法,我还是老老实实的写 go[二哈]
0o0O0o0O0o
2022-01-05 14:46:51 +08:00
同在群里看到推过,鉴于 OP 说开发了快一个月,于是偷瞄了 OP 在群里近一个月的发言,只能说太强了
cat9life
2022-01-05 14:55:47 +08:00
一波三连 厉害了
carity
2022-01-05 15:06:32 +08:00
等一波 http api
learningman
2022-01-05 15:08:23 +08:00
@ScepterZ #8 支持的,有交叉编译的工具链
lion9527
2022-01-05 15:09:35 +08:00
star 支持一个
jaylengao
2022-01-05 15:38:36 +08:00
我一直想用 rust 整一个类似 frp 的项目,然而
feelinglucky
2022-01-05 15:49:36 +08:00
求官方的 docker 镜像,看了下配置和 frp 差不多
sgissb1
2022-01-05 16:26:52 +08:00
其实用啥语言不重要,重要的是开发者敲键盘时,输入的代码逻辑和组织结构。

go 语言世界里,有不少项目是太过依赖语言特性了,这也导致了软件工程的表现各不一样。语言之争也是这么延续下来的,以前说 XX 语言好坏,那是硬件受限比较大,现在硬件都已经快不少了,软件基础设施也迭代不少了,互联网 ctrl+c ctrl+v 水平也在稳中趋升。还真单纯的纠结语言问题就没啥意思了,除非是某某语言创始人。
hxse
2022-01-05 16:41:45 +08:00
可不可以添加一个"端到端加密"功能, 因为害怕中转服务器钓鱼, 所以不想把数据让中转服务器看到, 如果能支持这种加密就好了, 像 mega 网盘一样, 服务器方也不知道用户传了些什么
rapiz
2022-01-05 16:45:36 +08:00
@hxse 对于端到端的场景,真正合适的工具是 VPN 和各种组网工具。取决于具体需求的不同,rathole 可能可以作为其中的一环,但不会负责全部。https://github.com/rapiz1/rathole/blob/main/docs/out-of-scope.md

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX