同机通信为什么用 Unix 域套接字
Unix 域套接字是内核内的进程间通信通道,不走网络协议栈,因此省去了环回接口上的少量处理开销,也天然不可能被主机之外的机器访问。当网关与推理引擎部署在同一台机器上时,把两者之间的连接从环回地址改成套接字文件是常见做法。需要注意的是,它带来的是链路层面的收敛,性能差异在整体推理耗时里通常不是主要变量。
基本信息
| 适用场景 | 网关与引擎同机部署,替换环回地址连接 |
|---|---|
| 连接标识 | 文件系统路径,如 /tmp 或运行目录下的套接字文件 |
| 访问控制 | 依赖文件系统权限位与所在目录权限 |
| 客户端支持 | 命令行工具需明确指定套接字路径 |
| 反向代理支持 | upstream 可直接指向套接字文件 |
典型使用场景
- 同机网关转发:减少一层网络栈处理,链路更短
- 避免端口占用:多实例启动时不必为每个引擎分配独立端口
- 安全收敛:套接字文件权限收紧后,同机其他用户无法直连引擎
- 容器内通信:同一容器或共享卷内的进程间调用
- 本地调试:用命令行客户端直接对套接字发请求,排除网络因素
监听与访问
监听与访问
vllm serve <模型路径> --uds /run/llm/vllm.sock # 部分版本支持,以文档为准
curl --unix-socket /run/llm/vllm.sock http://localhost/v1/models # 不做 DNS 与端口解析
chmod 750 /run/llm && chmod 660 /run/llm/vllm.sock # 收紧到运行用户与同组
ls -l /run/llm/vllm.sock # 复查权限位
# 反向代理侧:
# upstream llm { server unix:/run/llm/vllm.sock; }两种连接方式对比
| 维度 | 环回地址 | Unix 套接字 |
|---|---|---|
| 可达范围 | 本机及被转发后的外部 | 仅本机进程 |
| 访问控制 | 依赖防火墙与监听地址 | 依赖文件系统权限 |
| 端口占用 | 每个实例需独立端口 | 无端口,仅需文件路径 |
| 排查工具 | 工具链成熟,抓包方便 | 部分监控与抓包工具支持有限 |
| 适用判断 | 需要跨机访问时使用 | 同机且追求链路最简时使用 |
观测与探活工具对套接字的支持程度不一:切换前先确认监控采集与健康检查能覆盖这条链路,否则故障时缺少可见性。
套接字文件权限过宽时同机任何用户都能直连引擎:不仅要收紧文件本身,所在目录的权限也要一并处理。
套接字文件路径要避开会被系统清理的临时目录,也不要在服务重启后残留旧文件,否则新实例可能因为路径被占用而启动失败。