sofastack / sofa-bolt

SOFABolt is a lightweight, easy to use and high performance remoting framework based on Netty.
https://www.sofastack.tech/projects/sofa-bolt/
Apache License 2.0
2.4k stars 856 forks source link

BOLT 支持 Unix Domain Socket 的可行性和必要性 讨论 #110

Open leizhiyuan opened 5 years ago

leizhiyuan commented 5 years ago

Your question

最近有用户提到,BOLT 是否可以支持 Unix 的进程间通信,提供类似同物理机上调用,或者进程间调用。来提供性能。 比如 mesh 的场景,我这边先粗劣改了几处来快速验证了下,基础的RPC 通信是 ok,如果要支持,这几处可能是需要抽象的。供后面参考。

https://github.com/leizhiyuan/sofa-bolt/tree/unix_socket

1.对 url 的抽象,这种情况,客户端 url 是空的 2.提供多个 RpcClient 和 RpcServer,因为有一些静态字段,或者一个,但是通过开关来控制 3.连接管理的一些地方。需要使用SocketAddress,但是带来的影响是一些本来从InetSocketAddress 取 url 的,就需要先转换,再处理。比如ResponseCommand中

Your scenes

describe your use scenes (why need this feature)

Your advice

describe the advice or solution you'd like

Environment

smalldok commented 5 years ago

估计不太可能,你说的这些让我想到了ZeroMQ

huangyunbin commented 5 years ago

Unix Socket其实非常有必要的,特别是在容器的场景下。我们这边的 rpc框架就已经有Unix Socket的通信方式了。 @leizhiyuan的代码我还没仔细看,我先说下几个注意的点: 1 Unix Socket是不开端口的了,所以一些监控工具或者测试框架需要注意 2 Unix Socket是拿不到来源的ip了,很多场景其实都需要的。我们这边是在cookie中传输。 3 Unix Socket的sock文件放到/dev/shm是否能提高性能

captainjack0x7C8 commented 4 years ago

ServiceMesh场景下UNIX域套接字很实用,但这样做,需要能够对请求进行路由,选择使用网络套接字或UNIX域套接字