大家好!我先描述一下我的需求:用户通过 HTTP 协议访问位于公网的 API 服务器,然后 API 服务器需要将请求修修改改再转发到一个代理节点上,代理节点可能有一个或多个(如果不能实现多个,一个也行)。由于代理节点处在内网,无公网 IP,且无法添加公网 IP,因此寻求解决办法,算是反向 RPC 吧。
示意图如下:
用户 --> API Server(Public Network) --> Agent Server(Private Network)
-
尝试使用 RPC。现有的 RPC 只能 Client 向 Server 发送请求,然后 Server 计算后得到结果并返回 Client。看了下 tarpc,试着把 Client/Server 关于端口绑定和连接的部分换一下,发现好像不能直接这么玩,又没有文档描述。
-
前段时间 Rust视界 频道推送了一个库叫做 Zenoh,它可以实现存储和计算的分布式,感觉很不错,应该能符合需求,只是它是基于
async-std
的,而我 API Server 基于 actix-web。 -
使用带 RPC 的消息队列,好像 RabbitMQ 可以,打算最近尝试一下,不过没有接触过消息队列。
-
使用 frp 这类代理工具实现内网穿透。不知道稳定性如何,且会增加其他组件,也在考虑。
之前基于 tokio
自己写过一个比较定制化的 RPC,用 bincode
做的压缩。感觉代码有些繁琐,坑也多,现在想再找找有没有成熟的方案,并了解一下大家遇到这种问题会如何解决?谢谢!
更新:tokio-tower 完美解决!就是资料有点少,写了个例子记录自己学习: https://github.com/sunnysab/a-tokio-tower-example
评论区
写评论https://github.com/luyikk/rust_netx
欢迎使用我的 netx
感觉变成了如何内网打洞的问题了
api server无法直接连内网服务看起像是网络层的问题,需要用vpn之类的?这样的话实际上和传输层没啥关系了,要解决网络的连通性
刚才发现 rust-libp2p 好像可以实现,打算尝试一下...
不知道是不是引入了一个庞然大物
里面很麻烦的一点是,公网中的 API Server 没办法直接访问内网的 Agent Server...
需要依靠内网的机器主动连上来等待请求,或者用其他软件转发
查了一下确实可以利用网关的路由功能做这件事。
不过 Rust 下好像没有类似的、完整的做服务注册、发现和路由的 API 网关库。
--
👇
sikasjc: 这种API server一般叫api gateway吧
之后的RPC调用,就是你的API server作为client就可以了
这种API server一般叫api gateway吧
之后的RPC调用,就是你的API server作为client就可以了